Claude Code salva password e chiavi in chiaro: 1.122 file esposti su GitHub
Apiiro rileva che il file .claude/settings.local.json di Claude Code, usato dopo "Yes, and don't ask again", conserva segreti in chiaro. Ne risultano esposti 2.539 in 1.994 repository.

- Claude Code salva in chiaro i comandi approvati con 'don't ask again', segreti inclusi
- 1.122 copie pubbliche del file su GitHub contengono segreti; 2.539 in totale in 1.994 repository
- Colpiti anche 63 organizzazioni; scanner come gitleaks e TruffleHog ne perdono molti
- Ruotare subito le credenziali, poi ripulire repository e cronologia git
Password e chiavi API digitate dagli sviluppatori nei comandi approvati in Claude Code, l’assistente di programmazione di Anthropic, sono finite in repository pubblici su GitHub. Lo sostiene la società di sicurezza Apiiro, che ha pubblicato la ricerca il giorno prima della notizia. I ricercatori non hanno verificato se i segreti siano ancora validi. Un’azienda avvisata nei giorni scorsi ha però confermato che la propria chiave era attiva.
Come il segreto finisce nel file
Per impostazione predefinita Claude Code chiede conferma prima di eseguire la maggior parte dei comandi shell. Se l’utente sceglie “Yes, and don’t ask again”, lo strumento salva una regola di autorizzazione nel file .claude/settings.local.json del progetto. Nelle sessioni successive i comandi corrispondenti partono senza richiesta.
La regola copia ciò che il prompt proponeva. A volte è un pattern, come npm test *. Altre volte è il comando esatto, e in quel caso password o token digitati vengono salvati in chiaro.
Claude Code prova a tenere il file fuori da git. Alla prima scrittura lo aggiunge agli exclude globali di git dell’utente. Questa protezione però vale solo per quel computer e non protegge un file già committato. Lo strumento non lo inserisce nel .gitignore del progetto, quindi la protezione non viaggia con il repository. In 539 dei 1.105 repository tracciati, un commit con Claude come co-autore ha modificato il file: secondo i ricercatori, spesso è Claude stesso a committarlo.
I numeri della ricerca
- 104.185 copie del file in 103.617 repository pubblici; circa l’1,1% (1.122 copie) contiene almeno un segreto, per un totale di 1.379 segreti distinti.
- Oltre un terzo dei segreti apre direttamente un database, tra cui 379 password di database.
- Presenti anche 43 accessi SSH a server pubblici, 42 token per GitHub, GitLab e npm, 23 chiavi AWS.
- 63 organizzazioni coinvolte, per lo più software house. Tra i casi più gravi, una chiave cloud con privilegi di amministratore di un produttore di database e la password del proprietario di un database di cartelle cliniche.
- Tutti i file con segreti erano ancora sul branch predefinito; in metà dei repository da almeno 217 giorni.
- Le versioni precedenti contengono altri 734 segreti in 509 repository; 211 fork di 74 repository replicano gli stessi segreti.
- Anche il file condiviso
.claude/settings.jsonne contiene: 298 copie su 76.011.
Considerando versioni storiche e log di chat degli agenti, il totale sale a 2.539 segreti in 1.994 repository. Dei 16 agenti di programmazione confrontati, Claude Code è l’unico confermato a salvare per impostazione predefinita il comando approvato completo in un file di progetto.
Gli scanner comuni non bastano. Senza la fase di verifica, gitleaks ha segnalato 564 dei 1.122 file e TruffleHog 643; 215 sono sfuggiti a entrambi. Le password dopo PGPASSWORD=, sshpass -p o mysql -p assomigliano a normali parole in una riga di comando.
Cosa fare
Per gli sviluppatori, Apiiro consiglia di:
- cercare nella propria organizzazione GitHub i file
.claude/settings.local.jsone.claude/settings.json, controllando anche la cronologia git; - ruotare prima di tutto ogni password, token e chiave presenti nei file, anche in passato, e solo dopo ripulire;
- smettere di tracciare il file con
git rm --cachede inserirlo nel.gitignoredel repository; - controllare il file in locale ed eliminare le regole che contengono segreti;
- usare variabili provenienti da un secrets manager, come
$DB_URL, e approvare pattern comeBash(npm run:*)invece di comandi singoli.
Per i team di sicurezza: trattare le cartelle degli agenti (.claude/, .cursor/, .gemini/, .specstory/) e i file di memoria come i file .env. Aggiungerle alle scansioni pre-commit e CI, cronologia git compresa, con regole che intercettino le password nei comandi. Inserire .claude/settings.local.json nei template .gitignore aziendali e verificare per prime le credenziali associate a server pubblici. Le copie fuori da GitHub contano comunque: il file può finire in pacchetti npm, immagini Docker, archivi zip o cartelle sincronizzate.
Segnalazioni rimaste senza risposta
Il comportamento era già stato segnalato. Un bug report del 11 agosto 2025 descriveva comandi con chiavi API e token salvati in chiaro. Un bot automatico lo ha chiuso come “not planned” il 3 gennaio, dopo 60 giorni senza attività. Anche le altre quattro segnalazioni citate dai ricercatori sono state chiuse dallo stesso bot, l’ultima ieri, e secondo Apiiro nessuna ha ricevuto risposta da Anthropic.
Il rischio resta concreto: in passato malware ha cercato segreti sulle macchine degli sviluppatori. A settembre 2025 il worm Shai-Hulud ha eseguito lo scanner TruffleHog sui computer infetti.
Indicatori di compromissione (IoC)
.claude/settings.local[.]json
.claude/settings[.]json
Fonte: The Hacker News · Foto: The Hacker News



