Ataque via AGENTS.md em Downloads: audite Codex e Claude Code

Inspecione os arquivos de instruções baixados antes de iniciar um agente de programação. Revise a configuração do usuário no Codex, a prioridade das configurações do Claude Code e os indícios de instalação de function-color. Distinga o incidente relatado dos testes de laboratório, revogue credenciais expostas e verifique um gateway legítimo sem tratar as configurações do usuário como uma barreira de segurança.

Conteúdo
Ataque via AGENTS.md em Downloads: audite Codex e Claude Code

Não inicie o Codex ou o Claude Code em ~/Downloads nem em outra pasta que acumule arquivos ainda não revisados. Para verificar a exposição ao ataque via AGENTS.md em Downloads, inspecione os arquivos de instruções e a configuração antes de reiniciar essas ferramentas. Se encontrar um endpoint não autorizado ou indícios de instalação de um pacote malicioso, interrompa as sessões afetadas e revogue as credenciais correspondentes.

Este procedimento cobre o uso local do Codex e do Claude Code, com configurações verificadas em 2026-10-28. Ao concluí-lo, você terá uma lista de arquivos para revisar, uma auditoria da configuração e critérios para decidir se precisa responder a um incidente.

O que o ataque em Downloads demonstrou

O ataque combina instruções não confiáveis com alterações na configuração do próprio agente. O Markdown não se executa sozinho; o agente fornece as ferramentas.

O relatório de 22 de outubro da Forever Security descreve uma tentativa de instalação bloqueada, provocada pelo arquivo ~/Downloads/AGENTS.md de um cliente. Ainda não se sabe como esse arquivo chegou à máquina.

  • Reprodução no Codex: as instruções registraram um servidor de ferramentas do Model Context Protocol (MCP) em ~/.codex/config.toml. O servidor usava launchctl e npm para instalar function-color. Um processo filho executou codex exec com --dangerously-bypass-approvals-and-sandbox.
  • Reprodução no Claude Code: o arquivo CLAUDE.md induziu uma alteração de ANTHROPIC_BASE_URL em .claude/settings.json. Os pesquisadores capturaram um token OAuth, que autentica a conta conectada, e devolveram chamadas falsas de Bash. Em alguns casos, um subagente abriu a conexão redirecionada durante a mesma sessão. Segundo o relatório, a gravação dessa configuração exigiu aprovação humana.

A taxa de sucesso relatada superou 90% no Codex. No Claude, chegou a cerca de 50% para a alteração de configuração e a cerca de um quinto para a execução na mesma sessão. A maioria dos testes usou uma calculadora como substituto; o pacote real foi executado uma vez em uma VM isolada. Esses números são resultados dos testes dos pesquisadores, não estimativas do seu risco individual.

O comportamento do navegador também depende da configuração. A documentação do Chrome descreve um destino de download configurável, a opção de perguntar onde salvar e notificações de download. Baixar um arquivo pelo navegador e comprometer um agente são eventos distintos.

Os controles atuais precisam ser considerados. O Codex 0.165.0 ignora instruções de projetos explicitamente marcados como não confiáveis. A OpenAI também documenta caminhos .codex protegidos pela política padrão workspace-write. Mantenha esses controles ativos: uma pasta já revisada pode receber conteúdo novo ainda não verificado.

Faça uma primeira verificação em cerca de cinco minutos

Inspecione os arquivos em um terminal comum e em um editor de texto, com os agentes parados. Cinco minutos é uma estimativa para um ambiente de trabalho conhecido. Investigar os resultados e recuperar uma máquina exige mais tempo.

1. Localize os arquivos de instruções antes de abrir um agente

Comece pelo diretório de trabalho real e pelo destino dos downloads. No Bash, em macOS ou Linux, use o comando abaixo se o ripgrep, rg, estiver instalado. Ele lista apenas os caminhos dos arquivos:

