Falha GhostApproval em assistentes de codificação com IA permite gravação via symlink em arquivos sensíveis do desenvolvedor

Falha GhostApproval em assistentes de codificação com IA permite gravação via symlink em arquivos sensíveis do desenvolvedor

Pesquisa da Wiz mostra que seis agentes de IA podem redirecionar edições aprovadas para chaves SSH, arquivos de inicialização do shell e credenciais fora do repositório confiável

ComponenteAmazon Q Developer, Claude Code (Anthropic), Augment, Cursor, Google Antigravity e Windsurf — assistentes de codificação com IA que leem e gravam arquivos no workspace do desenvolvedor
VetorRepositório malicioso contendo symlink com nome aparentemente inofensivo (ex.: project_settings.json) apontando para destino fora do projeto (~/.ssh/authorized_keys ou ~/.zshrc); instruções no README induzem o agente a gravar conteúdo controlado pelo atacante
ImpactoInclusão de chave SSH pública do atacante permitindo login remoto sem senha quando o serviço SSH estiver acessível; execução de comandos na próxima abertura de terminal via modificação do arquivo de inicialização do shell; leitura silenciosa de credenciais em arquivos fora do projeto (demonstrado com credenciais AWS no Augment)
PrioridadeAplicar correções dos fornecedores que já as publicaram, exigir resolução de symlink e destino real antes de qualquer aprovação de gravação, restringir escopo de arquivos do agente e auditar ~/.ssh/authorized_keys, arquivos de shell e credenciais após uso de repositórios desconhecidos
MitigaçãoTrês dos seis fornecedores já enviaram correções; dois ainda em desenvolvimento; Anthropic contesta classificação como vulnerabilidade e aponta aviso de symlink implementado em fevereiro de 2026
Resumo técnico

Pesquisadores da Wiz documentaram um padrão de falha denominado GhostApproval que afeta seis assistentes populares de codificação com inteligência artificial. O problema combina dois elementos: o uso de links simbólicos do Unix (symlinks) sem validação adequada do destino real da gravação, e uma interface de aprovação que apresenta ao desenvolvedor um caminho diferente daquele efetivamente modificado no disco. O resultado é um bypass de consentimento informado — o operador humano permanece no fluxo de aprovação, mas a caixa de diálogo não reflete o arquivo que será alterado.

A divulgação ocorreu em 8 de julho de 2026. Entre os produtos afetados estão Amazon Q Developer, Claude Code da Anthropic, Augment, Cursor, Google Antigravity e Windsurf. Três fornecedores já disponibilizaram correções; dois ainda trabalham em mitigações. A Anthropic é o único fabricante que contesta a classificação como defeito, argumentando que o cenário está fora do modelo de ameaça porque o desenvolvedor escolheu confiar na pasta ao iniciar a sessão e aprovou a edição. A Wiz apresenta o achado como pesquisa; não há indicação de exploração ativa em ambiente real com está técnica específica, embora padrões correlatos já tenham aparecido em campanhas documentadas.

O achado reforça uma fragilidade de design compartilhada entre agentes que tratam arquivos de repositório simultaneamente como código, instrução operacional e caminho de escrita. Quando o agente segue um symlink com operações de arquivo convencionais e solicita aprovação com base no nome apresentado — e não no inode ou caminho resolvido — a barreira humana deixa de funcionar como controle de segurança. Equipes de engenharia, AppSec e plataformas de desenvolvimento devem tratar repositórios não verificados como vetor de supply chain direto sobre a estáção de trabalho do desenvolvedor.

Fluxo técnico

O ataque começa com um repositório preparado pelo pesquisador ou atacante. Um arquivo aparentemente inofensivo — por exemplo, um arquivo de configuração local com nome como project_settings.json — é na verdade um symlink que aponta para um destino sensível fora do diretório do projeto, como o arquivo de chaves autorizadas SSH do usuário ou o script de inicialização do shell zsh. O README do repositório instrui o assistente a adicionar uma linha a esse arquivo de configuração; o conteúdo inserido corresponde a uma chave pública SSH do atacante disfarçada de parâmetro legítimo.

Quando o desenvolvedor pede ao agente para configurar o workspace ou seguir as instruções do README, a gravação atravessa o symlink e modifica o arquivo de destino real. Na variante voltada a acesso remoto, a chave pública é escrita em authorized_keys; se um serviço SSH estiver ativo e alcançável pelo atacante, o login remoto sem senha torna-se possível. Na segunda variante documentada, o destino é o arquivo de inicialização do shell (~/.zshrc), executado automaticamente na próxima abertura de terminal, dispensando a necessidade de SSH para obter execução de código no contexto do usuário.

A falha central não é a novidade dos symlinks — técnica conhecida há décadas — mas a desconexão entre o que o agente raciocina internamente e o que a interface mostra ao humano. Nos testes com Claude Code, a Wiz observou que o agente identificou em seu raciocínio interno que o arquivo era, na prática, um arquivo de configuração zsh, enquanto a caixa de aprovação exibia apenas o nome project_settings.json. O desenvolvedor que aceita acredita editar um arquivo de projeto local; a escrita atinge o shell ou as chaves SSH.

O comportamento varia por produto. No Windsurf, a gravação ocorre no disco antes da exibição dos botões Aceitar e Rejeitar, reduzindo o prompt a uma opção de desfazer com a modificação já persistida. No Augment, nenhum diálogo é apresentado; a Wiz demonstrou leitura silenciosa de um arquivo de credenciais AWS localizado fora do projeto. Ferramentas que ainda exibem prompt não são necessariamente mais seguras quando o nome exibido não corresponde ao destino resolvido. A Wiz classifica o conjunto como bypass de consentimento informado: o humano permanece no loop, mas o loop mente sobre o alvo da operação.

