Comment Anthropic a accidentellement livré les entrailles de Claude Code à tout internet
Sécurité · IA · npm

Comment Anthropic a accidentellement livré les entrailles de Claude Code à tout internet

📅 2 avril 2026 ⏱ 12 min de lecture
Pas de hacker, pas de cyberattaque. Juste un fichier de debug oublié dans un package npm. Et voilà comment 512 000 lignes de code confidentiel se sont retrouvées sur GitHub en quelques heures.

La séquence des événements

Le 31 mars 2026, à 00h21 UTC, Anthropic publie la version 2.1.88 de son outil phare @anthropic-ai/claude-code sur le registre npm. La mise à jour est routinière. Personne ne se doute de rien.

À 04h23 UTC, Chaofan Shou, un développeur de Solayer Labs, tombe sur quelque chose d'inhabituel en inspectant le package. Il publie un lien sur X. En quelques heures, le tweet dépasse 28 millions de vues. Des miroirs du code explosent sur GitHub : plus de 84 000 étoiles et 82 000 forks avant que les demandes DMCA d'Anthropic ne commencent à pleuvoir.

Anthropic retire la version dans la journée et publie un communiqué lapidaire :

« Aucune donnée client ni identifiant n'ont été exposés. Il s'agissait d'une erreur humaine de packaging, pas d'une faille de sécurité. »

Mouais. Le dentifrice ne rentre pas dans le tube.

C'est quoi un fichier .map, au juste ?

Quand on développe en JavaScript ou TypeScript, le code source est lisible et bien structuré. Mais quand on le prépare pour la production, il est minifié : tout est compressé en une seule ligne quasi illisible, les noms de variables deviennent a, b, c... C'est voulu : ça réduit la taille du fichier et ça protège partiellement le code.

Le problème, c'est que quand quelque chose plante en production, le message d'erreur pointe vers « ligne 1, colonne 48293 » d'un blob incompréhensible. Pour déboguer, les développeurs utilisent des source maps — des fichiers .map qui font le pont entre le code minifié et le code source original. Ils contiennent littéralement tous les fichiers originaux, les commentaires, la structure interne. Tout.

Ces fichiers sont faits pour rester en interne. Les inclure dans un package public, c'est comme envoyer le plan d'architecte avec les clés de la maison.

Claude Code tourne sur Bun, le runtime JavaScript qu'Anthropic a acquis fin 2025. Or, un bug connu de Bun (signalé le 11 mars, encore ouvert le 31 mars) génère des source maps même en mode production alors que sa propre documentation dit le contraire. Anthropic a utilisé son propre outil, et ce propre outil les a trahis.

Un simple npm pack --dry-run avant publication aurait suffi à détecter le problème. Ce n'est pas la première fois : une fuite quasi identique s'était déjà produite avec une version antérieure de Claude Code en février 2025. Même cause, même négligence.

Ce que le code a révélé

512 000 lignes de TypeScript réparties sur 1 900 fichiers. Voici les trouvailles les plus marquantes.

Les prompts système qui ont fuité

Le plus commenté : le mode Undercover. Anthropic utilise Claude Code pour contribuer discrètement à des projets open source sans que personne ne le sache. Le prompt système dit explicitement :

You are operating UNDERCOVER in a PUBLIC/OPEN-SOURCE repository. Your commit messages, PR titles, and PR bodies MUST NOT contain ANY Anthropic-internal information. Do not blow your cover.

Le coordinateur multi-agents a lui aussi son prompt interne :

Do not rubber-stamp weak work.

Et le système "Buddy", un compagnon façon Tamagotchi prévu pour le 1er avril, a son propre prompt :

A small {species} named {name} sits beside the user's input box and occasionally comments in a speech bubble. You're not {name} — it's a separate watcher.

Les fonctionnalités secrètes

KAIROS non sorti

Agent daemon autonome tournant en arrière-plan, même terminal fermé. Consolide la mémoire la nuit via « autoDream ». Mentionné 150+ fois dans le code.

ULTRAPLAN non sorti

Délègue une tâche complexe à un serveur distant Opus 4.6, lui donne 30 minutes pour réfléchir, renvoie le résultat via __ULTRAPLAN_TELEPORT_LOCAL__.

CHICAGO sorti

Contrôle complet du bureau : clics souris, frappe clavier, captures d'écran. Réservé aux abonnés Max/Pro, gated derrière tengu_malort_pedway.

Anti-distillation

Injecte de faux outils dans les réponses API pour empoisonner les concurrents qui tenteraient de copier Claude en interceptant le trafic réseau.

La roadmap involontaire

Les commentaires internes révèlent les noms de code des modèles : Capybara (variant de Claude 4.6), Fennec (Opus 4.6), et un mystérieux Numbat non encore annoncé. Les commentaires révèlent aussi que Capybara v8 régresse à 30% de taux d'hallucinations contre 17% pour la v4 — pas très rassurant. Et les prochains modèles sont déjà mentionnés dans le code de l'Undercover Mode : opus-4-7 et sonnet-4-8.

Le bug embarrassant au passage

Un commentaire dans autoCompact.ts daté du 10 mars 2026 indique que 1 279 sessions consécutives avaient généré jusqu'à 3 272 échecs, brûlant 250 000 appels API par jour dans le vide. La solution : limiter à 3 échecs consécutifs avant de désactiver la compression. Trois lignes de code pour stopper un gouffre à 250K appels/jour.


Ce que ccleaks.com a déterré en plus

Peu après la fuite, un développeur indépendant (Abhishek Tiwari, @baanditeagle sur X) a publié ccleaks.com, un site dédié à l'analyse exhaustive des 1 884 fichiers TypeScript. Les trouvailles y sont documentées avec les références exactes au code source. Voici les plus savoureuses.

