Ilustração técnica abstrata sobre um fundo azul-marinho escuro: um plano de fronteira translúcido e alto fica próximo à borda esquerda, desenhado como um contorno fino e pálido com preenchimento fosco. Uma única linha branca entra pela esquerda, atravessa o plano e continua para a direita, onde termina em um pequeno bloco escuro que fica fora de uma fileira rasa de quatro módulos ciano brilhantes. Um fino traço branco tracejado se ramifica da linha logo antes do plano e termina em um pequeno retângulo pálido montado na face do plano, identificado apenas pela forma. Não aparecem textos, pessoas nem logotipos de organizações. O logotipo da OrcaRouter está composto no canto inferior direito.
AI Safety Incidents

GhostApproval: Seis assistentes de codificação com IA pediram permissão e indicaram o arquivo errado

Autor

Gideon Frost

Data de publicação

Modelos mais recentes · 20Ver todos os modelos →
Benchmarks: Artificial Analysis · atualizado diariamente
Voltar para todas as publicações

Em 8 de julho de 2026, a empresa de segurança Wiz publicou o GhostApproval, um achado de pesquisa no qual um link simbólico plantado em um repositório fez seis assistentes de programação com IA escreverem fora do seu workspace — em ~/.ssh/authorized_keys, que concede acesso SSH persistente sem senha, ou em ~/.zshrc, que é executado na próxima inicialização do shell — enquanto a caixa de diálogo de confirmação nomeava apenas o arquivo inofensivo que o link fingia ser. A Wiz testou Amazon Q Developer, Claude Code da Anthropic, Augment, Cursor, Google Antigravity e Windsurf, e relatou o padrão em todos os seis. Não foi relatada nenhuma exploração em ambiente real: o trabalho é uma demonstração de prova de conceito, e a entrada do arquivo não registra nenhum dano real. Três fornecedores lançaram correções, dois reconheceram o relatório e depois pararam de responder, e um contestou que o comportamento fosse sequer uma vulnerabilidade. O Orca AI Incident Archive contém o registro completo deste achado, ao lado das outras entradas arquivadas sob sua tag de tipo SANDBOX.

A primitiva em si é coisa antiga. O seguimento de links simbólicos, catalogado como CWE-61, é uma primitiva de ataque há décadas — a Wiz lista usos anteriores em condições de corrida, gerenciadores de pacotes e escapes de contêiner — e cada um deles dependia de uma ferramenta gravar em um caminho controlado pelo usuário sem resolvê-lo primeiro. O que tornou esta descoberta digna de um nome é a segunda camada: em vários produtos, o próprio raciocínio do assistente identificou o destino perigoso, e o prompt mostrado ao humano o ocultava. A Wiz registra isso como CWE-451, representação enganosa de informações críticas na interface do usuário. A fronteira de segurança estava presente. A informação de que uma pessoa precisava para exercê-la não estava.

Como o truque funciona e no que ele vai dar

O repositório malicioso da Wiz é deliberadamente entediante. Ele contém um symlink chamado project_settings.json que aponta para o arquivo de chaves autorizadas SSH do desenvolvedor, além de um README que instrui o agente a atualizar essa "config" durante a configuração do workspace. Quando o desenvolvedor pede ao assistente para seguir o README, o agente segue o link e grava a chave pública do atacante. Se a máquina executa um serviço SSH que o atacante consiga alcançar, a partir de então isso é login sem senha. Uma segunda variante aponta o mesmo chamariz para ~/.zshrc, de modo que o payload é executado na próxima vez que um terminal for aberto e nenhum acesso SSH é necessário.

