Un lot de bibliothèques JavaScript très utilisées a été piégé sur npm. Au cœur du piège, un code qui remplace silencieusement les adresses de portefeuilles crypto lors des transactions. L’attaque touche des paquets totalisant environ 2,6 milliards de téléchargements hebdomadaires, révélant une fragilité structurelle du logiciel moderne.
Ce qui s’est passé, concrètement
Le 8 septembre 2025, un mainteneur reconnu s’est fait dérober l’accès à son compte npm via hameçonnage. Les assaillants ont publié de nouvelles versions infectées de bibliothèques emblématiques, puisé dans la confiance de l’écosystème et laissé un drainer crypto agir dans l’ombre. Le leurre venait d’un domaine factice, npmjs.help, mimant une demande de mise à jour 2FA.

Parmi les paquets piégés figurent notamment chalk, debug, ansi-styles, strip-ansi, color-convert et d’autres briques minuscules mais omniprésentes dans les arbres de dépendances. Ce ne sont pas des outils “crypto” à l’origine, pourtant ils irriguent d’innombrables front-ends, back-ends et dApps. La portée potentielle explique le chiffre vertigineux : près de 2,6 milliards de téléchargements par semaine.
Le code malveillant agit côté navigateur : il intercepte les appels réseau (fetch, XMLHttpRequest) et les API de portefeuilles (comme window.ethereum), puis substitue l’adresse du destinataire par celle de l’attaquant avant la signature. Résultat : les fonds partent vers la mauvaise clé sans signal visible. L’implant supporte plusieurs chaînes, dont Ethereum et Solana.
Pourquoi les portefeuilles crypto sont dans la ligne de mire
JavaScript est devenu la colle du Web 3. Si une dApp ou un site intègre une version compromise, l’attaquant se retrouve dans le même contexte d’exécution que le portefeuille de l’utilisateur. À cette distance zéro, nul besoin d’un exploit exotique : une réécriture subtile d’un JSON, un hook bien placé, et l’adresse change.
Face au risque, des voix de l’industrie ont conseillé de redoubler de prudence lors des signatures. Le CTO de Ledger a rappelé l’intérêt des portefeuilles matériels avec écran et signature claire. Voir l’adresse finale, sur un écran de confiance, casse la magie noire des remplacements invisibles. En clair : ne signez pas à l’aveugle.
Bonne nouvelle, l’impact opérationnel s’avère plus étroit qu’il n’y paraît. Les versions piégées ont été actives sur une fenêtre courte et nécessitaient un nouvel install pour se propager. C’est exactement le genre de détail qui transforme un scénario catastrophe en incident contenu, à condition d’agir vite.
Un impact réel limité, un signal d’alarme massif
À l’heure où nous écrivons, moins de 50 $ auraient été effectivement détournés, selon Security Alliance, malgré l’ampleur inédite de la compromission. Une goutte d’eau financière, mais un océan de leçons à retenir.
Pourquoi si peu de dégâts ? La communauté a réagi vite : détection, retrait des versions, correctifs, messages d’alerte. Certaines équipes n’avaient pas mis à jour pendant la fenêtre critique, d’autres ont vu leurs pipelines CI échouer grâce au verrouillage de versions. La défense en profondeur a payé, pour une fois, à l’échelle de l’écosystème.
Pourtant, l’alerte ne tombe pas du ciel. Fin août, une autre attaque supply-chain visait des paquets Nx et a même détourné des assistants IA de développeurs pour l’exfiltration. Les chaînes d’approvisionnement logicielles sont devenues un théâtre d’opérations à part entière. Ignorer ce front, c’est laisser la porte d’entrée grande ouverte.
Cette attaque npm n’a pas provoqué de pertes massives, mais elle met en lumière un problème central : l’écosystème repose sur une confiance trop concentrée. Quand un seul compte compromis peut contaminer des milliards de téléchargements, c’est toute la chaîne qui vacille. Le Web3 ne reste solide que si la vérification des transactions passe par des dispositifs matériels et si les dépendances logicielles sont gérées comme des actifs critiques, au même titre que les clés privées. Ce n’est pas un épisode à dramatiser, mais un avertissement. La prochaine fois, l’addition pourrait être bien plus lourde.


