Aller au contenu
KLYNLABS

Claude Code : 1 122 fichiers publics sur GitHub contiennent un secret

Kelvyn4 min de lecture

Le 5 novembre 2026, Apiiro a publié que 1 122 copies publiques de .claude/settings.local.json contiennent un secret. La collecte, en lecture seule sur GitHub du 1er au 3 novembre, porte sur 104 185 copies dans 103 617 dépôts, soit 1,1 %. Avec l’historique et d’autres fichiers d’agents, le total est de 2 539 secrets distincts dans 1 994 dépôts. Aucun identifiant n’a été essayé. Une organisation, prévenue les 2 et 3 novembre, a confirmé que sa clé était encore valide.

La commande approuvée reste en clair

Claude Code, l’assistant d’Anthropic, demande une approbation avant la plupart des commandes du shell. « Yes, and don’t ask again » enregistre la règle dans .claude/settings.local.json, à la racine du dépôt. Si elle reprend la commande exacte, et non un motif comme npm test *, le secret reste en clair. La documentation le décrit pour Bash et certains domaines WebFetch.

Apiiro l’a reproduit avec Opus 5.5 et Fable 5.1 : c’est Claude Code, pas le modèle. À la première écriture, l’outil ajoute le fichier aux exclusions git globales du poste (core.excludesfile). Cette règle ne suit pas le projet, ni un clone. Le .gitignore du dépôt ne change pas. Sur 1 105 dépôts à secret, 539 ont un commit co-signé par Claude qui touche le fichier. Le tutoriel KLYNLABS sur les permissions détaille ces règles, sans ce décompte.

1 379 secrets encore en place

Ces 1 122 copies tiennent 1 379 secrets distincts : 636 clés au format d’un fournisseur, et 743 mots de passe ou jetons à côté d’un hôte public. Plus du tiers ouvrent une base : 379 mots de passe et 122 clés de rôle service Supabase, plus 103 jetons de compte Supabase, 43 accès SSH, 42 jetons GitHub, GitLab ou npm, 23 clés AWS et 6 clés privées.

N’est compté qu’un format connu, ou un secret sur la ligne d’un hôte public, hors exemples et clés publiques par conception. Un relecteur automatique a gardé 2 539 des 2 774 valeurs restantes. « Real secret » désigne cette forme, pas une clé prouvée encore valide.

Au 2 novembre 2026, chaque fichier à secret était sur la branche par défaut. Le premier commit médian datait de 217 jours, et de plus d’un an dans 118 dépôts. 211 forks de 74 dépôts recopient les mêmes secrets. D’anciennes versions en gardent 734 de plus, dans 509 dépôts.

63 organisations, et d’autres fichiers

Le settings.json partagé compte 76 011 copies publiques, dont 298 avec un secret. Des transcriptions d’agents en ont dans 87 dépôts. Les fichiers mémoire, dans 9. Les notes de déploiement, dans 33 fichiers. 126 Spaces Hugging Face ont le fichier local, et 2 copies publiques sur GitLab.com ont un secret.

Soixante-trois organisations sont concernées, sans nom publié. Les cas épinglés vont d’une clé cloud d’administration à un mot de passe Azure Postgres de production, un jeton Square, une clé au format OpenAI, un jeton npm, le mot de passe d’une base de dossiers médicaux, et celui du rôle postgres d’une start-up de paiement.

One company confirmed its key had been live.

Apiiro, section Disclosure, 5 novembre 2026.

Les scanners ratent le mot de passe

Sans tester si le secret répond, gitleaks marque 564 des 1 122 fichiers et TruffleHog 643. 215 échappent aux deux, surtout après PGPASSWORD=, sshpass -p ou mysql -p. Au-delà de 8 Ko, environ un fichier sur dix est touché, contre moins d’un sur 500 sous 500 octets. Sur 16 agents, Claude Code est le seul qui écrit par défaut toute la commande approuvée dans un fichier du projet.

Le ticket GitHub 5544, ouvert le 11 août 2025, décrivait déjà le problème. github-actions l’a fermé le 3 janvier 2026, motif « not planned ». Les tickets 11982, 13106 et 91270 sont fermés aussi, le dernier le 5 novembre 2026. Apiiro écrit qu’aucun n’a reçu de réponse d’Anthropic.

Remplacer les secrets avant de nettoyer

  • Chercher les deux fichiers de réglages Claude dans l’organisation et dans l’historique git.

  • Remplacer chaque mot de passe, jeton et clé qu’ils ont contenus.

  • Retirer settings.local.json de l’index et l’ajouter au .gitignore du dépôt.

  • Sur le poste, effacer toute règle qui contient un secret, même sans commit.

  • Approuver un motif, comme Bash(npm run:*), et passer le secret par une variable.

Les dossiers .claude/, .cursor/, .gemini/ et .specstory/ se traitent comme des .env. Le scan doit lire l’historique et reconnaître un mot de passe dans une commande. Les accès vers un hôte public passent en premier. L’extension Claude Code piégée sur Cursor est un autre sujet : une porte dérobée dans un composant.

Sources

Partager

Cet article peut servir à quelqu'un ?

Envoyez-le à un proche en un geste, ou partagez-le sur vos réseaux. Voici la carte qui s'affichera avec votre lien.

Aperçu de la carte de partage : Claude Code : 1 122 fichiers publics sur GitHub contiennent un secret

Votre mot accompagne le lien. Modifiez-le si vous voulez.

À lire ensuite