A descrição de Wiz sobre a falha técnica é curta: o sandbox, onde ele existe, não valida o caminho canônico, de modo que uma escrita destinada ao interior do projeto acaba onde quer que o link aponte. A prova de conceito da empresa reproduziu isso em "6 dos principais assistentes de codificação com IA", nas palavras dela, e publicou capturas de tela para cada um. A população afetada é qualquer pessoa que abra, em uma dessas ferramentas, um repositório que não seja de sua autoria — o que, no fluxo de trabalho normal de um desenvolvedor, inclui projetos derivados (forks), dependências de terceiros e qualquer revisão de código do branch de um colaborador externo.

A caixa de diálogo que indicou o arquivo errado

A evidência mais clara veio do Claude Code. No teste da Wiz, o raciocínio do agente afirmou, na citação da empresa: “Percebo que project_settings.json é, na verdade, um arquivo de configuração do zsh.” O pedido de permissão que o usuário viu perguntava: “Fazer esta edição em project_settings.json?” O agente sabia para onde ia a gravação; a pessoa que a autorizava, não. A Wiz chama o consentimento resultante de “substancialmente vazio” e a verificação humana no processo de “mera formalidade”.

Três produtos tornaram a lacuna pior do que um rótulo ruim. O Windsurf gravou o arquivo em disco antes de os botões Aceitar e Rejeitar aparecerem, então o diálogo era uma oferta de desfazer, e não uma barreira de autorização — quando o usuário conseguia recusar, segundo a Wiz, a chave já estava instalada. O Amazon Q Developer apresentou a mesma sequência, oferecendo apenas um botão Desfazer depois da gravação. O Augment não perguntou absolutamente nada: a Wiz demonstrou uma leitura por link simbólico que revelou, na transcrição do chat, um arquivo-isca de credenciais da AWS de fora do projeto, e uma gravação por link simbólico para ~/.ssh/authorized_keys sem nenhum diálogo de qualquer tipo. No outro extremo, o Cursor e o Google Antigravity exibiram o caminho não resolvido e pediram um clique que autorizava o caminho resolvido.

O primeiro teste da Wiz foi realizado em 10 de fevereiro de 2026, e os relatórios foram enviados entre 12 de fevereiro e 5 de março. Sua linha do tempo de divulgação registra as confirmações: Anthropic em 15 de fevereiro, Augment em 24 de fevereiro, Google em 26 de fevereiro, Cursor em 2 de março, AWS em 6 de março e Cognition, proprietária da Windsurf, em 23 de junho. A divulgação pública ocorreu cerca de cinco meses após o primeiro relatório.

HTML card headed 'Five months from first test to public disclosure', with a kicker reading 'GhostApproval · Wiz Research · disclosure sequence'. A vertical timeline lists the dated steps: 10 February 2026, initial discovery; 12 and 14 February, Augment read and write reports; 14 February, report to Anthropic; 15 February, Anthropic closes the ticket as Informative; 24 February, Augment acknowledges; 26 February, Google acknowledges; 2 March, Cursor acknowledges; 2 and 5 March, reports to Cognition and AWS; 22 May, Google deploys its fix; 27 May, AWS ships language server 1.69.0; 23 June, AWS publishes CVE-2026-12958 and Cognition acknowledges; 8 July 2026, public disclosure. An amber box records that Augment and Windsurf acknowledged receipt and supplied no further updates. A footer cites Wiz's disclosure timeline. The OrcaRouter logo is composited in the bottom-right corner.

Seis fornecedores, três respostas

Wiz classifica as descobertas segundo sua própria escala de gravidade, de Alta na AWS a Crítica na Augment, Cursor, Google Antigravity e Windsurf. Três fornecedores trataram o relatório como uma vulnerabilidade e lançaram uma correção. O arquivo atribui à entrada gravidade alta e nota A em confiança, e os avisos principais concordam com a Wiz quanto ao mecanismo.

