Tecnologia

Claude Code deixou palavras-passe expostas em 1122 ficheiros públicos no GitHub

Susan Hill
Adicione-nos no Google

O Claude Code, da Anthropic, pede autorização antes de executar a maioria dos comandos de shell, e uma das opções disponíveis é «Sim e não voltar a perguntar». Se a escolher para um comando que contém uma palavra-passe, como os dados de acesso a uma base de dados, o Claude Code pode escrever o comando completo — incluindo a palavra-passe — num ficheiro de definições em texto simples dentro do projeto. Investigadores de segurança encontraram agora milhares dessas palavras-passe e chaves em repositórios públicos de código no GitHub, onde qualquer pessoa as pode consultar.

Se utiliza o Claude Code, procure o ficheiro settings.local.json. Está numa pasta oculta chamada .claude, na raiz do repositório, e acompanha o projeto para onde quer que este vá, a menos que impeça isso. O comportamento é igual em todos os países onde a ferramenta está disponível. Mudar os seus hábitos demora um minuto; resolver o problema de uma palavra-passe exposta demora bastante mais, porque apagar o ficheiro não o remove do histórico do git nem das cópias do repositório feitas por outras pessoas.

A empresa de segurança de software Apiiro pesquisou o GitHub público e encontrou 104 185 cópias do ficheiro em 103 617 repositórios, segundo a investigação noticiada pelo The Hacker News. Cerca de 1,1%, ou 1 122 cópias, contêm pelo menos um segredo, num total de 1 379 credenciais diferentes. Mais de um terço permitiria aceder diretamente a uma base de dados, incluindo 379 palavras-passe de bases de dados. A lista inclui ainda 43 credenciais SSH para servidores públicos, 42 tokens para GitHub, GitLab e npm, e 23 chaves da Amazon Web Services.

Os responsáveis pelos repositórios não são apenas amadores. A Apiiro associou os ficheiros a 63 organizações, sobretudo empresas de software de várias dimensões, e entre os piores exemplos encontrou uma chave na cloud com privilégios de administrador pertencente a um fornecedor de bases de dados e a palavra-passe do proprietário de uma base de dados de registos médicos. As versões mais antigas do ficheiro no histórico do git contêm mais 734 segredos em 509 repositórios, e 211 cópias de 74 repositórios incluem os mesmos segredos que os originais. Se juntarmos o ficheiro de definições partilhado que as equipas incluem deliberadamente no repositório e os registos guardados das conversas com o agente, o total sobe para 2 539 segredos em 1 994 repositórios.

O Claude Code tenta, de facto, impedir que o ficheiro seja incluído no controlo de versões. A documentação de definições da Anthropic indica que, na primeira vez que a ferramenta escreve o ficheiro, acrescenta uma regra à lista global de exclusões do git do utilizador, fazendo com que o git o ignore naquele computador. Essa regra não acompanha o projeto até ao portátil de um colega, a um servidor de compilação ou a uma máquina nova, e não resolve nada se o ficheiro já tiver sido incluído num commit. Em 539 dos 1 105 repositórios analisados pelos investigadores, um commit que identificava o Claude como coautor alterou o ficheiro, o que sugere que, muitas vezes, é o próprio agente que o inclui. Entre os 16 agentes de programação cuja documentação a Apiiro comparou, o Claude Code é o único cuja documentação confirma que, por predefinição, guarda o comando completo aprovado num ficheiro do projeto.

As proteções habituais não detetam grande parte dos casos. A Apiiro executou dois populares detetores de segredos de código aberto, gitleaks e TruffleHog, em todas as cópias: o gitleaks assinalou 564 dos 1 122 ficheiros, o TruffleHog assinalou 643 e 215 passaram despercebidos a ambos. A maioria dos casos não detetados envolvia palavras-passe introduzidas depois de PGPASSWORD=, sshpass -p ou mysql -p, que parecem palavras comuns a uma ferramenta que procura formatos de chaves conhecidos.

As conclusões têm algumas ressalvas. A Apiiro vende ferramentas de segurança para o desenvolvimento assistido por IA, pelo que a investigação também funciona como argumento de venda. A empresa não testou se as credenciais ainda funcionavam, embora uma das organizações que notificou tenha confirmado que a sua chave continuava ativa. Um valor foi contabilizado como segredo quando correspondia a um formato de chave conhecido ou quando surgia junto de um endereço de servidor público e um avaliador de IA concordava, o que deixa alguma margem para falsos positivos. A Apiiro também salienta que o número de commits com o Claude como coautor não prova que o Claude tenha introduzido todas as credenciais expostas. E o GitHub é apenas a parte visível: como o ficheiro é um JSON simples na pasta do projeto, também pode acabar num pacote npm, numa imagem Docker, num arquivo zip ou numa pasta sincronizada.

A primeira recomendação dos investigadores é substituir as credenciais: altere todas as palavras-passe, tokens e chaves que alguma vez tenham estado no ficheiro antes de começar a limpar, porque um segredo que esteve público fica comprometido, quer reescreva ou não o histórico. Depois, deixe de controlar o ficheiro com git rm –cached, adicione-o ao próprio .gitignore do repositório e abra /permissions dentro do Claude Code para apagar qualquer regra guardada que contenha um segredo. Se recorrer a variáveis de ambiente para indicar credenciais, uma regra guardada fica com um nome como $DB_URL em vez da palavra-passe; e aprovar padrões, em vez de comandos isolados, impede por completo que argumentos literais sejam escritos no ficheiro.

Os utilizadores já tinham alertado para este problema. Uma denúncia de erro apresentada a 11 de agosto de 2025 dizia que comandos aprovados com chaves de API e tokens estavam a ser guardados palavra por palavra em settings.local.json; um bot automático encerrou-a como «não planeado» a 3 de janeiro, após 60 dias sem atividade. A Apiiro, que publicou as suas conclusões a 6 de novembro, afirma que as quatro denúncias relacionadas que cita foram todas encerradas pelo mesmo bot, a mais recente a 6 de novembro, sem resposta da Anthropic. A 2 de novembro, todos os ficheiros expostos que encontrou continuavam na branch principal dos respetivos repositórios — em metade dos casos, há pelo menos 217 dias.

Nem o The Hacker News nem a Apiiro dão conta de uma resposta da Anthropic, e o comportamento documentado mantém-se: da próxima vez que escolher «não voltar a perguntar» para um comando com uma palavra-passe escrita nele, essa palavra-passe também será guardada.

Etiquetas: , , , , ,

Adicione-nos no Google

Discussão

Existem 0 comentários.