pwd -P
rg --files --hidden --no-ignore \
  -g 'AGENTS.md' -g 'AGENTS.override.md' \
  -g 'CLAUDE.md' -g 'CLAUDE.local.md' \
  -g '**/.claude/settings*.json' \
  -g '**/.codex/config.toml' -g '.mcp.json' \
  -g '!**/.git/**' -g '!**/node_modules/**' \
  "$HOME/Downloads"

Substitua o último caminho se o navegador salvar os downloads em outro local. Repita a busca no diretório de um projeto baixado ou clonado. Sem rg, procure esses nomes em um gerenciador de arquivos com a exibição de arquivos ocultos ativada.

O comando lista caminhos sem iniciar um agente nem mostrar valores da configuração. Resolva erros de diretório inexistente ou de permissão antes de interpretar um resultado vazio. Ele não examina arquivos compactados, não segue links simbólicos dentro da árvore de diretórios e não comprova que a máquina está limpa.

Abra os arquivos encontrados como texto simples. Procure instruções para reescrever configurações do agente, trocar provedores, instalar ferramentas inesperadas ou desativar aprovações. Revise separadamente os arquivos de instruções importados ou referenciados por links.

Inspecione também as instruções globais no diretório de configuração do Codex e em ~/.claude/CLAUDE.md. O Codex procura instruções de projeto desde a raiz detectada do projeto até o diretório de trabalho. Sem uma raiz de projeto, ele verifica apenas o diretório atual. Inclua AGENTS.override.md e quaisquer nomes de arquivo configurados como alternativas.

O Claude Code também carrega arquivos de instruções dos diretórios ancestrais. Portanto, entrar em uma subpasta de Downloads não garante que a origem das instruções deixe de ser carregada. Mantenha o ambiente revisado fora da árvore de downloads.

2. Audite as configurações do Codex que afetam vários projetos

Abra ~/.codex/config.toml antes de iniciar o Codex. Essa configuração pertence ao usuário, então uma alteração pode afetar outros projetos desse usuário. Se você definiu CODEX_HOME, inspecione o config.toml desse diretório.

Revise também o arquivo do perfil selecionado na inicialização e os arquivos de projeto .codex/config.toml aplicáveis à sessão. O guia de configuração da OpenAI explica quais camadas são carregadas. O guia avançado cobre diretórios de configuração e perfis.

ConfiguraçãoO que verificar
[mcp_servers.<name>]Identifique o servidor e revise por completo seu command, args, cwd, env ou sua url remota.
chatgpt_base_urlConfirme que qualquer substituição do endereço do serviço ChatGPT foi intencional.
openai_base_url, model_provider e model_providers.<id>.base_urlConfira se a rota da API corresponde ao provedor que você aprovou.
projects.<path>.trust_levelRevise as decisões de confiança salvas, principalmente para pastas abrangentes como Downloads.

O MCP conecta agentes a ferramentas. Uma configuração de servidor MCP local pode iniciar um processo. Verifique seus argumentos e seu destino, não apenas o nome exibido.

Um servidor desconhecido precisa ser investigado. Um nome genérico ou a presença de npm, npx ou launchctl, isoladamente, não comprova a existência de malware.

Em 2026-10-28, a referência de configuração do Codex informa que configurações locais do projeto não podem sobrescrever chatgpt_base_url nem as chaves de roteamento de provedores. Essa restrição não desfaz uma alteração não autorizada na configuração do usuário.

3. Audite as configurações do Claude Code e sua prioridade

Verifique todas as fontes de configuração que podem definir o endpoint. Para uma sessão iniciada na raiz de um projeto, revise estes arquivos:

ArquivoEscopo
~/.claude/settings.jsonSuas configurações para todos os projetos.
.claude/settings.jsonConfigurações compartilhadas deste projeto.
.claude/settings.local.jsonSuas configurações locais deste projeto.

Se você usa CLAUDE_CONFIG_DIR, procure o arquivo do usuário nesse diretório de configuração. Em um dispositivo corporativo, consulte o administrador sobre configurações gerenciadas.