• Amazon Web Services.De severidade alta, rastreado como CVE-2026-12958 e corrigido no Language Servers for AWS 1.69.0. O próprio boletim da AWS 2026-047-AWS, publicado em 23 de junho de 2026, confirma "um problema de ausência de validação de symlink" antes da versão 1.69.0 e lista as versões mínimas dos plug-ins que trazem a correção: Amazon Q Developer for Visual Studio Code 2.20, for JetBrains 4.3, for Eclipse 2.7.4, e AWS Toolkit with Amazon Q for Visual Studio 1.94.0.0. Ele afirma que não há soluções alternativas, que o servidor de linguagem é atualizado automaticamente, a menos que uma configuração de rede o impeça, e agradece à Wiz pela divulgação coordenada. O registro do CNA atribui ao problema a pontuação 8,5 no CVSS 4.0 e 7,8 no CVSS 3.1.

• Cursor.Crítico, rastreado como CVE-2026-50549 e corrigido no Cursor 3.0. O registro foi publicado pelo GitHub como CNA em 25 de junho de 2026 com pontuação 9,3 no CVSS 4.0. Sua descrição enquadra o atacante de forma ligeiramente diferente da narrativa do repositório da Wiz: um agente malicioso cria um symlink dentro do workspace e força a falha da canonicalização do caminho, seja porque o alvo não existe, seja porque a permissão de leitura foi removida do caminho, após o que a escrita recorre ao caminho original sem aprovação e pode sobrescrever o auxiliar do sandbox para execução sem sandbox.

• Google. A Wiz classifica o Antigravity como Critical e registra a correção como versão 1.19.6, implantada em 22 de maio de 2026. A coluna de gravidade indica "Pending" e, conforme o relato da Wiz, o Google estava avaliando se emitiria um CVE; nenhum identificador CVE para o Antigravity aparece no registro público.

• Augment. Classificada como Crítica pela avaliação da Wiz, testada na versão 0.754.3, reconhecida em 24 de fevereiro de 2026 e sem correção no momento da publicação. A nota de pesquisa da Cloud Security Alliance sobre a descoberta registra o contra-argumento da Augment de que um agente opera com as credenciais do próprio usuário.

• Windsurf.Crítica de acordo com a classificação da Wiz, testada na build V1.9566, reconhecida pela Cognition em 23 de junho de 2026 e não corrigida no momento da publicação.

• Anthropic. Contestado. Sem CVE, e a versão testada do Claude Code, 2.1.42, aparece na tabela da Wiz com o status "Rejeitado".

HTML card headed 'One pattern, six products, six answers', with a kicker reading 'GhostApproval · vendor status at public disclosure, 8 July 2026'. A six-row table gives product, Wiz's severity rating, CVE identifier, fixed version and status: Amazon Q Developer, High, CVE-2026-12958, fixed in language server 1.69.0; Cursor, Critical, CVE-2026-50549, fixed in 3.0; Google Antigravity, Critical, no CVE published, fixed in 1.19.6 on 22 May 2026; Augment, Critical, no CVE, no fix, acknowledged 24 February 2026; Windsurf, Critical, no CVE, no fix, acknowledged 23 June 2026; Claude Code from Anthropic, Disputed, no CVE, rejected as outside the threat model. A note beneath reads that severity ratings for the products without a CVE are Wiz's own, not a CNA score, and that no exploitation in the wild was reported. A footer cites Wiz's vendor table, the AWS security bulletin and the two CVE records. The OrcaRouter logo is composited in the bottom-right corner.

A rejeição da Anthropic, e a correção que antecede o relatório

A resposta da Anthropic à Wiz foi um “não” ponderado. “Isso está fora do nosso modelo de ameaça atual”, escreveu a empresa, segundo a citação da Wiz. “Quando o usuário inicia o Claude Code pela primeira vez em um diretório, ele precisa confirmar que confia no diretório antes de iniciar a sessão. O cenário que você descreve envolve um usuário confirmando explicitamente um prompt de permissão dentro de um diretório que contém um symlink malicioso, o que está fora do modelo de ameaça do Claude Code.” O ticket foi fechado como “Informativo”.

