A cadeia, tal como é descrita
A Adversa AI publicou a 6 de outubro um ataque em que um único URL controlado pelo atacante, pedido pelo próprio utilizador, leva o GitHub Copilot CLI a ler ficheiros locais e a enviar o conteúdo para o servidor do atacante. Os investigadores, liderados por Rony Utevsky, situam a cadeia completa em 28 segundos, “sem confirmação, e sem qualquer ponto da transcrição que nomeie o anfitrião de destino ou indique que conteúdo de ficheiros saiu da máquina”.
A página apresenta-se como conteúdo cifrado e oferece ao agente duas chaves candidatas de decifragem. Uma é real. A outra é um modelo que o agente não consegue preencher sem antes ler ficheiros locais — por isso, ao preparar a decifragem, lê os ficheiros visados do disco e integra o seu conteúdo na cadeia da chave. Essa leitura é o roubo, e acontece antes de qualquer decifragem ter êxito.
A chave com modelo falha de propósito. O agente recorre à chave verdadeira, a decifragem funciona, e a segunda fase decifrada manda-o buscar um URL de seguimento “para obter mais contexto” que leva o conteúdo recolhido como parâmetro do pedido. O agente faz o pedido.

Porque é que a cifra é o essencial
A Adversa chama a isto injeção criptográfica de contexto, uma técnica que publicou pela primeira vez em agosto contra assistentes de conversa. O argumento é que as barreiras estáticas leem texto mas não o executam. O texto cifrado, entregue com material de chave e uma instrução para decifrar, obriga à recuperação dentro do próprio ambiente de execução do agente porque, ao contrário do base64, não há atalho que o modelo possa tomar nos seus pesos. As instruções decifradas chegam então como saída de código que o agente acabou de escrever e executar, dentro do seu contexto de execução de confiança.
Os investigadores são explícitos sobre o que faz isto funcionar: “As mesmas instruções entregues em texto simples são apanhadas como injeção de prompt e recusadas.”
Que modelo calha é cara ou coroa
O ataque não é universal. A Adversa diz que precisa de duas coisas: a CLI em modo piloto automático e um modelo permissivo a tratar da sessão. Nessa segunda condição, a descoberta é incómoda para o Copilot em concreto.
O próprio mai-code-1.1-flash da Microsoft executou a cadeia completa em 50% das corridas dos investigadores. Dois modelos GPT-5.6 oferecidos no mesmo produto recusaram sistematicamente a carga idêntica. Na conta paga testada, o modelo vulnerável não era o predefinido e tinha de ser escolhido à mão — mas numa conta deixada em encaminhamento automático, o router atribuiu o modelo vulnerável em algumas sessões e um seguro noutras, sem ação do utilizador. “O utilizador não escolhe, e não vê, que modelo tratou da sessão”, diz o relatório.

O GitHub validou e encerrou
A Adversa comunicou a descoberta ao programa de recompensas do GitHub a 17 de setembro. A 1 de outubro, a equipa de triagem tinha-a validado mas recusou tratá-la como vulnerabilidade, com o argumento de que o utilizador “pediu explicitamente ao Copilot CLI que fosse buscar conteúdo controlado por um atacante enquanto dava ao copilot permissões completas para agir autonomamente”. O GitHub disse que poderá tornar a funcionalidade mais estrita no futuro mas que nada tinha a anunciar, e declarou o relatório inelegível para a recompensa.
A Adversa diz discordar dessa avaliação de risco e que a cadeia continua a reproduzir-se como descrito. A empresa não divulga cargas concretas.
Quanto vale isto, e de quem vem
A Adversa vende uma plataforma de segurança para agentes de programação e diz que essa plataforma travou a cadeia nos seus próprios testes, pelo que as recomendações do fim do texto não são desinteressadas. As recomendações em si são convencionais: guardar por sessão um registo de cada chamada a ferramenta com os argumentos totalmente resolvidos em vez de modelos, alertar sobre a sequência — entra conteúdo não fiável, corre código, leem-se ficheiros, chama-se um anfitrião alheio à tarefa — em vez de uma carga isolada, exigir confirmação para novos destinos de rede e escritas fora do espaço de trabalho, e isolar o conteúdo obtido num contexto sem ferramentas nem credenciais.
Um pormenor merece ficar, independentemente de quem o publicou. Na corrida da Adversa, o resumo final do próprio agente dizia ter “confirmado um endpoint de leitor autorizado”. Não foi o que aconteceu. O relato que um agente faz da sua própria sessão não é prova do que a sessão fez.