Voltar

2026/10/29

Arquivos AGENTS.md e CLAUDE.md maliciosos: como a pasta Downloads pode sequestrar agentes de programação com IA

Um arquivo de instruções plantado em Downloads tentou fazer um agente de IA instalar malware npm. O que aconteceu, o que a pesquisa mostrou e como se defender.

Principais conclusões

  • Um arquivo AGENTS.md plantado na pasta ~/Downloads de um usuário instruiu um agente de programação com IA a instalar um pacote npm sabidamente malicioso. A tentativa foi interrompida antes que qualquer código fosse executado.
  • Em testes de laboratório, o OpenAI Codex seguiu um arquivo de instruções malicioso em mais de 90% das tentativas. O Claude Code seguiu em cerca de metade das vezes.
  • Não se trata de um bug que uma correção resolva. Os agentes confiam nos arquivos de instruções da pasta em que são iniciados, e os navegadores podem gravar arquivos em Downloads.
  • As principais defesas são simples: nunca inicie um agente em Downloads, leia os arquivos de instruções que você não escreveu, verifique se as configurações do agente têm endpoints que você não definiu e mantenha as aprovações e os sandboxes ativados.

O que aconteceu

Em 22 de outubro de 2026, a empresa de segurança Forever Security publicou “Markdown Is the New Executable”, de Gal Weizman e Omer Samet. O artigo descreve um incidente real na máquina de um cliente da empresa. Um agente de programação com IA estava trabalhando na pasta ~/Downloads do usuário, e um arquivo AGENTS.md nessa pasta mandou que ele instalasse function-color, um pacote npm malicioso. A Forever interrompeu o agente antes que o pacote fosse instalado e antes que qualquer código malicioso fosse executado.

Ninguém sabe como o arquivo chegou à pasta Downloads. A Forever afirma que não conseguiu determinar isso, e a cobertura do BleepingComputer e do The Hacker News repete esse ponto. Em seguida, a Forever criou demonstrações em laboratório para mostrar como uma página web poderia plantar um arquivo assim e o que um agente faria com ele.

O pacote em si não é novo. A Checkmarx e a CloudSEK associam o function-color à campanha MALFEX no npm. O pacote é um invólucro simples que carrega o function-flag. O script de instalação desse pacote baixa e executa um payload adicional de um servidor remoto. A campanha tem como alvo o Windows, e a Checkmarx relata que seu operador está ativo desde agosto de 2023. Quando verificamos o registro npm em 29 de outubro de 2026, function-color, function-flag e cdn-img-fetch já tinham sido substituídos pelo marcador 0.0.1-security do npm.

Por que um arquivo Markdown pode direcionar um agente

O argumento da Forever se apoia em dois comportamentos comuns que, juntos, se tornam perigosos.

  1. Os agentes carregam arquivos de instruções automaticamente. Os agentes de programação leem os arquivos de instruções do projeto ao iniciar e os tratam como orientações do usuário. O Codex lê o AGENTS.md desde a raiz do projeto até a pasta atual. Se não houver raiz de projeto, ele lê apenas a pasta atual. O Claude Code carrega o CLAUDE.md da pasta em que é iniciado e de todas as pastas acima dela. Ele lê o AGENTS.md quando não existe um CLAUDE.md.
  2. A web pode gravar em Downloads. O BleepingComputer informa que Chrome, Edge e Firefox salvam arquivos em Downloads por padrão, sem perguntar onde colocá-los. Uma página pode escolher o nome e o conteúdo do arquivo. Um arquivo Markdown não é um programa, então as verificações do sistema operacional para executáveis baixados não o tratam como perigoso.

Juntos, esses comportamentos permitem que uma página web deixe um arquivo que um agente lerá depois como instruções. O agente não precisa ser “enganado” no sentido habitual: ele está fazendo exatamente aquilo para que foi criado. A Forever também observa que alguns agentes navegam na web por conta própria. Nesse caso, talvez nenhuma pessoa veja o download acontecer.

A mesma lógica vale além de Downloads. Qualquer pasta que conteúdo não confiável possa alcançar é candidata: um repositório recém-clonado, um arquivo compactado extraído ou uma pasta compartilhada. Com o Claude Code, um projeto extraído em uma subpasta de Downloads também carrega um CLAUDE.md que esteja na própria pasta Downloads, porque os arquivos das pastas superiores também são carregados.