Esse raciocínio tem uma forma coerente: o usuário confiou no diretório e depois aprovou a operação, então ambos os momentos de consentimento foram respeitados. A refutação de Wiz é que o consentimento informado precisa de informações precisas — aprovar project_settings.json enquanto a gravação vai parar em ~/.ssh/authorized_keys é formalmente uma decisão e, substancialmente, uma decisão vazia. Wiz não afirma ter resolvido qual posição está correta, e este artigo também não. A observação prática é que AWS, Google e Cursor adotaram a outra visão e aplicaram patches.

A Wiz também relatou que o Claude Code havia mudado por trás da disputa: as versões atuais, escreveu a empresa, resolvem symlinks e avisam antes de gravar em arquivos sensíveis, e observou que a Anthropic se recusou a dizer se isso estava relacionado ao relatório. Em 7 de julho de 2026, a Anthropic forneceu uma correção, citada pela Wiz: "O aviso de symlink na caixa de diálogo de permissão Editar/Gravar foi lançado na v2.1.32 (5 de fevereiro de 2026), nove dias antes de este relatório ser enviado a nós. Ele foi adicionado como parte do fortalecimento proativo de segurança com base em uma revisão interna. A recusa em comentar foi uma resposta automática do nosso sistema de triagem."

A cronologia das versões confere; o registo público do que mudou, não. O Claude Code 2.1.32 foi publicado no registo npm em 5 de fevereiro de 2026 às 17:03 UTC, ou seja, nove dias antes do relatório de 14 de fevereiro, exatamente como a Anthropic afirma. Mas a entrada pública do changelog dessa versão lista doze alterações, incluindo equipas de agentes, registo de memória e várias correções de interface, e nenhuma delas menciona symlinks ou diálogos de permissão. As primeiras linhas do changelog que descrevem este comportamento específico são muito posteriores: a versão 2.1.280, publicada no npm em 22 de setembro de 2026, regista "Corrigidas as escritas através de um caminho com symlink que eram avaliadas pela sua grafia dentro da árvore: o pedido de confirmação indica onde a escrita é efetuada", e a 2.1.287, de 1 de outubro de 2026, regista que uma escrita por shell através de um symlink incluído no repositório sobre um ficheiro sensível passa agora a indicar onde é efetuada e a aguardar por uma pessoa. A própria observação da Wiz de que a 2.1.173 e posteriores resolvem symlinks também surge depois do relatório, uma vez que a 2.1.173 foi lançada em 11 de junho de 2026.

O que está estabelecido e o que não está

• Estabelecido. O mecanismo: um symlink de isca em um repositório, um agente que o segue, uma escrita que cai fora do workspace e uma superfície de confirmação que nomeia o caminho errado. A Wiz reproduziu isso nos seis produtos e publicou capturas de tela. Existem dois registros de CVE publicados por suas CNAs, e o boletim da AWS confirma de forma independente a falha na versão inferior a 1.69.0 e a correção. A Anthropic não contesta que o comportamento ocorreu; contesta que se trate de uma vulnerabilidade.

• De fonte única. As classificações de severidade para Augment, Windsurf e Google Antigravity são julgamentos da Wiz, não pontuações da CNA, porque nenhuma CVE foi publicada para nenhum dos três. A alegação de que Windsurf e Amazon Q escrevem antes de o diálogo aparecer baseia-se nas capturas de tela e na narração da Wiz; nenhum fornecedor confirmou publicamente essa ordem.

• Em disputa. Se uma ferramenta deve ao seu usuário proteção contra um workspace enganoso, ou se a confiança no diretório mais um clique resolve a questão. A Anthropic diz que a segunda opção; a Wiz diz que o prompt que mostrou tornou o clique sem sentido. O arquivo não sinaliza o registro como disputado: os fatos são acordados e apenas a interpretação é contestada.

