Ce qui se passe
La société de sécurité Apiiro a passé en revue plus de 100 000 copies publiques du fichier de réglages local
de Claude Code, .claude/settings.local.json. Plus de 1 100 contenaient de vrais secrets : 1 105 dépôts,
précisément. En élargissant la recherche, elle compte 2 539 secrets réels dans 1 994 dépôts publics — mots
de passe de bases de données, clés cloud, jetons d'API, accès SSH root — et 1 160 autres dans l'historique Git,
dans le settings.json que des équipes partagent exprès, et dans des transcriptions de conversations d'agent
laissées dans les dépôts.
Le mécanisme
Quand Claude Code veut lancer une commande qui touche une base ou une API, il demande la permission. L'une des
réponses proposées est « Oui, ne plus demander » (« Yes, and don't ask again »). La commande exécutée contient
les identifiants : en la validant ainsi, on les copie tels quels dans .claude/settings.local.json, à la racine
du projet. La fonction est documentée dans les pages de permissions de Claude Code ; personne n'a rien piraté.
Ce fichier est prévu pour rester sur votre machine : quand Claude Code le crée dans un dépôt Git, il l'ajoute à la liste d'exclusion globale de Git. Cette protection ne joue pas dans trois cas :
- le dossier devient un dépôt Git après coup ;
- le projet est cloné depuis une autre machine ;
- le fichier a déjà été commité.
La règle n'est alors pas dans le .gitignore du dépôt, et le fichier part avec le reste. Claude Code semble
même l'avoir poussé lui-même dans bien des cas : dans 539 des 1 105 dépôts, un commit où Claude figure
comme coauteur a modifié le fichier.
Où en est Anthropic
Samedi 7 novembre, Boris Cherny, responsable de Claude Code, a dit sur Hacker News que l'équipe cherche comment empêcher cela. Deux pistes sont en prototype : un mode automatique qui intercepte ces cas, et un scan de secrets intégré. Rien n'est livré à ce jour.
Comment s'y prendre
Dans chaque dépôt, regardez si le fichier est suivi ou l'a déjà été :
git ls-files | grep -E '\.claude/settings(\.local)?\.json$'
git log --all --oneline -- .claude/settings.local.json .claude/settings.json- Faites la même recherche sur toute votre organisation GitHub, pour
.claude/settings.local.jsonet.claude/settings.json. - Si vous y trouvez un identifiant, changez-le d'abord, nettoyez ensuite : réécrire l'historique ne rappelle pas un secret déjà public.
- Ajoutez
.claude/settings.local.jsonau.gitignoredu dépôt lui-même, sans compter sur la règle globale. - Avant de répondre « ne plus demander », regardez ce que la commande contient. Si un secret y figure en clair, passez-le par une variable d'environnement.
Source : heise Developer, en allemand, qui s'appuie sur le billet d'Apiiro et sur la documentation des permissions de Claude Code. Le fait se recoupe dans ces deux sources.