Introduction
Le 8 septembre 2025, l’écosystème JavaScript a été frappé par une attaque de grande ampleur. Plusieurs paquets NPM parmi les plus utilisés, notamment Chalk et Debug, ont été compromis. Omniprésentes dans les projets Node.js, aussi bien comme dépendances directes qu’indirectes, ces bibliothèques ont entraîné un risque majeur pour des millions d’applications dans le monde entier.
Origine de l’incident
Contrairement à ce que l’on pourrait penser, l’attaque ne repose pas sur une vulnérabilité technique des paquets eux-mêmes, mais sur une erreur humaine. Le mainteneur de plusieurs bibliothèques critiques a été piégé par une campagne de hameçonnage sophistiquée. Un e-mail se présentant comme provenant du support officiel de npmjs.org l’invitait à mettre à jour la configuration de son authentification à deux facteurs NPM. Le domaine utilisé (npmjs.help) imitait celui de npmjs.org, mais redirigeait en réalité vers une fausse page de connexion. Pensant répondre à une exigence légitime, le mainteneur y a renseigné ses identifiants et son code OTP, offrant ainsi un accès complet à son compte.
Avec ces accès, l’attaquant a pu publier de nouvelles versions de plusieurs paquets utilisés massivement dans l’écosystème Node.js. Au total, ces paquets représentent plus de deux milliards de téléchargements par semaine.
Le code malveillant introduit
Les versions compromises contenaient un code spécialement conçu pour cibler les environnements Web3 et les applications manipulant des crypto-actifs. Le logiciel malveillant injecté interceptait les appels réseau effectués par les applications, en particulier ceux réalisés via fetch et XMLHttpRequest. Son objectif était de détecter les transactions envoyées vers des portefeuilles tels que MetaMask ou Phantom, puis de les modifier avant leur transmission.
Lorsqu’une transaction était détectée, l’adresse du destinataire était remplacée par une adresse contrôlée par l’attaquant. Pour éviter que la victime ne remarque la fraude, le code utilisait un algorithme de similarité afin de générer des adresses visuellement proches de l’originale. Cette attaque fonctionnait sur plusieurs blockchains, dont Ethereum, Bitcoin, Solana et Tron, ce qui témoigne de son haut niveau de sophistication.
Impact et propagation
L’impact potentiel est considérable. Toute application utilisant directement une version compromise devenait immédiatement vulnérable, mais le risque est encore plus grand en raison des dépendances transitives. De nombreux frameworks et outils populaires intègrent certains paquets impactés dans leur chaîne de dépendances, ce qui signifie que le code malveillant a pu se propager de manière invisible à un grand nombre de projets.
Le danger ne se limite pas aux projets financiers ou liés aux crypto-actifs. Toute entreprise utilisant ces bibliothèques dans son environnement de développement ou de production pouvait être affectée, en particulier si des données sensibles transitaient par les applications concernées.
Réaction de l’écosystème
La compromission a été détectée par Aikido Security le 8 septembre à 13 h 16, heure universelle. Les versions malveillantes ont été rapidement signalées et retirées du registre NPM. Plusieurs éditeurs de solutions de sécurité ont publié des règles de détection pour aider les équipes à identifier les versions compromises dans leurs projets. Malgré cette réactivité, certaines applications avaient déjà téléchargé et intégré les paquets contaminés avant leur retrait.
Après avoir été alerté de la compromission, le mainteneur a de son côté admit avoir été victime d’hameçonnage via un post sur BlueSky. Ce dernier a également mis à disposition une timeline de ses échanges avec NPM sur Github
Versions impactées
Un total de 18 paquets NPM ont été identifiés comme compromis, les versions impactées sont les suivantes :
- ansi-styles @6.2.2
- debug @4.4.2
- chalk @5.6.1
- supports-color @10.2.1
- strip-ansi @7.1.1
- ansi-regex @6.2.1
- wrap-ansi @9.0.1
- color-convert @3.1.1
- color-name @2.0.1
- is-arrayish @0.3.3
- slice-ansi @7.1.1
- color @5.0.1
- color-string @2.1.1
- simple-swizzle @0.2.3
- supports-hyperlinks @4.1.1
- has-ansi @6.0.1
- chalk-template @1.1.1
- backslash @0.2.1
- proto-tinker-wc @1.8.7
Besoin d’un accompagnement en cybersécurité ? Chez MA Cyber, nous vous accompagnons dans la remédiation après une attaque de chaîne d’approvisionnement. De plus, nos experts en tests d’intrusion analysent vos environnements, identifient les vulnérabilités techniques ou métier et vous guident dans la mise en place de mesures correctives, adaptées à votre organisation et votre contexte. Découvrez notre approche sur notre page dédiée aux tests d’intrusion.
Sources
https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised
https://news.ycombinator.com/item?id=45169794
https://vercel.com/blog/critical-npm-supply-chain-attack-response-september-8-2025
FAQ
Qu’est-ce qu’une attaque de la chaîne d’approvisionnement ?
C’est une attaque où un paquet, un produit ou un service légitime est compromis afin d’injecter du code malveillant qui se propage automatiquement à tous les projets utilisant cette dépendance ou a tous les utilisateurs exploitant ce service ou ce produit.
Comment une chaîne d’approvisionnement peut-elle être compromise ?
La compromission passe généralement par le vol de comptes de mainteneurs (phishing, fuite de tokens ou 2FA), permettant d’accéder a la chaine de développement et publier des versions malveillantes d’un paquet existant.
Quels sont les risques pour une application utilisant un paquet compromis ?
Une dépendance compromise peut exécuter du code malveillant, intercepter des données sensibles, modifier des transactions ou introduire une porte dérobée dans l’application.
Comment vérifier si un projet est impacté ?
Il faut identifier les versions de dépendances utilisées, les comparer aux versions compromises connues et analyser les pipelines CI/CD pour détecter toute activité suspecte.
Comment réduire le risque d’attaques similaires ?
La réduction du risque passe par l’audit régulier des dépendances, la surveillance des mises à jour, l’utilisation d’outils de sécurité automatisés et le renforcement de la sécurité des comptes mainteneurs.
