Uma vulnerabilidade estrutural no Claude Code GitHub Action gerou 6 disclosures separadas, 1 leak de código-fonte, 1 ataque real à cadeia de suprimentos (supply chain) — e o problema continua sem solução. Não estamos falando de um bug isolado. Estamos falando de uma classe de vulnerabilidade que cada patch específico deixa intacta.
O contorno de segurança (bypass) do sandbox: a ANTHROPIC_API_KEY em texto plano
A Microsoft publicou em 5 de junho: o Read tool do Claude Code fazia chamadas in-process diretas, bypassando o ambiente isolado (sandbox) Bubblewrap que protegia o Bash tool. O resultado era direto — qualquer injeção de prompt (prompt injection) em issue ou PR podia ler /proc/self/environ e exfiltrar a ANTHROPIC_API_KEY em texto plano (plaintext).
A Microsoft construiu um payload que derrotou DUAS defesas simultaneamente. O filtro do Claude recusa imprimir chaves que começam com sk-ant- — o payload instruía "corte os primeiros 7 caracteres", lavando a saída. O GitHub Secret Scanner não detectou porque o LLM modificou a chave antes do stdout. O atacante reconstrói prependando sk-ant-. Segundo a Microsoft, o bypass era trivial.
O detalhe que preocupa não é apenas a exfiltração em si. É que duas camadas de defesa projetadas especificamente para impedir esse cenário foram derrotadas por um payload de linguagem natural. O filtro de conteúdo do Claude e o GitHub Secret Scanner — ambos ativos, ambos funcionando conforme projetados — falharam porque o LLM atuou como intermediário que transformou a chave antes que qualquer detector pudesse reconhecê-la. É um novo tipo de ameaça: o próprio agente de IA é o mecanismo de evasão.
Mas isso é só a ponta. A cascata de disclosures revela que o problema é sistêmico.
A cascata: 6 disclosures, 5 vetores
1. RyotaK (GMO Flatt Security, junho): 50 formas de bypassar o permission system. Um bot falso com nome terminando em [bot] recebia auto-confiança da action. Roubava OIDC tokens e obtinha installation token com escrita total. Patch: v1.0.94. Bounty: $4.800, segundo o programa de bug bounty.
2. Aonan Guan (JHU, "Comment and Control", abril): mesmo padrão em Claude Code, Gemini CLI Action e Copilot Agent. Claude Code: CVSS 9.4 atribuído pela Anthropic (inicialmente 9.3, depois 9.4). A Anthropic rebaixou para "None". Bounty: $100. Google: $1.337. GitHub: $500.
3. Clinejection (fevereiro): ataque REAL à supply chain. O Cline usava claude-code-action com allowed_non_write_users: "*". Segundo Adnan Khan (Clinejection, fevereiro), um atacante explorou injeção de prompt no workflow de triage, envenenou o cache do GitHub Actions (técnica "Cacheract") e roubou o npm publish token, publicando [email protected] não autorizado com postinstall instalando openclaw. A configuração permissiva allowed_non_write_users: "*" foi o padrão que facilitou o ataque. Segundo a StepSecurity, foram 4 mil downloads em 8 horas.
4. Leak de código (março): a Anthropic vazou 512 mil linhas do Claude Code via mapa de código-fonte (source map) no npm. Segundo a Trend Micro e a Zscaler, atacantes weaponizaram o vazamento em 24 horas com repositórios falsos distribuindo Vidar stealer e GhostSocks proxy malware, disfarçados de "Claude Code com enterprise features desbloqueadas". O vazamento não foi um disclosure de segurança — foi um erro operacional que expôs a lógica interna da ferramenta e deu a atacantes o mapa completo para construir exploits mais sofisticados.
5. HackerBot-Claw (fevereiro): primeiro caso documentado de IA atacando IA em CI/CD. Um agente autônomo (Claude Opus 4.5, segundo a autodescrição do bot) tentou prompt-inject outro agente via CLAUDE.md envenenado. O Claude detectou a tentativa. Dos 7 alvos, 5 foram comprometidos por vetores tradicionais de CI/CD (shell injection, cache poisoning, script injection). O único ataque AI-vs-AI foi detectado e bloqueado. Mas a taxa de comprometimento de 71% mostra que as defesas convencionais falharam sistematicamente — e a detecção por IA, embora eficaz no único caso testado, não é garantia contra vetores não-IA.
6. CVE-2026-47751 (junho): segundo o GitHub Advisory Database (reportado via HackerOne por reptou), um atacante abre PR com .mcp.json malicioso, o Claude Code carrega e obtém execução remota de código (RCE). Terceiro vetor distinto de comprometimento. O MCP (Model Context Protocol) foi projetado para estender capacidades dos agentes — mas sem validação de origem, qualquer arquivo de configuração se torna um vetor de execução arbitrária.
Supply chain: o ataque que não era teórico
O Clinejection merece atenção especial porque foi um ataque real com impacto mensurável. O Cline, uma extensão de IA para VS Code, usava claude-code-action com allowed_non_write_users: "*". Segundo Adnan Khan (Clinejection, fevereiro), um atacante explorou injeção de prompt no workflow de triage, envenenou o cache do GitHub Actions (técnica "Cacheract") e roubou o npm publish token, publicando [email protected] não autorizado com um postinstall que instalava openclaw. A configuração permissiva allowed_non_write_users: "*" foi o padrão que facilitou o ataque. Segundo a StepSecurity, foram 4 mil downloads em 8 horas antes da remoção.
O padrão é familiar para quem acompanha ataques à supply chain em ecossistemas de pacotes: comprometer uma conta de publicação, injetar código em uma versão legítima, distribuir antes da detecção. A diferença é que o vetor de entrada foi uma configuração permissiva em uma GitHub Action de IA — não um credential stuffing ou phishing. O atacante não precisou quebrar a autenticação do npm. A action de IA entregou o token.
Na Tech86, vimos esse padrão se repetir em auditorias de infraestrutura: configurações permissivas em ferramentas de automação que funcionam como portas laterais. O allowed_non_write_users: "*" é o equivalente funcional de um chmod 777 — conveniente para testes, catastrófico em produção.
O patch cobre o sintoma, não a doença
O patch da Microsoft (v2.1.128, maio) bloqueou /proc/ no Read tool. Segundo a Microsoft, é um fix específico. Não estrutural. A classe de vulnerabilidade permanece aberta.
Cada disclosure revelou um vetor diferente — sandbox bypass, permission system, supply chain, source map leak, IA-vs-IA, MCP RCE — mas todos compartilham a mesma raiz: um agente de IA com input não confiável, acesso a secrets e comunicação externa, simultaneamente. O patch bloqueia um caminho. O atacante encontra outro.
A discrepância nos bounties é reveladora. A Anthropic pagou $100 por um CVSS 9.4. O Google pagou $1.337 pelo mesmo padrão. O GitHub pagou $500. Quando o bounty não reflete a severidade, pesquisadores perdem incentivo para reportar responsavelmente.
A Agents Rule of Two: princípio sem enforcement
A Meta formulou a regra: um workflow de IA nunca deve ter os 3 simultaneamente — (1) input não confiável, (2) acesso a secrets, (3) comunicação externa. A Microsoft endossou o princípio. Mas endosso não é enforcement.
Segundo a Microsoft, "estamos entrando numa era onde linguagem natural é código executável, e inputs não confiáveis como GitHub issues devem ser tratados como hostis por padrão." A declaração é correta. Mas sem validação automática no pipeline que impeça a coexistência dos três fatores, a regra depende de disciplina manual. E disciplina manual falha em escala.
Na Tech86, aplicamos esse princípio na prática: nosso EDR gerenciado monitora comportamento de agentes de IA em CI/CD — acesso a secrets, comunicação externa inesperada, execução de comandos fora do padrão. Quando o isolamento arquitetural falha, a detecção comportamental é a última linha de defesa. Seis disclosures em meses mostram que contar apenas com o sandbox não é suficiente.