Les pépites que personne n'avait vues venir

Le nom "capybara" encodé caractère par caractère

Le nom de code interne est tellement secret qu'il est écrit sous forme de String.fromCharCode(99,97,112,121,98,97,114,97) dans le source. Pourquoi ? Pour éviter leur propre détecteur de fuite interne. De même, tous les noms d'espèces du Buddy sont encodés en hex — l'un d'eux entre en collision avec un canari interne. Ils se sont piégés eux-mêmes.

src/buddy/types.ts:14

La fonction d'auto-approbation s'appelle classifyYoloAction()

Le système qui décide si Claude peut exécuter un outil sans demander la permission s'appelle littéralement YOLO. Avec des niveaux de risque LOW / MEDIUM / HIGH évalués par Claude lui-même. Claude juge ses propres actions dangereuses.

src/utils/permissions/yoloClassifier.ts

Dangereux CLAUDE_CODE_ABLATION_BASELINE=1 désactive tout

Ce flag désactive simultanément toutes les sécurités : thinking, compaction, mémoire auto, tâches en arrière-plan. Un "mode recherche" qui réduit Claude à l'état brut. Sans aucun garde-fou.

src/entrypoints/cli.tsx:21

USER_TYPE=ant déverrouille tout

Une simple variable d'environnement suffit à activer toutes les features réservées aux employés Anthropic, y compris le dump complet de tous les appels API vers ~/.claude/dump-prompts/<session>.jsonl — corps de requête ET réponse en streaming.

src/services/api/dumpPrompts.ts

Le préfixe de clé API assemblé à l'exécution pour contourner leur propre scanner

Le scanner de secrets d'Anthropic interdit la chaîne sk-ant-api dans le code. Pour la contourner, le code la construit ainsi : ['sk','ant','api'].join('-'). Ils se cachent littéralement d'eux-mêmes.

src/services/teamMemorySync/secretScanner.ts:46

22 dépôts privés Anthropic exposés

La liste d'exclusion de l'Undercover Mode contient les noms de 22 dépôts internes : anthropics/casino, anthropics/trellis, anthropics/forge-web, anthropics/feldspar-testing, et d'autres encore jamais mentionnés publiquement.

src/utils/commitAttribution.ts

Kill switch d'urgence déguisé en message de surcharge

Un message hardcodé dit "Opus is experiencing high load, please use /model to switch to Sonnet". En réalité, c'est une coupe-circuit d'urgence catégorisé en interne comme capacity_off_switch. Rien à voir avec la charge réelle.

src/services/api/errors.ts:167

GrowthBook tellement cassé qu'ils ont écrit leur propre cache

Deux commentaires "WORKAROUND" dans le source expliquent que la SDK GrowthBook ignore ses propres valeurs pré-évaluées depuis le serveur. Anthropic a dû construire une couche de cache maison par-dessus leur propre outil de feature flags.

src/services/analytics/growthbook.ts:330–383

La voix a un kill switch baptisé "Amber Quartz"

Le mode voix existe, avec authentification OAuth. Son bouton d'arrêt d'urgence s'appelle tengu_amber_quartz_disabled, suggérant qu'il est encore en phase de test active.

src/voice/voiceModeEnabled.ts

Les contributions IA trackées au caractère près

Les PR descriptions incluent le pourcentage exact de code écrit par l'IA avec matching caractère par caractère, par exemple "93% 3-shotted by claude-opus-4-6". Tout cela est purgé automatiquement en Undercover Mode.

src/utils/commitAttribution.ts:325

26 commandes slash cachées

Non documentées dans le --help, non annoncées publiquement. Une sélection :

/ctx-vizvisualiseur de contexte
/ultraplanplanification avancée
/dreamconsolidation mémoire
/subscribe-prwebhooks pull request
/autofix-prauto-fix PR
/ant-tracetrace interne
/bughunterdebug de bugs
/good-claudeeaster egg
/btwquestion en passant
/envinspection env
/reset-limitsreset des limites
/dump-system-promptaffiche le prompt sys
/perf-issuerapport perf
/mock-limitssimuler les limites
/break-cacheinvalider le cache
/init-verifierssetup vérificateurs

Le contexte aggravant

La fuite du 31 mars n'est pas isolée. Cinq jours avant, le 26 mars, une mauvaise configuration CMS avait exposé environ 3 000 fichiers internes incluant un brouillon sur le modèle Mythos — décrit comme présentant « des risques sans précédent pour la cybersécurité ». Et simultanément au leak du 31 mars, une attaque supply-chain distincte ciblait le package axios (active entre 00h21 et 03h29 UTC), injectant un cheval de Troie.

Action requise si tu utilises Claude Code via npm. Vérifie tes lockfiles (package-lock.json, bun.lockb) pour les versions axios@1.14.1 ou 0.30.4, et la dépendance plain-crypto-js. En cas de doute, traite la machine comme compromise, fais tourner les credentials, et préfère l'installeur natif plutôt que npm.

Coup PR ou vraie maladresse ?

Certains ont agité la théorie du coup PR orchestré — les deux fuites auraient provoqué un retournement spectaculaire de l'opinion des développeurs en 48h. Anthropic n'a pas poussé très fort sur les takedowns DMCA : après avoir d'abord ciblé 8 100 repos, ils se sont rétractés à 1 repo + 96 forks. Et dans les 48h, les développeurs sont passés de "Anthropic sucks" à "holy shit look what Anthropic is building". Coïncidence ? Maladresse légale ? À vous de juger.