alexi.sh
Todos os artigosSegurança do navegadorPrivacidade de redeFerramentas de privacidadeModelagem de ameaçasProgramação com IAFerramentas de dev

alexi.shLaboratório de Engenharia de IA

ai-coding

Uma pull request envenenada, dois agentes: o primeiro ataque à cadeia de fornecimento de agente contra agente

PrivSec Lab5 min de leitura
Um manequim de madeira articulado de pé sobre uma mesa branca, com os fios segurados por uma mão humana acima dele

Um investigador transformou um bot de baixo privilégio do repositório do Agent Development Kit da Google numa alavanca contra outro de privilégio elevado. A Google corrigiu e recusou o prémio. As duas posições sustentam-se, e é aí que a coisa fica interessante.

O investigador de segurança Dan Lisichkin, da Pillar Security, fez no repositório do Agent Development Kit da Google algo que não tinha sido demonstrado publicamente até agora: usou um agente de IA para atacar outro.

O cenário é banal, e é justamente isso que o torna interessante. O repositório google/adk-python, que os seus mantenedores anunciam com mais de 90 milhões de descargas, corre agentes sobre as suas próprias pull requests. Um deles é um revisor virado para o público, ao qual a contribuição de qualquer pessoa chega. Funciona com um token de acesso pessoal de colaborador, ou seja, modesto. Outro agente está mais para dentro, com privilégios de mantenedor.

O mecanismo

Uma pull request não é só código. Tem um título, um corpo, um diff e comentários, e tudo isso é texto que um agente lê. Lisichkin colocou uma injeção de prompt nesse texto. O revisor de baixo privilégio leu-o e, em vez de se limitar a rever, agiu de uma forma que acionou o agente de privilégio elevado.

Em rigor, nada estava avariado. Cada agente fez aquilo para que foi construído. O revisor leu entrada não fiável, porque é o seu trabalho. O segundo agente confiou num sinal vindo do interior do repositório, porque o interior é suposto ser seguro. O que ninguém tinha escrito é a fronteira entre os dois, e uma fronteira não escrita não é aplicada.

Grande plano de uma corrente de aço sobre fundo cinzento, onde dois troços estão unidos por um elo rápido aparafusado, mais claro do que os restantes elos

A Google corrigiu e recusou pagar

É a passagem em que vale a pena parar, porque os dois lados têm um argumento verdadeiro.

A Google resolveu o problema. A Google também recusou o prémio, dizendo que não recompensa relatórios de vulnerabilidade que exijam engenharia social para permitir um comprometimento da cadeia de fornecimento, e sublinhando que um mantenedor tem ainda assim de carregar em "fundir", já que as pull requests não são fundidas automaticamente após a revisão de um bot.

Não é uma fuga. É factualmente exato: a cadeia só se fecha se uma pessoa aceitar uma pull request maliciosa. Muitas escalas de gravidade desvalorizam, com razão, as descobertas que precisam da cooperação de um humano.

A resposta do investigador também está correta, e é sobre conceção mais do que sobre gravidade. A sua posição, nas suas próprias palavras, é que os agentes deveriam ter a sua própria identidade, que determina a que recursos lhes é permitido aceder e de que maneira lhes é permitido interagir com esses recursos. Um agente que pede emprestado o token de uma pessoa herda as permissões de uma pessoa, e nenhuma etapa de revisão compensa isso.

Não é preciso escolher um vencedor. A leitura honesta é que este exploit em concreto precisou de um erro humano, e que a arquitetura que ele expõe não precisará de nenhum para ser um problema da próxima vez.

Porque "ainda é preciso um humano para fundir" vai envelhecer mal

Exigir que um mantenedor funda é uma barreira real hoje. É uma barreira que toda a indústria está neste momento a trabalhar para remover.

O sentido da marcha no desenvolvimento agêntico vai para menos pontos de controlo humanos, não para mais. Cada regra de fusão automática, cada política do tipo "o bot aprovou, portanto entra", cada pipeline em que a saída de um agente alimenta outro agente sem ninguém pelo meio, retira exatamente o passo com que a Google conta. A mitigação é organizacional, e as mitigações organizacionais degradam-se.