O que a pesquisa demonstrou

A Forever testou dois agentes. A maioria das execuções usou um payload inofensivo como substituto (abrir a calculadora). O pacote malicioso real foi executado uma única vez, dentro de uma máquina virtual isolada.

OpenAI Codex

Os pesquisadores reutilizaram o AGENTS.md real da máquina do cliente. O arquivo mandava o Codex adicionar uma entrada de servidor MCP à sua configuração global da máquina, ~/.codex/config.toml. Essa entrada executava, na inicialização, um comando que instalava o pacote npm. Como a configuração é global, a alteração persiste em todas as sessões posteriores do Codex na máquina, e não apenas na que leu o arquivo. A Forever relata que o ataque exigiu várias soluções de contorno: um estilo de documento longo e monótono, uma sessão filha iniciada com flags que ignoram o sandbox e um método de inicialização que evitava o tempo limite de inicialização do Codex. Mesmo assim, o Codex executou o payload em mais de 90% das tentativas.

Claude Code

Para o Claude Code, os pesquisadores escreveram seu próprio CLAUDE.md, apresentado como notas de configuração de um gateway de API interno. Ele pedia ao Claude que gravasse uma configuração ANTHROPIC_BASE_URL no arquivo .claude/settings.json do projeto, apontando o tráfego da API para um servidor controlado pelos pesquisadores. Segundo a Forever, isso vaza o token OAuth da sessão. Também permite que o servidor do atacante se passe pelo modelo e devolva chamadas de ferramentas, incluindo comandos de shell com o sandbox desativado. A Forever demonstrou o roubo do token (reutilizando-o para agir como a vítima) e a execução de código na inicialização seguinte. Também mostrou um caminho que disparava o ataque na mesma sessão, iniciando um subagente.

Isso funcionou com menos confiabilidade. O Claude Code pede aprovação antes de gravar em arquivos de configuração e muitas vezes recusou a alteração suspeita. A Forever relata sucesso em cerca de metade das vezes, e em cerca de uma a cada cinco tentativas no caminho do subagente na mesma sessão.

O que não foi demonstrado

  • A Forever não determinou como o arquivo real chegou à pasta Downloads do cliente. A rota do download pela web é uma possibilidade demonstrada, não uma causa confirmada.
  • Apenas o Codex e o Claude Code foram testados. A Forever argumenta que outros agentes que carregam arquivos de instruções estão expostos da mesma forma, mas não os testou.
  • Os artigos não citam versões específicas das ferramentas e não trazem declarações dos fornecedores. A posição da Forever é que “there is nothing here for OpenAI or Anthropic to patch” (não há nada aqui para a OpenAI ou a Anthropic corrigirem): os agentes estão funcionando como foram projetados.

Por que isso importa

Os arquivos de instruções passam despercebidos com facilidade porque parecem documentação. Na prática, eles funcionam como configuração e, por meio de um agente com acesso ao shell, podem funcionar como código. Três pontos tornam o risco concreto:

  • Agentes costumam ser iniciados em Downloads. As pessoas usam agentes para organizar arquivos ou trabalhar com algo que acabaram de baixar. A Forever disse ao BleepingComputer que centenas de seus clientes executam agentes de programação a partir de Downloads, com mais de 1.300 sessões do Claude Code iniciadas lá.
  • O impacto sobrevive à sessão. Uma configuração global alterada, um novo servidor MCP ou um endpoint de API redirecionado continuam funcionando depois que o arquivo original é apagado.
  • As credenciais são o prêmio. Um token de sessão de agente roubado é um login válido. Um atacante pode usá-lo sem executar nenhum código na máquina.

Defesas práticas

1. Escolha onde os agentes são iniciados

  • Nunca inicie um agente de programação em ~/Downloads nem em qualquer pasta em que navegadores, e-mail ou aplicativos de chat gravem arquivos. Mova ou clone o trabalho para uma pasta de trabalho dedicada antes.
  • Evite também iniciar agentes no seu diretório pessoal. Inicie-os na pasta específica do projeto. O BleepingComputer observa que a OpenAI e a Anthropic recomendam o mesmo.
  • Considere configurar o navegador para perguntar onde salvar cada download. Isso acrescenta um clique, mas impede downloads silenciosos.

