La bombe : les packages npm en lesquels vos projets ont confiance viennent de devenir le vecteur d'attaque
Comment deux vagues distinctes de septembre 2025 ont transformé des bibliothèques JavaScript de confiance en vecteurs de vol de cryptomonnaies et de vers autoréplicants
Deux milliards six cents millions de téléchargements par semaine. Ce n'est pas un objectif. C'est un rayon de souffle. Lorsque des attaquants ont compromis le compte d'un mainteneur npm de confiance le 8 septembre 2025, ils n'avaient pas besoin de trouver une faille zero-day ingénieuse dans l'infrastructure de npm ni de rétro-concevoir une primitive cryptographique. Ils ont envoyé un e-mail de phishing. Quelqu'un a cliqué. Le reste a suivi automatiquement, à la vitesse des pipelines CI/CD s'exécutant dans tous les fuseaux horaires de la planète.
La vague du 8 septembre : un seul identifiant, dix-huit paquets, deux heures d'exposition
Selon l'analyse détaillée de l'incident par Upwind, les premières versions malveillantes de paquets sont apparues sur npm à 13h16 UTC le 8 septembre 2025. Vers 15h20 UTC, des membres de la communauté avaient repéré du code suspect et déclenché des alertes sur GitHub. Les mainteneurs ont rétabli les paquets compromis en moins de deux heures. Cette fenêtre de réponse est réellement rapide pour un écosystème communautaire, et elle compte pourtant moins qu'on ne pourrait l'espérer, car les paquets en question n'étaient pas des utilitaires obscurs. Comme le rapporte Sweet Security, citant la découverte initiale d'Aikido Security, les paquets compromis représentaient collectivement 2,6 milliards de téléchargements hebdomadaires, faisant de cet incident le plus grand compromis npm de l'histoire selon ce critère. Brian Krebs a résumé la portée de façon concise : 18 paquets JavaScript populaires, dont debug et chalk, ont été détournés et piégés pour voler des cryptomonnaies.
Le scénario d'accès initial de cette attaque est instructif précisément parce qu'il manque de glamour. Les attaquants n'ont pas cassé npm. Ils ont compromis une personne. L'identifiant hameçonné d'un seul mainteneur leur a donné la capacité de pousser de nouvelles versions malveillantes de bibliothèques qui se trouvent au fondement d'innombrables applications en production. NowSecure a souligné que l'exposition en aval potentielle s'étend aux applications mobiles, car de nombreux pipelines de développement mobile puisent dans le même écosystème npm. Le code injecté ciblait les portefeuilles de cryptomonnaies et les transactions blockchain, rendant la motivation financière immédiate et lisible.
La leçon structurelle ici, que tout développeur et étudiant sensibilisé à la sécurité devrait assimiler, réside dans le calcul des dépendances. Selon des données citées par l'analyse de sécurité npm de cyberdesserts.com, le projet npm moyen intègre 79 dépendances transitives. Vous auditez vos dépendances directes. Vous auditez rarement les dépendances de vos dépendances, ni les dépendances de leurs dépendances. C'est ce point aveugle récursif sur lequel les attaquants comptent.
La vague du 15 septembre : quand la charge utile apprend à marcher
Sept jours plus tard, les acteurs de la menace sont revenus avec quelque chose de plus ambitieux. Selon les recherches de Trend Micro, le 15 septembre, le dépôt npm a subi une deuxième attaque de chaîne d'approvisionnement en cours, là encore initiée par une campagne de phishing ciblée contre des comptes de mainteneurs. Cette vague a introduit deux charges utiles documentées aux comportements et objectifs sensiblement différents, et comprendre cette distinction est utile pour quiconque construit un modèle mental de l'évolution des attaques de chaîne d'approvisionnement.
La première charge utile, appelée Cryptohijacker, détournait discrètement des actifs en cryptomonnaies en piratant des API web et en manipulant le trafic réseau. Elle est axée sur les finances et conçue pour rester discrète. La télémétrie de Trend Micro confirme que des organisations en Amérique du Nord et en Europe figuraient parmi les plus touchées par Cryptohijacker.
La deuxième charge utile, le ver Shai-Hulud, relève d'une catégorie de préoccupation entièrement différente. Également documenté par Trend Micro, Shai-Hulud est livré via des paquets compromis, vole des jetons de services cloud, déploie des outils d'analyse de secrets et se propage automatiquement vers des comptes supplémentaires. Au moment du rapport de Trend Micro, aucune détection du ver Shai-Hulud dans la nature n'avait été confirmée, ce qui constitue un contexte important : la capacité existe, le mécanisme est compris, et les défenseurs disposent d'une fenêtre pour se préparer.
L'équipe de recherche sur les menaces de Splunk a formulé le schéma plus large avec une précision utile : l'attaque Shai-Hulud de septembre 2025 a infecté plus de 500 paquets npm dans un compromis coordonné de la chaîne d'approvisionnement et, selon leur évaluation, a marqué un tournant dans la sécurité de la chaîne d'approvisionnement, en illustrant des techniques que les défenseurs doivent désormais considérer comme faisant partie des méthodes adversariales standard. L'écart d'échelle entre l'événement du 8 septembre (18 paquets) et la vague du 15 septembre (plus de 500 paquets) reflète la rapidité avec laquelle les acteurs de la menace ont itéré sur leur succès initial.
Ce que la taille de l'écosystème npm rend possible (et difficile)
Pour comprendre pourquoi ces événements ont un poids qui dépasse la communauté JavaScript, il est utile d'apprécier l'échelle de l'écosystème. L'équipe de sécurité de Splunk note que npm contient plus de 2,5 millions de paquets et traite des milliards de téléchargements hebdomadaires, représentant ce qu'elle décrit comme une cible irrésistible pour les attaquants cherchant à compromettre les chaînes d'approvisionnement logicielles à grande échelle. Les mathématiques, selon Splunk, sont simples : compromettre un seul paquet populaire permet potentiellement d'accéder à des milliers d'applications en aval et à leurs environnements de production.
La surface d'attaque s'étend au-delà des applications web. NowSecure a spécifiquement mis en évidence l'impact potentiel sur les applications mobiles, car les pipelines de développement mobile consomment régulièrement des paquets npm comme dépendances de compilation. Un outil de compilation compromis n'a pas besoin d'atteindre directement les utilisateurs finaux ; il lui suffit de toucher le processus de compilation une seule fois.
L'analyse de Splunk identifie également un mécanisme spécifique qui rend npm particulièrement exploitable : les hooks de cycle de vie. Les hooks preinstall, install et postinstall de npm exécutent du code automatiquement lors de l'installation d'un paquet, sans aucune invite ni confirmation de l'utilisateur. Un script postinstall malveillant s'exécute dès qu'un développeur tape npm install. Ce n'est pas un cas limite obscur ; c'est une fonctionnalité npm standard que les acteurs de la menace ont appris à weaponiser de manière fiable.
Ce que cela signifie pour vous en tant qu'apprenant et créateur
Si vous apprenez le développement logiciel, étudiez la sécurité, ou construisez quoi que ce soit qui touche à JavaScript, cette histoire est une étude de cas pratique sur le fonctionnement réel des risques liés aux logiciels modernes. Le périmètre n'est pas le code de votre application. Le périmètre s'étend à chaque paquet que vous installez, à chaque paquet que ces paquets installent, et aux humains qui les maintiennent tous.
Les points à retenir concrets ne sont pas exotiques. Verrouillez vos versions de dépendances à l'aide de fichiers package-lock.json ou yarn.lock afin qu'une nouvelle version compromise n'arrive pas automatiquement lors de votre prochaine installation. Auditez vos arbres de dépendances à l'aide d'outils comme npm audit. Soyez attentif lorsque la communauté de sécurité lance des alertes sur GitHub, car la réponse du 8 septembre a démontré que la rapidité de la communauté peut faire la différence. Et si vous maintenez des paquets open source, traitez vos identifiants npm publish avec le même sérieux que l'accès à une base de données de production, car du point de vue d'un attaquant, ils sont équivalents.
L'absence de détections confirmées du ver Shai-Hulud dans la nature est une vraie bonne nouvelle, et elle reflète à la fois la rapidité de réponse de la communauté et la préparation active des défenseurs. La fenêtre pour développer de meilleures habitudes autour de l'hygiène des dépendances est ouverte. Les événements de septembre 2025 illustrent de façon frappante et bien documentée pourquoi ces habitudes comptent avant un incident, et non après.
Sources
- Major NPM Supply-Chain Attack: Potential Impact on Mobile Applications - NowSecure(opens in new tab)
- Tradecraft Tuesday Recap: axios npm Supply Chain Compromise(opens in new tab)
- What We Know About the NPM Supply Chain Attack | Trend Micro (US)(opens in new tab)
- Defending Against npm Supply Chain Attacks: A Practical Guide to Detection, Emulation, and Analysis | Splunk(opens in new tab)
- npm Security Risks 2026: Vulnerable Packages & Fixes(opens in new tab)
- npm Supply Chain Attack: Massive Compromise of debug, chalk ...(opens in new tab)
- Largest npm Supply-Chain Attack Hits Billions of Downloads | Sweet Security(opens in new tab)
Sources
- Major NPM Supply-Chain Attack: Potential Impact on Mobile Applications - NowSecure(opens in new tab)
- Tradecraft Tuesday Recap: axios npm Supply Chain Compromise(opens in new tab)
- What We Know About the NPM Supply Chain Attack | Trend Micro (US)(opens in new tab)
- Defending Against npm Supply Chain Attacks: A Practical Guide to Detection, Emulation, and Analysis | Splunk(opens in new tab)
- npm Security Risks 2026: Vulnerable Packages & Fixes(opens in new tab)
- 18 popular JavaScript packages hacked to steal crypto | Brian Krebs posted on the topic | LinkedIn(opens in new tab)
- npm Supply Chain Attack: Massive Compromise of debug, chalk ...(opens in new tab)
- Largest npm Supply-Chain Attack Hits Billions of Downloads | Sweet Security(opens in new tab)
- What We Know About the NPM Supply Chain Attack | Trend Micro (US)(opens in new tab)
- Largest NPM Compromise in History - Supply Chain Attack - Reddit(opens in new tab)