O que fazer no seu próprio repositório

Nada disto exige a escala da Google. Se corre agentes nos seus repositórios:

  • Dê a cada agente a sua própria identidade. Partilhar um token de acesso pessoal entre uma pessoa e um bot, ou entre dois bots, significa deixar de poder restringir ou revogar seja o que for de forma independente, e deixar de poder dizer, por um registo de auditoria, quem fez o quê.
  • Restrinja o token à tarefa. Um revisor precisa de ler um diff e escrever um comentário. Não precisa de acesso de escrita aos ramos.
  • Trate tudo o que um agente lê do exterior como portador de instruções. O corpo de uma pull request escrito por um desconhecido merece a mesma desconfiança que um campo de formulário num site público. O nosso guia sobre segurança de agentes de IA cobre o padrão geral.
  • Não deixe que a saída de um agente seja o gatilho de confiança de outro. Se o agente B age pela palavra do agente A, então quem controla a entrada de A controla B.

Não confundir com os pacotes litellm

Um incidente distinto toca o mesmo ecossistema e mistura-se muitas vezes com este. Em março de 2026 foram publicadas no PyPI versões maliciosas do litellm, a 1.82.7 e a 1.82.8, através de credenciais de mantenedor comprometidas, numa janela de cerca de três horas. Quem instalasse google-adk com extensões durante essa janela levava-as consigo.

É um comprometimento de dependência clássico: credenciais roubadas, pacote envenenado, janela curta. Não tem nada a ver com agentes que falam uns com os outros. Ambos são incidentes de cadeia de fornecimento, mas as defesas diferem, e tratá-los como uma história única leva a corrigir um e julgar que se cobriu o outro.

O que retirar daqui

A descoberta é modesta no impacto imediato e grande naquilo que sinaliza. Um agente não é uma ferramenta que corre quando se carrega num botão. É um ator que lê, decide e age, e a partir do momento em que tem dois no mesmo repositório com privilégios diferentes, tem uma fronteira de confiança, quer a tenha desenhado quer não.

Dê identidades aos agentes antes de lhes dar permissões.

Fontes

  • Investigação da Pillar Security, noticiada pelo The Register, 3 de agosto de 2026.

Foto: Pixabay (source)

Também disponível em

FAQ

Qual foi a vulnerabilidade do Google ADK?
No repositório google/adk-python, uma pull request que transportava uma injeção de prompt conseguia levar um agente de revisão público e de baixo privilégio a acionar um segundo agente com privilégios de mantenedor. A falha não estava em nenhum dos agentes isoladamente, mas na fronteira de confiança entre os dois, que ninguém tinha definido.
Quem a encontrou?
Dan Lisichkin, da Pillar Security. O repositório é o Agent Development Kit da Google para Python, que o projeto anuncia com mais de 90 milhões de descargas.
A Google corrigiu?
Sim, a Google aplicou uma correção. Recusou porém o prémio, afirmando que não recompensa relatórios de vulnerabilidade que exijam engenharia social para permitir um comprometimento da cadeia de fornecimento, e lembrando que um mantenedor tem ainda assim de fundir a pull request maliciosa, uma vez que as pull requests não são fundidas automaticamente após a revisão de um bot.
É o mesmo que os pacotes litellm maliciosos?
Não, e os dois confundem-se com facilidade. Em março de 2026, atacantes publicaram no PyPI as versões maliciosas 1.82.7 e 1.82.8 do litellm com credenciais de mantenedor comprometidas, numa janela de cerca de três horas, o que atingiu quem instalasse google-adk com extensões. Aquilo foi um comprometimento de credenciais numa dependência. O problema de agente contra agente é uma falha de conceção na forma como dois agentes confiam um no outro.
O que se deve mudar na prática?
Dar a cada agente a sua própria identidade e credenciais restritas em vez de um token partilhado, e tratar todo o conteúdo que um agente lê de uma fonte não fiável, incluindo o corpo ou o diff de uma pull request, como uma entrada capaz de transportar instruções.