2. Procure arquivos de instruções que você não escreveu

Pesquise os locais onde arquivos não confiáveis costumam parar, além da sua pasta pessoal. No Linux e no macOS:

find ~/Downloads ~/Desktop ~ -maxdepth 3 \( -name AGENTS.md -o -name AGENTS.override.md -o -name CLAUDE.md -o -name CLAUDE.local.md \) -print 2>/dev/null | sort -u

No Windows, no PowerShell:

Get-ChildItem $HOME\Downloads, $HOME\Desktop -Recurse -Depth 3 -Force -ErrorAction SilentlyContinue -Include AGENTS.md, AGENTS.override.md, CLAUDE.md, CLAUDE.local.md | Select-Object FullName, LastWriteTime

Leia todos os arquivos encontrados antes que um agente chegue perto deles. Desconfie muito de instruções para instalar pacotes, adicionar servidores, alterar endpoints de API ou desativar aprovações. Verifique também seus arquivos de instruções pessoais, ~/.codex/AGENTS.md e ~/.claude/CLAUDE.md, porque eles se aplicam a todas as sessões.

Um arquivo de instruções legítimo descreve como o projeto é compilado e testado. Ele não tem motivo para alterar a configuração global do seu agente, o endpoint de API ou as configurações de segurança. Trate como hostil qualquer arquivo que peça essas alterações.

3. Verifique se a configuração do agente tem alterações que você não fez

Seguindo a recomendação da Forever, procure blocos de servidor MCP inesperados, um chatgpt_base_url alterado ou um ANTHROPIC_BASE_URL ou outro endpoint de API que você não definiu:

grep -nE '^\[mcp_servers|base_url' ~/.codex/config.toml
grep -nE 'BASE_URL|mcpServers' ~/.claude/settings.json .claude/settings.json .claude/settings.local.json .mcp.json 2>/dev/null

Equipes que usam o Claude Code podem impor configurações de forma centralizada com configurações gerenciadas. Também podem usar hooks ConfigChange para auditar ou bloquear alterações de configuração durante uma sessão.

4. Mantenha as proteções ativadas

  • Deixe os pedidos de aprovação e o sandbox ativados. Evite flags que os ignoram, como --dangerously-bypass-approvals-and-sandbox do Codex ou --dangerously-skip-permissions do Claude Code, fora de um ambiente descartável.
  • Leia com atenção os pedidos de aprovação para arquivos de configuração. No teste com o Claude Code, foi a etapa de aprovação que deteve o ataque em cerca de metade das vezes.
  • Leia a caixa de diálogo de confiança do espaço de trabalho do Claude Code antes de aceitá-la para uma nova pasta.
  • Trabalhe com repositórios e downloads não confiáveis dentro de uma máquina virtual ou de um dev container, e não na sua estação de trabalho principal.
  • No npm, bloqueie os pacotes MALFEX conhecidos e considere usar ignore-scripts em instalações que você não revisou.

5. Se você encontrar um arquivo plantado

  1. Não inicie um agente nessa pasta. Guarde uma cópia do arquivo para investigação e depois remova-o da pasta.
  2. Verifique os arquivos de configuração do agente listados acima e remova tudo o que você não adicionou.
  3. Considere que o token de sessão do agente pode ter vazado. Saia e entre novamente na conta e troque todas as chaves de API que o agente poderia acessar.
  4. Procure function-color e function-flag nos lockfiles e nas pastas node_modules. Se algum deles tiver sido instalado, trate a máquina como comprometida e siga o seu processo de resposta a incidentes.

O panorama geral

O título da Forever é “Markdown Is the New Executable” (o Markdown é o novo executável). É uma forma útil de pensar sobre qualquer arquivo que um agente lê como instruções. Os arquivos de instruções decidem o que um agente com acesso ao shell fará em seguida, por isso merecem o mesmo cuidado que os scripts: saiba de onde vieram, revise as alterações feitas neles e mantenha-os longe de pastas em que qualquer pessoa na internet possa gravar. As correções aqui são principalmente hábitos, não patches, e custam pouco para adotar.

Referências