Inspecione env.ANTHROPIC_BASE_URL, HTTP_PROXY e HTTPS_PROXY. Verifique quais variáveis de autenticação estão configuradas sem copiar seus valores secretos para chats ou logs. Revise também hooks inesperados e alterações nas regras de permissão.

A Anthropic documenta ANTHROPIC_BASE_URL como uma substituição do endpoint da API. Sua presença é normal quando você usa um gateway aprovado. Um nome de host desconhecido, uma mudança sem explicação ou um endpoint fornecido por instruções baixadas exige investigação.

A ordem de prioridade das configurações do Claude Code coloca as configurações locais do projeto acima das compartilhadas. Ambas têm prioridade sobre as configurações do usuário. Na maioria das sessões, um valor de env em um arquivo de configuração também substitui a mesma variável herdada do shell. Portanto, definir o endpoint na configuração do usuário ou exportá-lo no shell não impede que outra fonte o substitua.

Para investigar integrações MCP inesperadas, inspecione também .mcp.json. As orientações de segurança de MCP da Anthropic explicam que outros escopos e plugins podem adicionar servidores fora desse arquivo.

4. Procure indícios de instalação

Pesquise metadados de pacotes e logs se um agente foi executado em um diretório suspeito. Nesse diretório, o comando Bash abaixo mostra apenas os nomes dos arquivos com correspondências:

rg -l --hidden --no-ignore -F 'function-color' \
  -g 'package.json' -g '*lock*' \
  -g 'npm-shrinkwrap.json' -g '*.log' \
  -g '!**/.git/**' \
  .

Revise os resultados localmente. Inspecione também /tmp/ptools e os logs relevantes de instalação do npm, se existirem. Uma busca limitada ao projeto pode deixar de encontrar instalações em outros locais.

A análise do pacote feita pela Checkmarx identifica as versões 1.0.0 e 1.7.3 de function-color como wrappers maliciosos de function-flag. O componente de download examinado tem como alvo o Windows. Não conclua que uma carga maliciosa específica foi executada só porque uma configuração no macOS menciona o pacote.

Uma menção em um artigo é diferente de uma dependência instalada ou de um log de instalação. Um lockfile, sozinho, não comprova que um script de instalação foi executado. Indícios de instalação justificam tratar a máquina como potencialmente comprometida até concluir a investigação. Não instale nem importe o pacote para testá-lo. Uma busca sem resultados não descarta cargas maliciosas renomeadas nem evidências apagadas.

Tome as medidas necessárias antes de entrar na conta novamente

Revogue as credenciais expostas a partir de um dispositivo confiável antes de reutilizar a configuração afetada. Siga o caminho correspondente às evidências encontradas:

  • Instruções desconhecidas, sem indícios de que foram seguidas: preserve o arquivo para análise e mantenha-o fora dos locais em que o agente procura instruções. Inspecione a configuração antes de decidir se houve exposição de credenciais.
  • Endpoint não autorizado que pode ter recebido requisições autenticadas: considere que a credencial afetada pode ter sido exposta. Revogue-a e examine a atividade da conta.
  • Indícios de execução do código de um pacote malicioso: isole a máquina e envolva sua equipe de segurança. Preserve os arquivos e logs relevantes antes da limpeza. Remover apenas o arquivo Markdown não elimina o código instalado nem invalida credenciais roubadas.

Para a autenticação de uma assinatura Claude, use os controles de sessão da conta Claude. Em Settings → Account, revogue as sessões afetadas ou encerre todas as sessões da conta. Se os tokens do Claude Code aparecerem em Settings → Claude Code, remova a autorização afetada nessa seção. A Anthropic informa que o encerramento de todas as sessões inclui tokens do Claude Code e de setup-token.

As chaves de API exigem uma ação separada. As instruções da Anthropic para chaves comprometidas orientam excluir a chave afetada e criar outra. Sair da conta não revoga chaves de API.