Superficie afetada

A superfície inclui estáções de desenvolvimento onde qualquer um dos seis assistentes processa repositórios confiados pelo usuário, com permissão de leitura e escrita no sistema de arquivos local. O risco concentra-se em arquivos fora do diretório do projeto que não aparecem em git status, tornando alterações invisíveis a revisões habituais de controle de versão.

Além do GhostApproval, o boletim da AWS menciona falha separada no Amazon Q Developer identificada como CVE-2026-12957, na qual repositório envenenado pode carregar automaticamente arquivo de configuração e executar comandos para obter chaves AWS após o workspace ser confiado. Esse caso é distinto tecnicamente, mas compartilha a premissa de repositório malicioso como vetor inicial.

  • Desenvolvedores que executam agentes de IA com acesso amplo ao sistema de arquivos local
  • Arquivos ~/.ssh/authorized_keys e scripts de inicialização de shell (~/.zshrc e equivalentes)
  • Credenciais e segredos em caminhos fora do repositório acessíveis por leitura do agente
  • Repositórios clonados ou abertos sem revisão prévia de README, arquivos ocultos e symlinks
  • Produtos com correção pendente entre os seis listados na pesquisa
Hunting e telemetria

A detecção exige correlacionar atividade do agente de codificação com modificações em arquivos sensíveis fora do workspace versionado. Como symlinks podem mascarar o destino na interface do produto, a telemetria de endpoint e auditoria de integridade de arquivos tornam-se mais confiáveis que a própria caixa de aprovação exibida ao usuário.

Equipes devem monitorar alterações recentes em authorized_keys, arquivos de perfil de shell e diretórios de configuração de ferramentas de IA após sessões em repositórios não familiares. A presença de novas entradas de chave pública não reconhecidas ou linhas de comando inseridas em arquivos de inicialização após interação com um agente constitui sinal de alta prioridade. Em ambientes corporativos, correlacionar logs de acesso SSH subsequente com timestamps de modificação ajuda a distinguir teste de pesquisa de tentativa de persistência.

Padrões correlatos já documentados por outras equipes — SymJack (Adversa AI, maio de 2026) e DuneSlide (Cato AI Labs, citado no advisory do Cursor) — reforçam que múltiplos fornecedores compartilham a mesma classe de falha de resolução de symlink associada a fluxos de aprovação. Em junho de 2026, o verme Miasma demonstrou uso em ambiente real de arquivos de configuração de agentes de IA em repositórios Azure da Microsoft para executar payload ao abrir o projeto em Claude Code, Cursor ou Gemini; a GitHub desabilitou 73 repositórios afetados. Isso indica que repositórios que orientam agentes de IA já são vetor ativo, embora a técnica GhostApproval específica permaneça classificada como pesquisa.

  • Timestamps e conteúdo de ~/.ssh/authorized_keys após sessões com repositórios desconhecidos
  • Modificações em arquivos de inicialização de shell fora do ciclo habitual de atualização do desenvolvedor
  • Leituras de arquivos de credenciais cloud fora do diretório do projeto durante execução do agente
  • Novas chaves públicas SSH não associadas a infraestrutura corporativa conhecida
  • Atividade de login SSH originada de endereços não esperados após abertura de repositório suspeito
Mitigação

A resposta deve combinar correções de fornecedor, endurecimento operacional e revisão de confiança em repositórios. Organizações que padronizam assistentes de IA no fluxo de desenvolvimento precisam mapear quais produtos na lista dos seis já receberam patch e quais permanecem em correção, tratando os pendentes com restrições adicionais de escopo até confirmação do fornecedor.

A Anthropic informou à Wiz que o cenário está fora do modelo de ameaça e que um aviso de symlink no Claude Code foi implementado no início de fevereiro de 2026, antes do reporte privado da Wiz, como endurecimento de rotina — não como correção direcionada. Essa posição levanta questão de governança relevante para todo o ecossistema: até onde a responsabilidade de proteger um desenvolvedor que confiou em pasta maliciosa recai sobre a ferramenta versus o usuário. Independentemente do debate, a defesa prática exige não depender exclusivamente da caixa de aprovação.

A Wiz recomenda aos fabricantes resolver symlinks antes de solicitar consentimento, exibir o destino real da gravação, sinalizar qualquer escrita fora da pasta do projeto e não persistir alterações em disco até aprovação efetiva do usuário. Para equipes de desenvolvimento, executar agentes com acesso limitado a arquivos, dentro de sandbox ou contêiner, reduz o raio de alcance. Revisar README e arquivos de configuração ocultos antes de autorizar configuração automática de workspace permanece controle básico de supply chain.

  • Aplicar atualizações dos fornecedores que já publicaram correção para o padrão GhostApproval
  • Executar agentes de codificação com IA em ambientes isolados com permissões mínimas de sistema de arquivos
  • Inspecionar symlinks e arquivos ocultos em repositórios antes de confiar o workspace ao agente
  • Auditar authorized_keys, arquivos de shell e credenciais locais após trabalho em repositórios não verificados
  • Tratar a caixa de aprovação como indicador insuficiente quando o produto não resolve e exibe o caminho real de destino

Postar um comentário

0 Comentários