TL;DR: Um AGENTS.md malicioso sequestra um agente de codificação fazendo exatamente aquilo para o que o arquivo foi projetado: o agente o lê na inicialização e segue suas instruções. A Forever Security detectou um caso real na pasta ~/Downloads de um cliente em outubro de 2026. Para se proteger, nunca inicie um agente em uma pasta que você não controla, revise arquivos de instrução como se fossem código, bloqueie alterações de configuração e de rede, mantenha o sandbox e as solicitações de aprovação ativados e monitore alterações na própria configuração do agente.
O que é um ataque com AGENTS.md malicioso
Um AGENTS.md malicioso é um arquivo de instruções de projeto criado para induzir um agente de codificação a realizar ações prejudiciais. O Claude Code, o Codex e outros agentes carregam esses arquivos automaticamente a partir da pasta em que são iniciados. O ataque não depende de nenhum exploit: o agente lê o arquivo na inicialização e interpreta seu conteúdo como as regras do próprio projeto.
O arquivo se parece com notas normais de engenharia: uma etapa de “preflight” que instala um pacote, uma observação de “proxy” que altera o destino do tráfego da API. Para o agente, essa instrução tem o mesmo peso de algo como “use pnpm, e não npm”.
Se os seus desenvolvedores utilizam vários agentes de codificação, o Sharkly oferece um ambiente centralizado para atribuir e revisar esse trabalho; mais adiante veremos como isso muda o local onde os agentes são iniciados.
Por que o seu agente de codificação obedece ao arquivo
Os arquivos de instrução ficam no contexto do agente lado a lado com o seu prompt, sem uma barreira rígida entre as regras do projeto e a sua solicitação.
A documentação de memória do Claude Code afirma que o conteúdo de CLAUDE.md e AGENTS.md é tratado “como contexto, não como configuração imposta”. Ele carrega todo arquivo AGENTS.md no diretório de trabalho e nos diretórios superiores quando nenhum CLAUDE.md está presente. O guia do AGENTS.md do Codex faz a varredura a partir da raiz do projeto até o diretório atual e concatena o que encontra, com limite padrão de até 32 KiB. Os arquivos mais próximos de onde você iniciou o agente vêm por último e, portanto, têm precedência. Assim, a pasta onde você inicia o agente determina o que é carregado, e as pastas pai também entram na conta.
Como um AGENTS.md malicioso sequestra o Codex e o Claude Code
Em 22 de outubro de 2026, a Forever Security publicou o que descobriu no computador de um cliente. Um agente de codificação tentou instalar function-color, um pacote npm malicioso conhecido, e a instrução veio de um AGENTS.md localizado em ~/Downloads. Essa pasta era também o diretório de trabalho do agente. A Forever bloqueou a instalação antes que qualquer código fosse executado e não pôde determinar como o arquivo foi parar ali.

A razão pela qual a pasta Downloads é crítica: trata-se da única pasta na qual uma página web pode gravar sem exigir um clique do usuário. A Forever reproduziu a cadeia de ataque em laboratório:
- Uma página sob controle deles salva um arquivo chamado AGENTS.md em
~/Downloads. - O desenvolvedor abre o Codex nessa pasta e faz qualquer solicitação.
- Antes de iniciar a tarefa, o Codex adiciona um servidor de “project tools” em
~/.codex/config.tomle instala um pacote a partir do npm. - Como essa configuração se aplica a todo o computador, todas as sessões seguintes do Codex carregam o servidor do invasor, em qualquer pasta.
A Forever relata que o Codex executou o payload em mais de 90% das tentativas. A maioria das execuções utilizou um substituto inofensivo que abre uma calculadora; o pacote real foi executado uma única vez, dentro de uma máquina virtual isolada.
O Claude Code foi mais difícil de enganar. Um arquivo CLAUDE.md inserido fez com que ele direcionasse o tráfego da própria API para um servidor controlado pela Forever, o que vazou o token de login OAuth e permitiu que o servidor respondesse se passando pelo modelo. A Forever relata que isso funcionou em cerca de 50% dos casos. Como os dois números resultam de métodos de ataque diferentes, eles não devem ser comparados como uma taxa de sucesso única.
A conclusão da Forever: não há um bug a ser corrigido. O problema central é confiar em uma pasta na qual a web pode gravar como se ela tivesse sido preenchida por você. Essa mesma lição já havia surgido na pesquisa Rules File Backdoor da Pillar Security, que ocultava instruções em arquivos de regras utilizando caracteres Unicode invisíveis, indetectáveis por revisores em um diff.
Cinco passos para conter um AGENTS.md malicioso
Os dois primeiros passos impedem o carregamento do arquivo; os três últimos limitam os estragos caso algum passe despercebido.