Para o acesso à OpenAI, siga as instruções para contas comprometidas: encerre as sessões, exclua chaves de API expostas, revise a atividade e contate o suporte. Não presuma que excluir um arquivo local de credenciais invalida uma sessão remota roubada.

Restaure uma configuração revisada e remova integrações de inicialização não autorizadas antes de autenticar novamente nessa máquina. Se não conseguir determinar o que foi executado, mantenha-a fora do trabalho normal de desenvolvimento até concluir a investigação.

Mantenha o controle dos gateways legítimos

Escolha o endereço do gateway e confirme de onde vem essa configuração. Para uso pessoal, mantenha o endpoint aprovado na configuração do usuário ou em um ambiente de shell que você controla. Equipes com gerenciamento centralizado devem seguir seu processo aprovado de implantação.

Trate um endpoint fornecido pelo projeto como uma alteração de configuração que precisa de revisão. Ele pode fazer parte de uma configuração legítima da equipe. Porém, descrever-se como um gateway interno não é motivo suficiente para aprová-lo.

Por exemplo, as instruções do BetterToken para o Claude Code usam https://bettertoken.ai, sem /v1, e sua própria chave de API do BetterToken. Esse acesso à API é separado de uma assinatura Claude. Use a credencial emitida pelo gateway; não forneça um token OAuth da assinatura.

Para uma integração intencional com o Codex, compare o bloco do provedor com o guia de configuração de um provedor personalizado no Codex. Não reutilize chatgpt_base_url como uma configuração genérica da API de modelos.

Após revisar a configuração ou concluir a recuperação, uma verificação controlada de conectividade do Claude Code pode excluir configurações e personalizações do projeto. Execute o comando a partir de um diretório de projeto já revisado:

claude --safe-mode --setting-sources user --permission-mode default

A referência da CLI documenta essas opções. O modo seguro ignora personalizações como arquivos de instruções, plugins e servidores MCP. A autenticação e as permissões continuam ativas. A configuração do usuário e a política gerenciada ainda precisam ser confiáveis. O modo de permissão default tem o rótulo Manual.

Se o cliente rejeitar uma opção, consulte claude --help e as instruções oficiais de atualização antes de continuar.

Use /status para verificar as fontes de configuração carregadas. Depois, envie um prompt curto, como Reply with OK. Do not use tools. O resultado esperado é uma resposta no terminal. Quando houver registros do provedor, confira o horário da requisição para confirmar a rota dessa chamada. Essa consulta conta como uso normal do modelo.

Um modelo dizer o próprio nome não verifica o endpoint. Se a rota continuar incerta, siga as verificações do provedor ativo no Claude Code. Interrompa o procedimento se a configuração mudar de forma inesperada. Esse teste de conectividade não comprova que a máquina está limpa.

Separe os downloads do trabalho diário com agentes

Use um diretório de projeto revisado, fora do destino de downloads do navegador. Para trabalhar com um CSV baixado, verifique-o e copie apenas o arquivo necessário para esse ambiente. Mover uma pasta inteira sem revisão também move seus arquivos de instruções.

No Chrome, abra Settings → Downloads e ative Ask where to save each file before downloading, a opção de perguntar onde salvar cada arquivo. Isso acrescenta uma etapa de decisão, mas não substitui a inspeção dos arquivos já salvos.

Mantenha ativas as restrições da sandbox e os controles de aprovação. A documentação de segurança do Codex diferencia a sandbox dos comandos das conexões MCP e do tráfego de autenticação do cliente. Uma sandbox de comandos somente leitura não torna segura a inicialização de uma configuração ainda não revisada.

Repita a revisão após clonar um repositório, extrair um arquivo compactado ou alterar as configurações do agente. Se uma tarefa exigir a execução de código não confiável, use um ambiente isolado, sem suas credenciais habituais de desenvolvimento.

Quer otimizar seu fluxo de trabalho com LLMs?

Conecte modelos por uma única API, gerencie chaves e controle os gastos com IA.

Começar grátis