Une équipe de cyberpirates est parvenue à compromettre le package npm « is », téléchargé 2,7 millions de fois par semaine. Cette attaque de phishing coordonnée a infecté sept packages populaires de l'écosystème JavaScript avec des logiciels malveillants multiplateforme.

Une fois que "is" est entré déguisé dans les systèmes, il laisse des traces et presiste - ©Alexander Limbach / Shutterstock
Une fois que "is" est entré déguisé dans les systèmes, il laisse des traces et presiste - ©Alexander Limbach / Shutterstock
L'info en 3 points
  • Une attaque de phishing a compromis le package npm « is », infectant sept autres packages JavaScript populaires avec un malware.
  • Les hackers ont utilisé un faux site et des e-mails de phishing pour tromper les développeurs et voler leurs tokens.
  • Le malware persiste même après suppression, collectant des données sensibles et permettant un contrôle à distance des machines.

Les hackers viennent de frapper l'écosystème npm. Ils ont compromis le package « is », un utilitaire de vérification de types JavaScript que des millions de développeurs installent chaque semaine. Cette bibliothèque figure parmi les plus téléchargées du registre npm.

Les pirates ont infecté sept packages en parallèle. Ils ont touché eslint-config-prettier, eslint-plugin-prettier, synckit, @pkgr/core, napi-postinstall et got-fetch. Une faille dans le système d'authentification email de npm leur a permis de tromper les responsables de ces projets et de voler leurs tokens d'accès.

Le malware installé établit une connexion WebSocket permanente avec les serveurs des pirates. Ces derniers peuvent alors contrôler les machines infectées à distance.

Des e-mails de phishing parfaitement imités ont piégé les développeurs

Les pirates maîtrisent parfaitement le fonctionnement de npm. Ils ont fabriqué un faux site « npnjs.co » qui copie l'interface officielle dans les moindres détails. Leurs emails provenaient du domaine npmjs.org, authentique mais mal protégé car il manque la sécurité DMARC.

Jordan Harband, mainteneur du package (en très large, en charge de conserver le code à jour) « is », explique avoir reçu un e-mail apparemment officiel d'un ancien propriétaire de package. « Tout semblait normal, alors j'ai obtempéré (irrité que npm supprime un propriétaire sans avertir les autres propriétaires) et le lendemain matin, cela a été publié », détaille-t-il sur Bluesky.

Joun Qin, responsable des packages eslint-config-prettier et eslint-plugin-prettier, a subi le même sort. « J'ai été trompé par un e-mail de phishing et un nouveau jeton npm a été ajouté et divulgué, puis certains packages populaires que je maintiens ont été publiés avec des logiciels malveillants », confie-t-il sur X.

Autant dire que ces deux-là ne sont pas des lapins de six semaines. Et pourtant, ils ont mordu à l'hameçon, le leurre était plus vrai que nature. Et cette faille de sécurité bien connue facilite les usurpations d'identité. Le domaine npmjs.org appartient à npm mais les vrais e-mails arrivent depuis npmjs.com. Sans configuration DMARC sur le domaine .org, les hackers peuvent facilement se faire passer pour npm.

Le "is" compromis permet l'usurpation d'identité et donc le phishing - ©Melisa Parlak / Shutterstock
Le "is" compromis permet l'usurpation d'identité et donc le phishing - ©Melisa Parlak / Shutterstock

Un malware qui reste même après suppression

Le code malveillant du package « is » collecte les informations et ratisse encore plus large. Socket, spécialiste de la sécurité des packages, a trouvé un chargeur JavaScript très complexe qui assemble sa charge utile directement en mémoire.

Une fois activé, le malware collecte automatiquement les informations système : nom d'hôte, système d'exploitation, détails du processeur. Il capture également toutes les variables d'environnement qui contiennent souvent des secrets critiques comme les tokens d'API ou les identifiants de base de données.

Le malware communique en permanence avec ses créateurs. Chaque message reçu via WebSocket devient du code JavaScript que la machine exécute aussitôt. Les pirates obtiennent ainsi un contrôle total à distance.

Le logiciel malveillant reste actif même quand on croit l'avoir supprimé. Il écrase les fichiers index.js existants quand il en a les droits. Supprimer le dossier node_modules ne suffit donc pas à s'en débarrasser.

Les conséquences pour les développeurs touchés sont lourdes. Un utilisateur explique sur Hacker News avoir débranché sa machine du réseau, changé complètement son SSD, réinstallé Windows et renouvelé toutes ses clés SSH après avoir vu que le malware désactivait les protections de Chrome.

Google développe actuellement OSS rebuild, une initiative qui reconstruit automatiquement les packages à partir des sources et les compare aux versions du registre. Cette technologie couvre déjà npm, PyPi et Crates.io pour Node.js, Python et Rust, et pourrait considérablement réduire les risques de ce type d'attaque à l'avenir.

Source : The Register