• Não estabelecido.Se a Augment e a Windsurf corrigiram a falha desde a publicação. Toda a cobertura analisada para este artigo, incluindo a nota da Cloud Security Alliance de 15 de julho de 2026, ainda descreve ambas como não corrigidas; não foi encontrado nenhum aviso público de correção de nenhum dos fornecedores.

A própria data traz uma pequena complicação. A postagem da Wiz e sua linha do tempo de divulgação indicam ambas 8 de julho de 2026, a Infosecurity Magazine descreve a prova de conceito como publicada em 7 de julho e sua própria reportagem em 9 de julho, e a entrada do arquivo está datada de 9 de julho de 2026 com precisão de dia. A descoberta, a reportagem e o arquivo não discordam quanto à semana; discordam quanto ao dia em até dois dias.

O trabalho anterior sobre uma das seis merece crédito separado. Evan Schuman, da CSO Online, escrevendo em 9 de julho de 2026, observou que a Cato Networks havia relatado uma versão da falha restrita ao Cursor antes do estudo mais amplo da Wiz. O relato da SecurityWeek sobre essa pesquisa, publicado em 3 de julho de 2026, dá-lhe o nome de DuneSlide, atribui CVE-2026-50548 e CVE-2026-50549 ao par, pontua ambos em 9,8 e data de 2 de abril o lançamento do Cursor 3.0 que corrigiu ambos — números que não coincidem com a linha do tempo da Wiz, que situa a publicação da correção do Cursor em 5 de junho, nem com o registro da CNA publicado em 25 de junho com pontuação 9,3. O 9,8 e o 9,3 são duas pontuações para a mesma falha; as datas de abril e junho podem estar descrevendo um lançamento e um aviso de segurança, em vez de discordarem sobre quando a correção foi lançada.

O que mudou depois

Concretamente: os usuários do Amazon Q Developer foram migrados para o language server 1.69.0, automaticamente na maioria das configurações; os usuários do Google Antigravity, para a 1.19.6, a partir de 22 de maio de 2026; os usuários do Cursor, para a 3.0; e os usuários do Claude Code, para uma versão que resolve links, com outras alterações de fidelidade de prompt chegando na 2.1.280 e na 2.1.287 durante setembro e outubro de 2026. Os usuários do Augment e do Windsurf, com base nas evidências disponíveis na data de publicação, receberam apenas uma data para ficar de olho, e nada mais.

As próprias recomendações da Wiz eram estreitas e técnicas: resolver links simbólicos antes de exibir um prompt, alertar explicitamente quando o caminho resolvido ficar fora do workspace e nunca gravar em disco antes de autorização explícita, de modo que o diálogo seja uma barreira, e não um botão de desfazer. A nota da Cloud Security Alliance acrescenta um enquadramento de governança — tratar assistentes de codificação como software privilegiado com acesso ao sistema de arquivos, e não como plugins de editor, e perguntar diretamente aos fornecedores se os caminhos são resolvidos antes que uma confirmação apareça. Katie Norton, da IDC, citada pela CSO Online, situou o risco residual onde a cadeia de suprimentos já atua: colaboradores externos, repositórios forkados e dependências de terceiros, “e não em código de autoria interna”.

O que permanece em aberto é a questão de design, não o bug. Seis produtos construídos de forma independente convergiram para a mesma sequência — mostrar o caminho solicitado, confiar no clique — e a divergência posterior foi sobre responsabilidade, não sobre mecanismo. O registro no arquivo traz um sinalizador de marco, que é o julgamento do arquivo de que o registro descreve uma categoria em vez do erro de um único fornecedor, e é difícil discordar dessa leitura: a mesma prova de conceito curta funcionou seis vezes.

Abstract technical illustration on a dark navy field: a pale translucent check mark, drawn as a thin outline, floats above a small white rectangle that represents an approval surface. Beneath the rectangle a white line drops vertically, passes through a faint horizontal plane, and emerges on the other side pointing at a second dark rectangle that is drawn only as an outline, unlit. A soft amber glow marks the point where the line crosses the plane. No text, people or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.