Cybersicurezza

Claude Code ha lasciato password in chiaro in 1.122 file pubblici su GitHub

Susan Hill
Aggiungici su Google

Prima di eseguire la maggior parte dei comandi di shell, Claude Code di Anthropic chiede il permesso; tra le risposte possibili c’è «Sì, e non chiedermelo più». Se la si seleziona per un comando che contiene una password, per esempio le credenziali di accesso a un database, Claude Code può salvare l’intero comando, password compresa, in un file di configurazione in testo semplice all’interno del progetto. I ricercatori di sicurezza hanno ora trovato migliaia di queste password e chiavi in repository di codice pubblici su GitHub, accessibili a chiunque.

Chi usa Claude Code deve cercare il file chiamato settings.local.json. Si trova nella cartella nascosta .claude, nella directory principale del repository, e segue il progetto ovunque venga spostato, a meno che non si intervenga. Il comportamento è identico in tutti i Paesi in cui lo strumento è disponibile. Bastano un minuto per cambiare abitudini, ma molto più tempo per rimediare a una password esposta: cancellare il file, infatti, non lo rimuove dalla cronologia di git né dalle copie fork create da altre persone.

La società di sicurezza informatica Apiiro ha esaminato GitHub pubblico e trovato 104.185 copie del file in 103.617 repository, secondo la ricerca riportata da The Hacker News. Circa l’1,1%, pari a 1.122 copie, contiene almeno un segreto, per un totale di 1.379 credenziali diverse. Più di un terzo permetterebbe di accedere direttamente a un database; tra queste figurano 379 password di database. Sono state trovate anche 43 credenziali SSH per server pubblici, 42 token per GitHub, GitLab e npm e 23 chiavi Amazon Web Services.

I proprietari non sono soltanto appassionati che lavorano ai propri progetti. Apiiro ha ricondotto i file a 63 organizzazioni, perlopiù aziende di software di varie dimensioni. Tra i casi più gravi figurano una chiave cloud con privilegi di amministratore appartenente a un fornitore di database e la password del proprietario di un database di cartelle cliniche. Le versioni precedenti del file nella cronologia di git contengono altri 734 segreti distribuiti in 509 repository, mentre 211 fork di 74 repository riportano gli stessi segreti degli originali. Se si aggiungono il file di configurazione condiviso che i team inseriscono deliberatamente nei commit e i log delle chat salvati dagli agenti, il totale sale a 2.539 segreti in 1.994 repository.

Claude Code cerca effettivamente di escludere il file dal controllo di versione. La documentazione di Anthropic sulle impostazioni spiega che, la prima volta che lo strumento crea il file, aggiunge una regola alle esclusioni globali di git dell’utente, così che git lo ignori su quel computer. La regola, però, non viene trasferita insieme al progetto sul computer di un collega, su un server di build o su una macchina appena configurata; inoltre, non serve a nulla se il file è già stato inserito in un commit. In 539 dei 1.105 repository esaminati dai ricercatori, un commit che indicava Claude come coautore aveva modificato il file: un indizio del fatto che spesso sia l’agente stesso a inserirlo nel commit. Tra i 16 agenti di programmazione di cui Apiiro ha confrontato la documentazione, Claude Code è l’unico per cui è stato confermato che, per impostazione predefinita, salva in un file del progetto l’intero comando approvato.

I consueti strumenti di protezione non rilevano una parte consistente del problema. Apiiro ha passato ogni copia al vaglio di due diffusi scanner open source per individuare segreti, gitleaks e TruffleHog: gitleaks ha segnalato 564 dei 1.122 file, TruffleHog ne ha rilevati 643 e 215 sono sfuggiti a entrambi. La maggior parte dei casi non individuati riguardava password digitate dopo PGPASSWORD=, sshpass -p o mysql -p, che a uno strumento in cerca di formati di chiavi noti sembrano parole comuni.

I risultati vanno letti tenendo presenti alcune riserve. Apiiro vende strumenti di sicurezza per lo sviluppo assistito dall’IA, quindi la ricerca è anche una presentazione commerciale dei suoi prodotti. L’azienda non ha verificato se le credenziali siano ancora valide, anche se una delle società avvisate ha confermato che la propria chiave era ancora attiva. Un valore è stato conteggiato come segreto quando corrispondeva a un formato di chiave noto oppure quando si trovava accanto all’indirizzo di un server pubblico e un revisore basato sull’IA lo giudicava tale: resta quindi un margine di falsi positivi. Apiiro precisa inoltre che il dato sui commit con Claude come coautore non dimostra che sia stato Claude a introdurre ogni credenziale esposta. E GitHub è solo la parte visibile del problema: il file è un normale JSON nella cartella del progetto, quindi può finire anche in un pacchetto npm, un’immagine Docker, un archivio zip o una cartella sincronizzata.

Il primo consiglio dei ricercatori è ruotare le credenziali: prima di ripulire qualsiasi cosa, bisogna cambiare tutte le password, i token e le chiavi che il file ha mai contenuto, perché un segreto finito in pubblico è da considerarsi compromesso anche se si riscrive la cronologia. Poi occorre smettere di tracciare il file con git rm –cached, aggiungerlo al .gitignore del repository e aprire /permissions in Claude Code per eliminare ogni regola salvata che contenga un segreto. Richiamare le credenziali tramite variabili d’ambiente fa sì che una regola salvata contenga un nome come $DB_URL al posto della password; approvare schemi invece di singoli comandi evita del tutto che gli argomenti in chiaro finiscano nel file.

Gli utenti avevano già segnalato il problema. Una segnalazione di bug presentata l’11 agosto 2025 riferiva che i comandi approvati contenenti chiavi API e token venivano salvati parola per parola in settings.local.json; il 3 gennaio, dopo 60 giorni senza attività, un bot automatico l’ha chiusa con la dicitura «non in programma». Apiiro, che ha pubblicato i risultati il 6 novembre, afferma che le quattro segnalazioni correlate citate nella ricerca sono state chiuse tutte dallo stesso bot, l’ultima il 6 novembre, senza che Anthropic rispondesse. Al 2 novembre, ogni file esposto individuato era ancora nel branch principale del rispettivo repository; in metà dei casi vi si trovava da almeno 217 giorni.

Né The Hacker News né Apiiro riportano una risposta di Anthropic, e il comportamento documentato non è cambiato: la prossima volta che si selezionerà «non chiedermelo più» per un comando con una password digitata al suo interno, verrà salvata anche quella password.

Tag: , , , , ,

Aggiungici su Google

Discussione

Ci sono 0 commenti.