1. Onde um agente de codificação nunca deve ser iniciado?
Nunca em ~/Downloads, na sua pasta de usuário (home) ou em qualquer pasta que você não tenha criado intencionalmente. A Forever afirma que cerca de metade dos seus clientes executava agentes de codificação dentro de Downloads. Se você precisa de um agente para organizar arquivos baixados, copie-os para uma nova pasta vazia e inicie o agente a partir de lá.
Uma verificação no shell ajuda a fazer cumprir a regra para quem costuma esquecer:
# ~/.zshrc: refuse to start an agent in folders the web can write to
agent_guard() {
case "$PWD" in
"$HOME"|"$HOME/Downloads"*|"/tmp"*)
echo "Refusing to start an agent in $PWD. Use a project folder." >&2
return 1 ;;
esac
}
claude() { agent_guard && command claude "$@"; }
codex() { agent_guard && command codex "$@"; }
2. Como revisar o AGENTS.md como se fosse código?
Trate qualquer arquivo de instrução como executável, inclusive em um repositório clonado há cinco minutos. Em seguida, automatize a revisão. Coloque os arquivos de instrução no CODEOWNERS para que qualquer pull request que os modifique exija um revisor designado:
AGENTS.md @your-org/platform
**/AGENTS.md @your-org/platform
CLAUDE.md @your-org/platform
/.claude/ @your-org/platform
/.cursor/rules/ @your-org/platform
Adicione uma validação no CI que falhe caso encontre os padrões usados nesses ataques: caracteres Unicode ocultos, alterações de URL base e comandos de instalação dentro de arquivos de instrução.
#!/usr/bin/env bash
# ci/check-agent-instructions.sh
files=$(git ls-files '*AGENTS.md' '*CLAUDE.md' '.cursor/rules/*')
[ -z "$files" ] && exit 0
fail=0
# zero-width, bidi override and Unicode tag characters
if grep -nP '[\x{200B}-\x{200F}\x{202A}-\x{202E}\x{2066}-\x{2069}\x{E0000}-\x{E007F}]' $files; then
echo "Hidden Unicode in an agent instruction file"; fail=1
fi
if grep -niE 'BASE_URL|chatgpt_base_url|mcp_servers|npx --yes|curl .*\| *(ba)?sh' $files; then
echo "Config, network or install instruction in an agent file: needs review"; fail=1
fi
exit $fail
O segundo grep pode apontar algumas linhas legítimas. De qualquer forma, elas justificam uma validação humana.
3. Negue ao agente permissão para reescrever sua própria configuração
Ambas as reproduções terminaram com o agente modificando suas próprias configurações. Remova essa permissão. No Claude Code, impeça alterações nas pastas de configuração do agente e torne segredos ilegíveis no .claude/settings.json do projeto:
{
"permissions": {
"deny": [
"Edit(./.claude/**)",
"Edit(~/.claude/**)",
"Edit(~/.codex/**)",
"Read(./.env)",
"Read(./.env.*)"
]
}
}
Em equipes, defina isso em configurações gerenciadas para que um arquivo no projeto não possa afrouxar as regras. A documentação de memória recomenda permissions.deny gerenciado, sandbox.enabled e env para regras que devem ser rigorosamente impostas, além de um PreToolUse hook para barrar ações independentemente da escolha do modelo. Fixar a rota da API nas variáveis de ambiente (env) gerenciadas é a resposta direta ao ataque de alteração da URL base. Confira a sintaxe das regras na versão instalada antes de colocá-las em produção.
4. Mantenha o sandbox e os avisos de aprovação ativados
A Forever recomenda manter as barreiras de aprovação e o sandbox sempre ativos, além de desconfiar de qualquer instrução que peça ao agente para ignorá-los.
Defina quais ações sempre exigirão autorização humana: instalação de pacotes, alterações nas configurações do agente e conexões de rede para novos hosts. Nosso artigo sobre barreiras de aprovação para agentes de codificação detalha onde aplicar essas pausas, e o texto sobre o que um agente de codificação deve e não deve ter permissão para fazer explica o modelo de permissões adequado.
5. Monitore a configuração do agente e faça a rotação em caso de alerta
A Forever especifica exatamente onde verificar: no ~/.codex/config.toml, procure por blocos [mcp_servers.*] desconhecidos ou um chatgpt_base_url modificado. No .claude/settings.json de um projeto, confira se surgiram ANTHROPIC_BASE_URL, proxies ou endpoints não definidos por você.
grep -nE '^\[mcp_servers\.|chatgpt_base_url' ~/.codex/config.toml
grep -rnE 'ANTHROPIC_BASE_URL|_PROXY|base_url' ~/.claude/settings.json .claude/settings*.json 2>/dev/null
npm ls -g --depth=0 2>/dev/null | grep -i function-color
Se algo incomum aparecer, presuma que o token foi exposto e faça sua rotação imediatamente. Um token OAuth comprometido garante uma sessão ativa, não apenas uma requisição pontual interceptada. Caso o pacote function-color seja encontrado, considere a máquina comprometida. Para um processo de remediação completo, nosso checklist para vazamento de segredos por agentes de codificação define os responsáveis por cada etapa da rotação.
O papel do Sharkly
O Sharkly não substitui a análise de arquivos de instrução nem as permissões do próprio agente; mantenha as cinco etapas. O que ele faz é mudar onde os agentes são iniciados e quem decide isso.
No Sharkly, um Agent é executado em um Computer conectado por você, e cada Agent conta com um Default working directory definido em suas configurações. Com a opção “Use temporary directory”, cada execução de Task recebe um diretório exclusivo e um novo git worktree do repositório configurado. Com a opção “Specified directory”, as execuções utilizam os caminhos locais pré-determinados por você. A documentação sobre diretório de trabalho explica em detalhes ambas as abordagens.

