Source Map dans un paquet NPM : comment Anthropic a exposé 512 000 lignes de code en production
7 min de lecture
Une règle d’exclusion manquante dans le pipeline de construction a révélé le 31 mars 2026 l’intégralité du code en production de Claude Code d’Anthropic. 512 000 lignes de TypeScript, empaquetées dans un fichier Source Map de 59,8 Mo inclus dans le paquet NPM public. Le même jour, une attaque indépendante sur la chaîne d’approvisionnement a ciblé le paquet NPM axios – l’une des bibliothèques JavaScript les plus utilisées au monde. Deux incidents distincts, un même écosystème, une seule journée. Ensemble, ils illustrent pourquoi la sécurité de la chaîne d’approvisionnement NPM n’est plus un sujet marginal pour les équipes informatiques en 2026.
L’essentiel
- Le paquet NPM @anthropic-ai/claude-code v2.1.88 contenait un fichier Source Map de 59,8 Mo avec l’intégralité du code source TypeScript – cause : absence de règle dans .npmignore dans le pipeline de construction.
- Classification CWE : CWE-215 (Exposition d’informations via les données de débogage) et CWE-538 (Insertion d’informations sensibles dans un fichier accessible depuis l’extérieur).
- Avant la fuite, six CVE avaient déjà été documentées dans Claude Code, notamment des fuites de clés API et des contournements de sandbox.
- Le même jour : attaque sur la chaîne d’approvisionnement ciblant axios (v1.14.1 et v0.30.4) avec un cheval de Troie à accès distant intégré via la dépendance factice plain-crypto-js.
- Anthropic : « Erreur d’emballage due à une erreur humaine, pas un incident de sécurité. » Aucune donnée client compromise.
L’incident
Le 31 mars 2026 à 08h23 UTC, Chaofan Shou a publié sa découverte sur X. Shou est doctorant à l’UC Berkeley, cofondateur de la start-up de sécurité blockchain Fuzzland et chercheur en bug bounty avec 1,9 million de dollars américains de récompenses documentées pour des signalements de vulnérabilités. Sa découverte : la version 2.1.88 du paquet NPM officiel @anthropic-ai/claude-code contenait le fichier cli.js.map. Ce fichier Source Map de 59,8 Mo contenait dans le champ sourcesContent l’intégralité du code source TypeScript – environ 1 900 fichiers pour 512 000 lignes de code en production.
La Source Map faisait également référence à une archive ZIP située sur un bucket Cloudflare-R2 d’Anthropic, accessible publiquement. En quelques heures, la communauté a miroité le code sur GitHub. Le dépôt le plus visible a atteint plus de 41 500 forks. Anthropic a réagi par des notifications DMCA ; GitHub a désactivé plus de 8 100 dépôts dans le réseau de forks. Le code reste disponible sur des plateformes décentralisées.
La cause probable : Anthropic utilise Bun comme runtime JavaScript. Un bogue ouvert dans Bun (signalé le 11 mars 2026) indique que son bundler génère par défaut des Source Maps – même en mode production, contrairement à la documentation. Ni le fichier .npmignore ni le champ files dans package.json n’excluaient les fichiers .map.
Ce n’était pas le premier incident de ce type : en 2025 déjà, les versions v0.2.8 et v0.2.28 de Claude Code contenaient des fichiers Source Map. Quelques jours avant cette fuite, environ 3 000 fichiers internes d’Anthropic étaient apparus dans un cache publiquement accessible.
La déclaration officielle d’Anthropic : « Une erreur d’emballage de publication due à une erreur humaine, pas un incident de sécurité. » La version 2.1.88 a été retirée, la version 2.1.89 publiée.
Les Source Maps, vecteur d’attaque sous-estimé
Les Source Maps sont des fichiers JSON qui relient le code JavaScript compilé ou minifié à son code source d’origine. Leur champ sourcesContent contient l’intégralité du code source lisible. Ce sont des outils de débogage légitimes – dans les environnements de développement. Dans les paquets en production, elles deviennent un risque pour la sécurité.
Des outils comme reverse-sourcemap, Shuji ou unwebpack-sourcemap reconstruisent à partir d’un seul fichier .map l’arborescence complète avec le code source lisible. Aucun reverse engineering nécessaire, aucun décompilateur, aucune expertise particulière. Il suffit de décompresser le fichier.
Dans le cas de Claude Code, ont été révélés : l’intégralité du modèle d’autorisations en quatre niveaux, la logique de validation Bash, les flux d’authentification OAuth 2.0, l’architecture des serveurs MCP (Model Context Protocol) et 44 drapeaux de fonctionnalités (feature flags) pour des fonctions non publiées. Parmi eux, un mécanisme anti-distillation qui injecte des définitions d’outils falsifiées dans les requêtes API afin de contaminer les données d’entraînement des concurrents qui les interceptent. Et un « mode undercover » qui supprime toutes les références à Anthropic lorsque l’outil travaille dans des dépôts publics.
Aucune donnée client. Aucune clé API. Mais l’intégralité de la propriété intellectuelle de l’architecture agent – fruit de milliers d’heures de développement d’une entreprise valorisée à environ 380 milliards de dollars américains.
Le problème ne se limite pas à Anthropic. Les Source Maps dans les paquets de production sont un risque sectoriel. Une étude d’Ostorlab a conclu qu’environ cinq pour cent des actifs web examinés étaient vulnérables à des attaques basées sur les Source Maps. La différence : la plupart des organisations concernées ignorent que leurs fichiers .map sont accessibles publiquement.
« L’ironie est irréelle – Anthropic commercialise les capacités de génération de code de Claude, et pourtant son propre code a fui à cause d’une erreur d’emballage basique. »
– Réaction de la communauté sur Hacker News, 31.03.2026
Classification CWE et vulnérabilités connues
La fuite via Source Map relève principalement de deux catégories CWE :
CWE-215 (Exposition d’informations via les données de débogage) : les artefacts de débogage dans les livraisons en production exposent des détails internes d’implémentation.
CWE-538 (Insertion d’informations sensibles dans un fichier ou répertoire accessible depuis l’extérieur) : informations sensibles incluses dans un fichier accessible à des acteurs externes.
S’y ajoutent CWE-540 (Inclusion d’informations sensibles dans le code source), CWE-200 (Exposition d’informations sensibles à un acteur non autorisé) et OWASP A01:2021 (Contrôles d’accès défaillants).
Avant la fuite via Source Map, six CVE avaient déjà été documentées dans Claude Code :
Auxquelles s’ajoutent CVE-2025-59828 (exécution de configuration Yarn avant dialogue de confiance), CVE-2025-64755 (analyse Sed contournant la validation en lecture seule) et les vecteurs d’attaque documentés par Check Point Research via des configurations de projet manipulées.
Le schéma est clair : les outils de développement assistés par IA, capables de lire des fichiers, d’exécuter des commandes et d’accéder au réseau, constituent des surfaces d’attaque complètes – indépendamment du fournisseur. Le code source fuité montre du moins qu’Anthropic reconnaît le problème : un indicateur CLAUDE_CODE_SUBPROCESS_ENV_SCRUB a été introduit pour empêcher l’héritage des variables d’environnement (et donc potentiellement des clés API) par les sous-processus. Que cet indicateur ait été ajouté a posteriori confirme toutefois que l’architecture de sécurité a évolué de manière réactive plutôt que proactive.
Le même jour : l’attaque sur la chaîne d’approvisionnement d’axios
Indépendamment de la fuite dans Claude Code, une attaque sur la chaîne d’approvisionnement a frappé le 31 mars 2026 le paquet NPM axios – avec 83 millions de téléchargements hebdomadaires, l’une des bibliothèques JavaScript les plus utilisées au monde. Les versions 1.14.1 et 0.30.4 contenaient, via une fausse dépendance nommée plain-crypto-js, un cheval de Troie à accès distant. L’attaque a été active entre 00h21 et 03h29 UTC, avant que npm ne retire le paquet.
Le lien temporel est pertinent : toute personne ayant installé ou mis à jour Claude Code via npm durant cette fenêtre aurait pu installer la version compromise d’axios comme dépendance transitive. Deux problèmes indépendants sur la chaîne d’approvisionnement, un même écosystème, une seule journée. L’attaque sur axios a été confirmée indépendamment par SANS, Sophos et BleepingComputer, et attribuée au groupe UNC1069 (lié à la Corée du Nord).
Cet incident s’inscrit dans une chronologie que les équipes de sécurité informatique doivent connaître : event-stream (2018), ua-parser-js (2021), colors.js (2022), l’attaque sur Astro via Shai-Hulud (2024) et maintenant axios (2026). L’écosystème NPM, avec ses chaînes de dépendances profondément imbriquées, reste l’une des surfaces d’attaque les plus critiques du développement logiciel. Chaque dépendance transitive est un vecteur d’attaque potentiel – et la plupart des équipes ne connaissent même pas leur arbre complet de dépendances.
Ce que les équipes IT doivent vérifier dès maintenant
Cinq mesures concrètes à tirer de cet incident :
1. Audit des paquets pour les Source Maps. Exécuter npm pack –dry-run sur tous les paquets publiés en interne. Vérifier si des fichiers .map, des fichiers .env ou d’autres artefacts de débogage sont inclus dans l’artefact. Cela prend 30 secondes par paquet et aurait pu éviter la fuite de Claude Code.
2. Approche par liste blanche plutôt que par liste noire. Dans package.json, définir un champ files comme liste blanche, plutôt que de compter sur .npmignore (liste noire). Les listes noires oublient souvent les nouveaux types de fichiers. Les listes blanches n’incluent que ce qui est explicitement autorisé.
3. Vérifier la configuration du bundler. Les outils de construction comme Bun, esbuild et webpack génèrent souvent des Source Maps par défaut. Les désactiver explicitement pour les builds de production : –sourcemap=none (Bun), –sourcemap=false (esbuild) ou devtool: false (webpack).
4. Intégrer une porte de contrôle dans CI/CD. Mettre en place une vérification automatisée dans le pipeline qui interrompt le build si des fichiers .map, .env ou d’autres motifs d’exclusion sont trouvés dans l’artefact de publication. Un contrôle simple : find dist/ -name « *.map » -exec false {} +.
5. Utiliser les attestations de provenance. npm publish –provenance crée une attestation cryptographiquement signée qui lie de façon reproductible le build à un commit spécifique et à un environnement CI. Cela n’aurait pas empêché l’incident, mais rend toute manipulation traçable.
6. Considérer les outils de développement IA comme des surfaces d’attaque. Des outils comme Claude Code, GitHub Copilot et Cursor ont accès au système de fichiers, exécutent des commandes et communiquent avec des API externes. Ils méritent le même audit de sécurité que tout autre logiciel disposant d’un accès privilégié. Les six CVE documentées dans Claude Code montrent : ces outils ne sont pas à l’abri des vulnérabilités qui sont depuis longtemps des points de contrôle standards pour toute autre catégorie d’applications.
Questions fréquentes
Des données clients ou des clés API ont-elles été exposées ?
Non. Anthropic et des analyses de sécurité indépendantes (Penligent) confirment : aucune donnée client, aucune clé API, aucun identifiant. Ce qui a été exposé est le code applicatif de l’interface en ligne de commande Claude Code – c’est-à-dire l’architecture, la logique et les drapeaux de fonctionnalités, pas des secrets opérationnels.
En quoi cet incident diffère-t-il d’une attaque sur la chaîne d’approvisionnement ?
La fuite de Claude Code était une erreur de configuration involontaire (CWE-215) – pas une attaque ciblée. L’incident sur axios le même jour était en revanche une attaque intentionnelle sur la chaîne d’approvisionnement avec insertion de code malveillant. Les deux illustrent des facettes différentes du même problème : les paquets NPM comme vecteur d’attaque.
Quel risque existe-t-il pour les utilisateurs de Claude Code ?
Le risque direct lié à la fuite via Source Map est faible – le code exposé ne contenait aucun secret. Plus critique : toute personne ayant installé Claude Code entre 00h21 et 03h29 UTC le 31 mars aurait pu recevoir la version compromise d’axios comme dépendance transitive. Un npm audit et une vérification de la version d’axios sont recommandés.
Était-ce le premier incident de ce type chez Anthropic ?
Non. Déjà en 2025, les versions v0.2.8 et v0.2.28 de Claude Code contenaient des fichiers Source Map. Quelques jours avant cette fuite, environ 3 000 fichiers internes étaient apparus dans un cache publiquement accessible – dont des détails sur un modèle IA non publié. Trois incidents avec la même cause fondamentale (erreur dans .npmignore) suggèrent un problème systémique dans le pipeline de publication.
Comment vérifier mes propres paquets NPM ?
Quatre étapes : 1) npm pack –dry-run affiche tous les fichiers qui seraient inclus dans le paquet. 2) Configurer le champ files de package.json comme liste blanche. 3) Désactiver les Source Maps du bundler pour la production. 4) Intégrer une porte CI qui interrompt le build si des fichiers .map sont présents dans l’artefact.
Lectures recommandées par la rédaction
- → Claude Code entièrement fuité : ce que 512 000 lignes de code source révèlent sur les architectures d’agents IA (cloudmagazin) – L’analyse technique de l’architecture de l’incident
Plus d’informations depuis le réseau MBF Media
- → Claude Code : l’architecture derrière l’agent IA (cloudmagazin)
- → Les outils de développement IA et leurs implications en matière de sécurité (MyBusinessFuture)
Source de l’image : Pexels / Towfiqu barbhuiya (px:11391947)