A decisão segura entrou na armadilha
Em 26 de agosto, o pesquisador de segurança Johann Rehberger publicou uma cadeia experimental contra Claude Code com Opus 5 operando em Auto Mode. A tarefa inicial parecia banal: resumir o conteúdo de um site.
O agente tentou acessar a página, recebeu uma resposta que dificultava o caminho normal e mudou de ferramenta. Usou o shell para baixar um arquivo ZIP, extraiu o conteúdo e encontrou registros codificados junto de um programa chamado decoder-darwin.
Claude recusou executar o binário desconhecido. Em seguida, tomou uma decisão que parecia mais segura: escreveu um pequeno decoder em Python usando bibliotecas conhecidas. Foi justamente essa substituição que o ambiente preparado pelo pesquisador esperava.
O decoder não continha código malicioso. O diretório onde ele foi executado continha.
Entre os arquivos extraídos havia um struct.py. Quando o decoder importou base64, a biblioteca precisou importar struct. Como o comando Python foi iniciado dentro do diretório controlado pelo atacante, o arquivo local foi encontrado antes do módulo esperado. O código inserido no import pôde criar um processo filho e buscar os estágios seguintes do teste.
O detalhe mais importante não é que o modelo deixou de reconhecer uma instrução hostil. Não havia uma frase simples dizendo “ignore suas regras”. O ataque organizou os arquivos, os erros e as alternativas para que o caminho perigoso parecesse a continuação lógica de uma tarefa legítima.
O ataque não pediu para ser obedecido
Prompt injection costuma ser descrito como um conflito entre duas instruções. O usuário pede uma coisa. Um site ou documento tenta convencer o agente a fazer outra.
Essa PoC é mais difícil de classificar porque o arquivo não precisava assumir autoridade sobre o modelo. O struct.py não precisava convencer Claude de que era confiável. Precisava apenas estar no lugar em que o mecanismo normal de imports do Python procuraria primeiro.
O agente continuou perseguindo o objetivo original. Baixou o material, rejeitou a opção mais evidentemente perigosa e construiu uma alternativa que conseguia decodificar os registros. O comportamento hostil apareceu como efeito transitivo do ambiente, não como intenção escrita no código gerado.
Isso muda a pergunta de segurança. Não basta saber se o comando parece compatível com o pedido. É preciso saber quais arquivos serão carregados, quais processos poderão nascer, que rede estará disponível e quais recursos permanecerão alcançáveis se o comando produzir um efeito que o classificador não previu.
Código limpo não torna o ambiente confiável
O decoder criado pelo agente podia estar correto e ainda executar código do atacante por causa do diretório atual e da resolução dinâmica de imports.
Código confiável em ambiente hostil continua sendo execução não confiável.O classificador viu o comando, não a cadeia
O Auto Mode substitui parte das confirmações humanas por um classificador que revisa chamadas de ferramentas antes da execução. A Anthropic diz que o sistema procura ações destrutivas, irreversíveis, incompatíveis com a intenção do usuário ou direcionadas para infraestrutura não reconhecida.
O comando observado no centro da PoC era um decoder curto em Python. Isoladamente, importar base64, zlib e json para transformar registros codificados parece coerente com a tarefa. O comportamento malicioso estava a vários saltos de distância: base64 precisava de struct; o diretório oferecia outro struct.py; o módulo local criava um subprocesso; o subprocesso acessava a rede.
Classificadores de intenção trabalham com representações do que uma ação parece fazer. Sistemas operacionais executam os efeitos concretos produzidos por arquivos, bibliotecas, variáveis, plugins, scripts de instalação e processos filhos.
Essa distância cria uma assimetria. O classificador precisa compreender todos os efeitos relevantes de uma execução. O atacante precisa encontrar apenas um efeito implícito que permaneça fora da avaliação.
A própria configuração do Auto Mode reconhece parte desse problema. A Anthropic permite criar bloqueios incondicionais, regras de ambiente e uma opção para enviar todos os comandos de shell ao classificador. A documentação também alerta que regras estreitas de permissão podem aprovar argumentos destrutivos sem que o classificador os veja.
Mais classificação pode reduzir falhas. Ainda não transforma a classificação numa fronteira de segurança.
Zero em um benchmark continua sendo zero naquela distribuição
A PoC ganhou atenção porque apareceu poucas semanas depois de a Anthropic divulgar uma avaliação independente de prompt injection. Segundo a empresa, a Trajectory Labs testou 72 cenários de injeção indireta dez vezes cada. Nenhuma das 720 tentativas funcionou contra Fable 5, Opus 5 ou Sonnet 5 usando Auto Mode.
O resultado é relevante. Os ataques foram mantidos fora do alcance da Anthropic, otimizados contra um modelo anterior e executados em versões públicas dos produtos. Mas o escopo também é importante. Os cenários usavam uma integração padronizada de navegador baseada em ferramentas MCP que envolviam ações como navegação. A própria publicação diz que o teste mede aquela configuração, não o conjunto completo de proteções de cada implantação.
Rehberger testou outra distribuição. Sua cadeia migrou do acesso web para shell, seguiu redirect, baixou ZIP, extraiu arquivos, gerou código, explorou a resolução de módulos do Python, criou processos e acessou a rede.
As duas observações podem ser verdadeiras ao mesmo tempo. O Auto Mode pode ter bloqueado todas as tentativas do conjunto avaliado e ainda permitir uma cadeia que não estava representada nele.
Há outro dado na própria publicação da Anthropic que ajuda a calibrar a leitura. Num red team sintético separado, voltado diretamente ao classificador, a empresa reportou queda da taxa de falhas de 12% para 7% depois de um ciclo de correções e reavaliação com casos reservados. A Anthropic adverte que esse número não deve ser tratado como taxa de falha no tráfego real.
Benchmarks orientam quando descrevem a distribuição que mediram. Eles confundem quando uma manchete transforma ausência de sucesso observado em ausência geral de caminhos de ataque.
0 de 720 não significa risco zero
Nenhum ataque venceu no conjunto da Trajectory Labs. A nova PoC combina ferramentas, runtime e efeitos que não estavam necessariamente cobertos por aqueles cenários.
Benchmark mede resistência ao que foi testado, não ausência universal de ataque.A amostra ainda é pequena
O artigo relata três variantes com cinco execuções cada. Os resultados foram 3 de 5, 3 de 5 e 4 de 5. Isso mostra repetição. Não sustenta uma estimativa confiável de que Claude Code possa ser comprometido em 60% ou 80% das condições reais.
Uma execução adicional altera o percentual em vinte pontos. O domínio foi parcialmente ocultado, o endpoint aceita apenas endereços autorizados e os artefatos ofensivos completos não foram publicados. Há vídeos e descrição técnica, mas não encontrei uma reprodução independente com ambiente, versão, payload e logs equivalentes.
Também dependemos do relato do pesquisador para a resposta da Anthropic. Segundo ele, o caso foi encerrado como informativo e o produto estaria funcionando como projetado: o Auto Mode seria uma camada de melhor esforço, não garantia de isolamento.
Essa posição é compatível com a documentação pública. A Anthropic afirma que o Auto Mode reduz riscos em relação à liberação completa de permissões, mas não os elimina. Para mudanças sensíveis, recomenda revisão humana. Para execução autônoma, oferece uma camada separada de sandbox com restrições de filesystem e rede.
O caso, portanto, não prova que “Opus 5 é inseguro” de maneira geral. Sustenta uma PoC plausível e tecnicamente consistente contra uma configuração específica, ainda sem a força de uma medição independente e reproduzida.
Auto Mode não é sandbox
Permissão e contenção respondem a perguntas diferentes.
O classificador pergunta se uma ação deveria ser autorizada. O sandbox define até onde a ação consegue chegar quando a decisão de autorização estiver errada.
Se uma tarefa de resumo consegue abrir shell, baixar arquivos arbitrários, executar um interpretador dentro do material baixado, criar processos destacados, acessar a internet novamente e alcançar credenciais do usuário, um falso negativo do classificador pode virar comprometimento do host.
Num ambiente contido, o mesmo erro produz outro resultado. O módulo hostil pode até ser carregado, mas encontra filesystem limitado, nenhuma credencial, rede bloqueada e processos presos a uma unidade descartável. Encerrar a tarefa destrói o conjunto inteiro, incluindo filhos destacados.
A documentação atual do Claude Code separa essas camadas. O sandbox restringe filesystem e rede usando mecanismos do sistema operacional. A orientação de implantação segura recomenda containers, gVisor ou máquinas virtuais conforme o risco, credenciais injetadas por proxy, redução de capacidades do sistema e isolamento do agente dentro da fronteira protegida.
O ponto não é que toda tarefa precise de uma microVM. É que a força da contenção precisa acompanhar a autoridade entregue. Resumir uma página não deveria receber o mesmo envelope de execução de uma tarefa autorizada a compilar e testar um projeto.
O classificador decide. O sandbox limita
Uma política probabilística pode reduzir comandos perigosos. Filesystem, rede, identidade e isolamento de processos precisam continuar protegidos quando a política errar.
A fronteira de segurança não pode depender da cooperação do agente.O que teria interrompido esta cadeia
O primeiro controle é reduzir a autoridade da tarefa. Um agente encarregado de resumir conteúdo poderia receber uma ferramenta de busca que devolve documentos, sem acesso genérico a curl, shell e execução de código.
Quando um arquivo precisa ser baixado, ele deve continuar marcado como conteúdo externo. A extração acontece numa área de quarentena, sem execução, sem mudança automática do diretório de trabalho e sem adicionar o material a caminhos de bibliotecas ou executáveis.
No caso específico do Python, a documentação confirma que comandos executados com -c colocam o diretório atual no início de sys.path. O modo -I remove o diretório do script e o diretório de pacotes do usuário e ignora variáveis PYTHON*. Isso teria interrompido o mecanismo particular de module shadowing descrito na PoC.
Mas python -I é uma correção estreita. Outro arquivo poderia explorar hooks, extensões, bibliotecas nativas ou um subprocesso permitido. Por isso, o interpretador ainda precisa rodar numa unidade descartável, sem acesso ao diretório pessoal, chaves SSH, tokens de nuvem ou sockets administrativos.
A rede deve estar bloqueada por padrão. Quando necessária, passa por um proxy que limita protocolos, destinos, redirects e tamanho, registra o hash do conteúdo e impede acesso a localhost, redes privadas e endpoints de metadados. Na PoC, bloquear o segundo download já impediria a progressão para o payload final.
Por fim, processos não podem sobreviver à unidade que os criou. O término da conversa ou do shell pai não é suficiente. O supervisor precisa conseguir congelar rede, preservar evidência e encerrar todo o namespace, container ou máquina virtual.
A contenção não pode pedir permissão ao mesmo classificador
Um dos resultados mais incômodos descritos por Rehberger ocorreu depois do possível comprometimento. Em algumas execuções, Claude percebeu o problema e tentou terminar o processo, mas o Auto Mode bloqueou o comando de limpeza por considerá-lo destrutivo.
Isso é plausível dentro de uma avaliação local. Iniciar um decoder parece compatível com a tarefa. Executar kill ou encerrar processos de forma ampla parece perigoso. O classificador vê a aparência da ação presente sem necessariamente reconstruir toda a causalidade que levou até ela.
Resposta a incidentes precisa pertencer a outra autoridade. Quando sensores indicam comportamento anômalo, um supervisor externo corta a rede, congela o ambiente, captura logs e encerra a unidade completa. Não pergunta ao mesmo modelo nem depende da mesma política que aprovou a execução original.
Segurança normal tenta evitar o erro. Contenção parte do princípio de que algum erro atravessará as camadas anteriores.
As referências ainda não formam um contrato de execução
Já existem referências úteis. O OWASP Agentic Top 10 organiza riscos como sequestro de objetivo, uso indevido de ferramentas, abuso de identidade, vulnerabilidades de supply chain e execução inesperada de código. O NIST SP 800-190 descreve controles para containers. A Anthropic documenta permissões, sandbox e implantação segura como camadas separadas.
Minha leitura editorial é que essas referências ainda não formam, juntas, um contrato único e amplamente adotado ligando intenção, proveniência e efeito. Isso é uma inferência a partir do material consultado, não prova de que nenhuma iniciativa semelhante exista.
Cada execução deveria declarar qual objetivo humano a originou, de onde vieram os artefatos, quais arquivos podem ser lidos e escritos, se a rede estará disponível, quais credenciais serão emitidas, quantos processos podem nascer e quais efeitos são esperados.
Depois, o sistema compara o que foi autorizado com o que aconteceu. Arquivo inesperado, domínio novo, processo destacado ou escrita fora do escopo não vira apenas uma linha no log. Vira transição automática para contenção.
Isso transforma “o comando parece seguro” numa afirmação mais concreta: este código, com estes inputs, dentro deste ambiente, pode produzir apenas estes efeitos observáveis.
O diretório era parte do comando
A parte brilhante da PoC não é esconder uma ordem hostil num texto. É antecipar a reação defensiva do agente e montar o ambiente para que a alternativa segura carregue o ataque.
Claude tomou uma decisão razoável ao rejeitar um binário desconhecido. O erro foi permitir que essa decisão acontecesse num espaço em que o atacante controlava a resolução dos módulos, a criação de processos e a rota de rede.
Esse é o limite de uma segurança baseada em intenção. Modelos e classificadores podem melhorar muito a escolha do próximo passo. Não conseguem, sozinhos, transformar todo efeito implícito de um sistema operacional em algo previsível.
Se uma regra depende de o agente perceber que um arquivo, import ou subprocesso é perigoso, ela não é um invariante. É uma expectativa probabilística.
O comando parecia seguro. O diretório também precisava ser.