Isso transfere a escolha do diretório do terminal do desenvolvedor para uma configuração revisada. No modo Temporary, o Agent inicia a partir de um checkout limpo do repositório associado, em vez de usar qualquer pasta que estivesse aberta no momento. O gerenciamento de repositórios fica restrito a usuários com permissão de administrador no Space ou na Organization. As instruções do Agent, aplicadas a cada execução, também são ideais para reforçar regras como “nunca edite arquivos de configuração do agente”.
Os resultados são enviados de volta para a Task, onde a equipe os avalia, conforme descrito no guia sobre como revisar código gerado por IA com evidências no nível da tarefa.
Conclusão
Um AGENTS.md malicioso tem sucesso porque os agentes são projetados para seguir arquivos de instrução, e a navegação web permite plantar um arquivo em uma pasta que você considera segura. A mitigação é feita em camadas, não com uma correção rápida de software.
Comece hoje mesmo pelo passo 5 em todos os computadores de desenvolvimento para identificar se já existe algum problema ativo. Em seguida, se a sua equipe utiliza múltiplos agentes de codificação, configure o Sharkly com um Computer e um Agent no modo Temporary, garantindo que toda tarefa comece a partir de um worktree limpo.
Perguntas frequentes (FAQ)
Um AGENTS.md malicioso pode sequestrar o Claude Code?
Sim. O Claude Code lê o AGENTS.md se não houver um arquivo CLAUDE.md no diretório de trabalho ou acima dele. Nos testes da Forever com o Claude Code, foi utilizado um CLAUDE.md malicioso que redirecionou o tráfego da API e vazou o token OAuth em aproximadamente metade das tentativas.
Essa é uma vulnerabilidade que a OpenAI ou a Anthropic pretendem corrigir?
A avaliação da Forever é que não há bug a ser corrigido, visto que os agentes operam conforme o esperado. A proteção depende de boa higiene de diretórios, revisão e gerenciamento de permissões.
Como detectar instruções ocultas em um AGENTS.md?
Analise o arquivo em formato bruto (raw), sem renderização, e verifique a presença de caracteres de largura zero, marcadores de sobreposição de direção (bidi) e tags Unicode. O script de CI compartilhado acima bloqueia qualquer uma dessas tentativas.
O uso de sandbox impede a ação de um AGENTS.md malicioso?
Ele restringe os danos, mas não impede a leitura do arquivo. O sandbox associado a pedidos de aprovação pode bloquear a instalação ou a modificação de configuração solicitada. Combine isso com regras de negação explícitas nas pastas de configuração do agente.
O que fazer ao encontrar um AGENTS.md suspeito?
Não execute nenhum agente nessa pasta ou próximo a ela. Inspecione os arquivos de configuração do agente em busca de novos servidores MCP ou URLs base, procure por function-color e revogue/rotacione imediatamente os tokens do agente e quaisquer chaves que ele pudesse acessar.


