Vale examinar um caso concreto em detalhe, porque ele mostra melhor que qualquer teoria por que os controles habituais não pegam esse tipo de ataque.
O caso
Um pesquisador da Invariant Labs mostrou que uma conta gratuita do GitHub e uma única issue maliciosa num repositório público bastavam para exfiltrar conteúdo de repositórios privados, dados pessoais e informação de salário de um desenvolvedor que usava um assistente com o servidor MCP do GitHub.
O que o desenvolvedor fez: pediu para revisar as issues abertas. Nada mais. O payload escondido na issue redirecionou o agente para acessar repositórios privados e publicar o conteúdo.
Privado não significa protegido quando um agente com acesso lê conteúdo externo não confiável.
Por que nenhum controle tradicional pega
- Autenticação estava correta. O agente usou credencial legítima do usuário legítimo.
- Autorização estava correta. O usuário realmente tinha acesso aos repositórios privados.
- Não houve malware. Nenhum binário, nenhum processo estranho, nada para EDR detectar.
- O tráfego era normal. Chamadas à API do GitHub a partir de uma máquina que sempre chama a API do GitHub.
- O prompt era inocente. Log de conversa não mostra nada suspeito.
Todo o stack de segurança tradicional está funcionando perfeitamente enquanto os dados saem.
Onde este caso quebra
Três controles, em ordem de eficácia:
- Separação de escopo. O agente que lê issues públicas não deveria carregar credencial com acesso a repositório privado. Uma identidade por finalidade resolve o caso inteiro.
- Contaminação de contexto. Depois de ler conteúdo público, negar escrita externa e leitura de recurso privado na mesma tarefa.
- Aprovação em publicação. Publicar é um dos quatro verbos irreversíveis; exibir o conteúdo literal antes de postar teria dado ao desenvolvedor a chance de ver o que estava saindo.
A generalização
Troque “issue de repositório” por qualquer entrada de terceiro que o seu agente leia: ticket de suporte, e-mail, comentário em documento, página web, nome de arquivo em bucket compartilhado. O padrão é idêntico e a lista de superfícies é bem maior do que a maioria dos times mapeou.