Senhas e chaves de API (interfaces de programação de aplicações) que desenvolvedores digitaram em comandos aprovados no Claude Code estão armazenadas em repositórios públicos do GitHub, onde qualquer pessoa pode lê-las.
Quando o usuário seleciona «Sim, e não perguntar de novo», o assistente de programação com IA (inteligência artificial) da Anthropic pode salvar o comando, palavra por palavra, incluindo o segredo, em um arquivo de configurações do projeto.
A empresa de segurança de software Apiiro afirmou ontem que 1.122 cópias públicas desse arquivo contêm pelo menos um segredo, embora não tenha testado se algum deles ainda funciona. Uma das empresas notificadas pelos pesquisadores no início desta semana confirmou que sua chave estava ativa.
O arquivo é .claude/settings.local.json. Remover o arquivo de um projeto não desfaz o vazamento, porque versões antigas permanecem no histórico do git e em bifurcações (forks) do repositório. A recomendação dos pesquisadores é trocar primeiro todas as senhas, tokens e chaves que o arquivo já tiver contido, e só depois fazer a limpeza.
Como um segredo chega ao arquivo
Por padrão, o Claude Code pede autorização antes de executar a maioria dos comandos de shell. Se o usuário escolher «Sim, e não perguntar de novo», ele salva uma regra de permissão em .claude/settings.local.json dentro do projeto, segundo a sua documentação de permissões. Comandos correspondentes passam a ser executados sem pedido de confirmação nas sessões seguintes.
A regra cobre apenas o que o aviso ofereceu. Às vezes é um padrão, como o comando npm (gerenciador de pacotes do JavaScript) test *, e às vezes um comando exato. Quando é o comando exato, qualquer senha ou token digitado nele também é salvo, em texto simples.
Em arquivos públicos, os pesquisadores encontraram comandos salvos com o segredo ainda dentro e reproduziram o comportamento com os modelos mais recentes, Opus 5.5 e Fable 5.1.
O Claude Code tenta manter o arquivo fora do git. Na primeira vez que grava o arquivo em um repositório git, ele o adiciona às exclusões globais do git do usuário, segundo sua documentação de configurações. Assim, o git daquele computador ignora o arquivo em todos os repositórios.
Essa proteção fica nas configurações do git de um usuário, em um computador. Ela não faz nada por um arquivo que já foi enviado ao repositório, afirmam os pesquisadores. O Claude Code nunca adiciona o arquivo ao .gitignore do próprio projeto, então a proteção não acompanha o projeto.
Em 539 dos 1.105 repositórios analisados pelos pesquisadores, um commit que listava o Claude como coautor alterou o arquivo. Para eles, isso indica que o Claude frequentemente envia o arquivo por conta própria.
O que a Apiiro encontrou
A busca da Apiiro no GitHub público encontrou 104.185 cópias do arquivo em 103.617 repositórios, segundo sua análise publicada. Cerca de 1,1% delas, ou 1.122 cópias, contêm pelo menos um segredo. Juntas, guardam 1.379 segredos diferentes.
Um valor foi considerado segredo quando correspondia a um formato conhecido de chave, ou quando uma senha ou token aparecia ao lado do endereço de um servidor público. Um revisor com IA também precisava confirmar. Os pesquisadores não dizem se alguém já usou esses segredos.
Mais de um terço dos segredos abre diretamente um banco de dados, incluindo 379 senhas de banco de dados. Outros incluem 43 logins SSH (protocolo de acesso remoto seguro) para servidores públicos, 42 tokens para GitHub, GitLab e npm, e 23 chaves AWS (da Amazon Web Services).
Entre os donos desses arquivos há 63 organizações, em sua maioria empresas de software de todos os portes. Os casos mais graves incluem a chave de nuvem com privilégios de administrador do próprio fornecedor de um banco de dados e a senha de proprietário de um banco de dados de prontuários médicos, dizem os pesquisadores.
Até segunda-feira, todo arquivo com segredo ainda estava na branch padrão do seu repositório, e em metade desses repositórios ele estava lá havia pelo menos 217 dias.
Versões antigas do arquivo contêm mais 734 segredos em 509 repositórios que não aparecem em nenhuma cópia atual, geralmente porque o arquivo foi excluído. As bifurcações espalharam os arquivos ainda mais: 211 forks de 74 repositórios trazem os mesmos segredos dos originais.
Segredos também estão em 298 de 76.011 cópias do arquivo compartilhado .claude/settings.json, que as equipes enviam de propósito, principalmente dentro de regras de permissão. Somando esses casos, as versões antigas e os registros salvos de conversas com agentes, o total chega a 2.539 segredos em 1.994 repositórios.
Entre os 16 agentes de programação cuja documentação os pesquisadores compararam, o Claude Code é o único confirmado a salvar por padrão o comando aprovado completo em um arquivo do projeto.
O que fazer
Para desenvolvedores, os pesquisadores recomendam estas etapas:
- Pesquise na organização do GitHub pelos arquivos .claude/settings.local.json e .claude/settings.json e verifique o histórico do git de cada repositório, mesmo onde os arquivos já foram removidos.
- Troque todas as senhas, tokens e chaves que os arquivos já tiveram antes de fazer a limpeza.
- Pare de rastrear o arquivo local com o comando git rm --cached .claude/settings.local.json e adicione-o ao .gitignore do próprio repositório.
- Abra o arquivo no seu computador, mesmo que ele nunca tenha sido enviado, e apague cada regra que contenha um segredo.
- Mantenha os segredos fora dos comandos. Refira-se a eles como variáveis de um gerenciador de segredos, como $DB_URL, para que a regra salva contenha o nome da variável e não o segredo.
- Aprove padrões, como Bash(npm run:*), em vez de comandos isolados.
Cópias que nunca chegam ao GitHub também importam, dizem os pesquisadores. O arquivo é um JSON (formato de texto estruturado para troca de dados) simples na pasta do projeto, e pode ficar também dentro de um pacote npm, de uma imagem Docker, de um arquivo zip ou de uma pasta sincronizada.
Programas maliciosos já procuraram segredos em computadores de desenvolvedores. Em setembro de 2025, o worm Shai-Hulud executou o scanner de segredos TruffleHog em computadores infectados, e a ferramenta marcou mais da metade dos arquivos como contendo segredos.
Scanners comuns de segredos deixam passar muitos desses arquivos. Os pesquisadores rodaram gitleaks e TruffleHog em todas as cópias, sem a etapa de verificação das ferramentas. Dos 1.122 arquivos com segredo, o gitleaks marcou 564 e o TruffleHog marcou 643, e 215 não foram marcados por nenhuma das duas.
A maioria dos casos não detectados são senhas digitadas dentro de comandos. Os scanners procuram formatos conhecidos de chave, e uma senha depois de PGPASSWORD=, sshpass -p ou mysql -p parece uma palavra comum em uma linha de comando comum.
Para equipes de segurança, os pesquisadores recomendam:
- Tratar pastas de agentes, como .claude/, .cursor/, .gemini/ e .specstory/, e arquivos de memória de agentes como se guardassem segredos, do mesmo modo que arquivos .env, tanto em laptops quanto em repositórios.
- Incluir essas pastas na varredura de segredos no pre-commit e na integração contínua (CI), inclusive no histórico do git, e garantir que o scanner detecte senhas dentro de comandos, e não apenas formatos conhecidos de chave.
- Adicionar .claude/settings.local.json aos modelos de .gitignore da organização.
- Verificar primeiro as credenciais associadas a um servidor público, porque são elas que dão acesso.
Relatos anteriores
Usuários do Claude Code já relataram esse comportamento antes. Um relatório de bug anterior, aberto em 11 de agosto de 2025, dizia que comandos aprovados com chaves de API e tokens estavam sendo armazenados palavra por palavra no arquivo settings.local.json.
Um robô automatizado fechou esse relatório como «não planejado» em 3 de janeiro, após 60 dias sem atividade.
Até hoje, os quatro relatos relacionados citados pelos pesquisadores foram todos fechados pelo mesmo robô, sendo o mais recente ontem. Nenhum deles recebeu resposta da Anthropic, dizem os pesquisadores.