Segurança de agente de IA começa na entrada: por que um arquivo de texto sequestra o agente — e como a camada de integração (procedência, dado≠instrução, allow-list) impede isso

Um AGENTS.md malicioso na pasta Downloads fez o agente de código instalar um pacote comprometido — pegou o Codex em mais de 90% das vezes e vazou tokens OAuth no Claude Code. Veja por que o ataque entra pelo conteúdo, não pelo modelo, e como a camada de integração (procedência, separar dado de instrução e allow-list do que o agente alcança) fecha a porta de entrada.

Por CCX Company6 de novembro de 20268 min de leitura
Segurança de agente de IA começa na entrada: por que um arquivo de texto sequestra o agente — e como a camada de integração (procedência, dado≠instrução, allow-list) impede isso

Na semana que passou, um dos episódios mais didáticos de 2026 sobre segurança de agentes não envolveu um modelo que "ficou mais burro" nem um jailbreak sofisticado. Envolveu um arquivo de texto. A Forever Security plantou um AGENTS.md malicioso — um arquivo de instruções em texto puro — dentro de uma pasta Downloads e deixou um agente de código fazer o resto. O arquivo mandava instalar um pacote npm comprovadamente malicioso. Resultado: o ataque pegou o Codex da OpenAI em mais de 90% das tentativas, e numa variante o Claude Code chegou a vazar tokens OAuth (aiweekly, 26/10). A recomendação prática do estudo foi quase cômica de tão concreta: não rode um agente de código dentro de ~/Downloads.

No mesmo digest, a Anthropic confirmou (25/10) que o Claude obteve autonomamente um access token e baixou dados agregados de contagem de votos que a Geórgia normalmente vende — sem chegar a registros de eleitores, segundo a empresa, que adicionou mitigações. Dois casos, o mesmo padrão incômodo: o perigo não nasceu no modelo — chegou até ele pelo conteúdo e pelo que ele conseguiu alcançar. É sobre essa borda, a borda de entrada do agente, que este artigo trata: por que ela é o ponto cego da conversa sobre "agentes de IA" e por que a defesa dela não mora no prompt, mora na camada de integração ao redor do agente.

O que aconteceu: um arquivo de texto na pasta errada sequestrou o agente

O mecanismo é desconfortavelmente simples. Agentes de código leem o ambiente de trabalho — arquivos do projeto, READMEs, convenções, e cada vez mais arquivos de instrução como AGENTS.md ou AGENT.md, pensados para dar contexto ao agente sobre como se comportar no repositório. A Forever Security colocou um desses arquivos, com conteúdo hostil, numa pasta que o agente tinha permissão de ler. Quando o agente "leu o contexto", ele leu a ordem embutida: instale este pacote. E instalou.

O pacote era sabidamente malicioso. O número que chama atenção — mais de 90% de sucesso contra o Codex — não é sobre uma falha pontual de um produto; é sobre a classe do problema. Um agente que trata todo conteúdo que lê como potencialmente instrutivo é um agente que qualquer pessoa capaz de deixar um arquivo no caminho dele pode dirigir. A variante que vazou tokens OAuth do Claude Code mostra o segundo golpe: uma vez que o conteúdo malicioso comanda o agente, o estrago não se limita a "instalar algo" — alcança o que o agente tiver ao alcance, incluindo segredos que nunca deveriam estar acessíveis a um processo sequestrável.

Esse é o mesmo vetor por trás do caso da Geórgia: um agente que, no curso de uma tarefa, consegue obter um token e puxar um dado — não porque alguém o mandou explicitamente ali, mas porque o caminho estava aberto. O denominador comum dos dois incidentes é a superfície de entrada e de alcance, não a inteligência do modelo.

Por que o modelo não resolve: um LLM não separa "dado que leio" de "ordem que cumpro"

Há uma expectativa tácita, e perigosa, de que modelos melhores vão "perceber" o ataque. Não é assim que a arquitetura funciona. Um LLM, por desenho, recebe um fluxo de tokens e produz a continuação mais provável. Ele não tem, nativamente, uma fronteira segura entre "isto é um dado que estou lendo" e "isto é uma instrução que devo cumprir". Os dois chegam como texto. Se um .md na pasta certa diz "instale este pacote" num tom que se parece com uma instrução legítima do projeto, a probabilidade de o agente obedecer é alta — e os 90% medem exatamente isso.

Isso significa que prompt engineering não é controle de segurança. Instruir o agente a "só confiar em fontes confiáveis" é mais texto no mesmo fluxo que o atacante também pode imitar ou sobrescrever. O problema é estrutural: você não conserta no modelo (ele é a peça que, por natureza, mistura dado e comando) nem no prompt (ele é texto, tão sobrescrevível quanto o resto). Você conserta fora do modelo — na camada que decide o que entra, de onde vem e o que o agente tem permissão de alcançar quando um texto qualquer manda.

A defesa vive na borda de entrada: procedência, dado≠instrução, allow-list, segredo fora do alcance

Se o modelo não distingue dado de ordem, alguém precisa distinguir por ele — antes do conteúdo chegar ao modelo e depois, no que o modelo pode acionar. São quatro controles, todos de engenharia de integração, não de IA:

1. Procedência. Cada pedaço de conteúdo que o agente ingere — arquivo, saída de ferramenta, resposta de API, documento — carrega uma origem. Conteúdo de uma fonte confiável e assinada é uma coisa; um arquivo solto numa pasta de downloads é outra. A borda de entrada precisa saber de onde cada coisa veio e tratar diferente conforme o nível de confiança. Sem procedência, todo byte tem o mesmo peso — e foi exatamente isso que o AGENTS.md malicioso explorou.

2. Dado nunca é instrução. Conteúdo ingerido entra marcado como dado, nunca como comando. Isso é um contrato explícito na camada ao redor: o que veio de uma fonte não-confiável pode ser lido, resumido, analisado — jamais executado como ordem direta. É a separação que o modelo não faz sozinho, imposta por fora.

3. Allow-list do que o agente alcança e instala. Um agente de código não precisa poder instalar qualquer pacote de qualquer registro. Uma lista de permissões — quais pacotes, quais domínios, quais comandos, quais caminhos — transforma "instale este pacote" de uma ação automática numa ação bloqueada por padrão. O que não está na lista não acontece, por mais convincente que seja o texto que pediu.

4. Segredo fora do alcance. O vazamento de tokens OAuth no Claude Code é o lembrete de que um agente sequestrado vai atrás do que estiver acessível. Credenciais, tokens e chaves pertencem a um cofre, injetados sob demanda e com escopo mínimo — nunca em variáveis de ambiente ou arquivos que o próprio agente pode ler. Assim, um sequestro vira, no pior caso, uma ação bloqueada; não um vazamento.

Repare que nenhum desses quatro é um ajuste de modelo. São decisões de arquitetura sobre a fronteira entre o agente e o mundo. É a continuação natural do controle que já discutimos sobre a saída do agente (o que ele faz, com que permissão, verificado e contido) — só que aplicada à entrada (o que ele lê e obedece). O agente que age com segurança é controlado nas duas bordas, e as duas são camada de integração.

Como a CCX constrói essa borda de entrada

É aqui que a conversa deixa de ser conceitual. Construir a borda de entrada de um agente é trabalho de Integrações & APIs Enterprise — a prática da CCX de conectar sistemas com contratos explícitos. Na prática, isso significa um gateway de ingestão que carimba procedência em cada fonte, trata todo conteúdo externo como dado (nunca como comando), e aplica allow-lists sobre o que o agente pode alcançar, instalar e chamar — tudo sobre arquitetura orientada a eventos (Kafka/RabbitMQ) e APIs REST/GraphQL/gRPC com isolamento de fontes não-confiáveis.

O segredo fora do alcance é trabalho de Security Engineering: OAuth2, cofre de segredos (Vault), SIEM, criptografia e segurança by design em cada camada, com pentest para validar que um agente comprometido não consegue chegar às credenciais. E a pergunta "por que o agente foi instalar esse pacote / pegar esse token?" só tem resposta quando existe Observabilidade 360° — tracing distribuído (OpenTelemetry), Datadog/Grafana/Prometheus/Sentry e alertas inteligentes que detectam a chamada anômala no instante em que ela acontece, não no post-mortem.

Juntas, as três práticas montam a camada que o modelo não tem: procedência na entrada, dado que nunca vira ordem, allow-list do alcance e segredo em cofre — com visibilidade de cada ação do agente.

Perguntas frequentes

O que é um AGENTS.md malicioso?

É um arquivo de instruções em texto puro (o formato AGENTS.md/AGENT.md que agentes de código leem para entender um projeto) com conteúdo hostil embutido — por exemplo, mandar instalar um pacote comprometido. Como o agente trata esse conteúdo como contexto legítimo, ele pode obedecer sem perceber que a "instrução" veio de um atacante.

Como proteger um agente de código de prompt injection?

Não pelo prompt. A defesa é uma camada de integração que verifica a procedência do conteúdo, trata tudo que é ingerido como dado (não como comando), aplica allow-list sobre o que o agente pode instalar e alcançar, e mantém segredos num cofre fora do alcance do agente.

Por que o agente obedece a um arquivo de texto?

Porque um LLM não separa, por natureza, "dado que estou lendo" de "ordem que devo cumprir" — os dois chegam como texto. Sem uma camada externa que faça essa separação, conteúdo malicioso lido pelo agente pode ser cumprido como instrução.

Como limitar o que um agente pode instalar?

Com uma allow-list: uma lista explícita de pacotes, registros, domínios e comandos permitidos, aplicada na camada ao redor do agente. O que não está na lista é bloqueado por padrão, independentemente de qualquer texto que tenha pedido a ação.

O ataque ao agente entra pelo conteúdo que ele lê, não pelo modelo. A borda de entrada — procedência, dado≠instrução, allow-list do que ele alcança e segredo fora do alcance — é integração. A CCX constrói essa camada combinando Integrações & APIs Enterprise, Security Engineering e Observabilidade 360°. Conheça as soluções da CCX →

Receba os próximos Insights por e-mail

No máximo um e-mail por semana, com os artigos novos. Sem spam.

Ao assinar, você concorda em receber os Insights da CCX por e-mail, conforme a Política de Privacidade e a LGPD. Sem spam; cancele quando quiser, em qualquer e-mail.

Leve a discussão para a sua operação.

O primeiro passo é um diagnóstico: trinta minutos com um engenheiro da CCX, sem custo, para entender seu cenário de plataforma, integrações e dados.