
La communauté JavaScript fait face à une nouvelle attaque de la chaîne d’approvisionnement logicielle : un malware surnommé Shai-Hulud a contaminé des centaines de packages sur le registre npm. Cette campagne malveillante, désignée par ses auteurs comme “Sha1-Hulud: The Second Coming”, dépasse en ampleur la première apparition du ver Shai-Hulud observée en septembre 2025. En quelques jours, plus de 800 packages npm compromis ont été publiés via des comptes de mainteneurs détournés, y compris des bibliothèques très répandues (par ex. les SDK officiels de Zapier, des modules ENS Domains, PostHog, Postman, AsyncAPI, etc.).
Les paquets infectés exécutent un code qui vole les jetons d’accès et autres secrets des développeurs (clés API, tokens GitHub/NPM, identifiants cloud…) pour les exfiltrer vers des dépôts GitHub publics créés automatiquement. Au total, environ 27 000 nouveaux dépôts GitHub ont ainsi été générés pour stocker ces données volées. GitHub s’efforce de supprimer ces répertoires malveillants, mais les attaquants en créent de nouveaux à un rythme soutenu.
Contexte de l’attaque
Shai-Hulud est initialement apparu mi-septembre 2025 comme un ver auto-réplicant ciblant l’écosystème Node.js. La première campagne avait compromis 187 packages npm en injectant un module malveillant capable de scanner les machines de développement à la recherche de secrets (via l’outil TruffleHog) et de publier les données collectées sur un dépôt externe. L’attaquant avait automatisé la diffusion en téléchargeant des packages légitimes populaires, en y ajoutant un script malveillant (preinstall/postinstall) dans le fichier package.json, puis en les republiant sur npm sous de nouvelles versions via des comptes de mainteneurs compromis.
Le 24 novembre 2025, la société Aikido Security a détecté une nouvelle vague d’infections npm présentant les indicateurs de Shai-Hulud. Au départ, environ 105 paquets étaient identifiés comme piégés, mais ce nombre est rapidement monté à 492 (en ne comptant que les noms de packages uniques) en l’espace de quelques heures. La propagation s’est avérée exponentielle : on estime que plus de 25 000 versions de packages malveillantes ont finalement été injectées sur npm durant cette seconde vague, via environ 350 comptes de mainteneurs piratés. Ce déferlement a eu lieu alors même que npm s’apprête à renforcer la sécurité de sa plateforme en révoquant les anciens jetons d’authentification le 9 décembre 2025 – une échéance dont les assaillants ont visiblement profité pour frapper une dernière fois avant la mise en place de ces mesures.
Chaîne d’infection et capacités du malware
La variante “Sha1-Hulud: The Second Coming” se distingue par un mécanisme d’attaque sophistiqué se déclenchant dès l’installation du package piégé (script preinstall). D’après l’analyse de StepSecurity, le malware exécute un enchaînement en cinq étapes successives lors de l’installation :
- Étape 1 – Infection initiale (dropper Bun) : Le package compromis contient un script preinstall qui lance un dropper nommé setup_bun.js. Ce script vérifie la présence du runtime Bun sur la machine. S’il est absent, le dropper télécharge et installe silencieusement Bun depuis son programme d’installation officiel (appel de curl https://bun.sh/install | bash). Le dropper recharge ensuite le chemin d’accès mis à jour et exécute la charge utile principale en lançant le binaire Bun sur le fichier bun_environment.js du package malveillant.
- Étape 2 – Chargement du code malveillant : Le fichier bun_environment.js constitue le cœur du malware. Il est extrêmement obfusqué (plus de 10 Mo de code incluant d’énormes tableaux de chaînes hexadécimales, une boucle anti-débogage effectuant des millions d’opérations, et des fonctions masquées pour reconstruire les chaînes de caractères). Dès son exécution, le code détermine son contexte : sur un agent d’intégration continue (CI/CD), il passe directement à l’exfiltration des données ; sur un poste de développement local, il se détache en arrière-plan pour retarder son exécution malveillante. Concrètement, le processus initial se termine immédiatement (donnant l’illusion d’une installation npm normale) tandis qu’un processus fils caché prend le relais quelques secondes plus tard pour poursuivre les étapes suivantes.
- Étape 3 – Collecte et exfiltration des secrets : Le malware procède à un inventaire complet de la machine infectée (système, architecture, nom d’hôte, utilisateur, variables d’environnement, etc.). Il recherche et extrait les identifiants sensibles disponibles : jeton GitHub de l’utilisateur (en réutilisant éventuellement une connexion ou un token stocké), jeton npm (si présent dans ~/.npmrc), ainsi que les secrets de plateformes cloud (il tente par exemple d’interroger les services AWS Secrets Manager, Google Cloud Secret Manager et Azure Key Vault via leurs API, ce qui suppose que la machine dispose de droits d’accès valides à ces environnements). Le programme télécharge et lance également l’outil TruffleHog afin de détecter toute clé privée ou secret figurant dans les fichiers du projet. L’ensemble des données collectées est alors exfiltré vers GitHub : le malware crée via l’API GitHub un nouveau dépôt public sous le compte de la victime (au nom aléatoire, avec la description « Sha1-Hulud: The Second Coming »), puis y enregistre plusieurs fichiers JSON contenant les informations volées (ex. cloud.json, content.json, environment.json, truffleSecrets.json). Toutes ces opérations d’exfiltration utilisent le token GitHub de la victime, ce qui leur permet de passer pour des activités légitimes et d’échapper aux détections classiques (scans de secrets, filtrage d’exfiltration réseau).
- Étape 4 – Persistance et élévation de privilèges : Pour pérenniser son accès, Shai-Hulud implante une porte dérobée dans l’environnement de la victime. Il enregistre d’abord la machine infectée comme runner auto-hébergé auprès de GitHub (sous le nom « SHA1HULUD ») et crée, dans le dépôt GitHub qu’il a ouvert, un workflow Actions malveillant (.github/workflows/discussion.yaml) conçu pour permettre l’exécution de code à distance. Ce workflow se déclenche lors de la création d’une discussion sur le dépôt et contient une vulnérabilité d’injection de commandes : concrètement, si l’attaquant publie un commentaire spécialement formé dans les Discussions, le runner compromis exécutera ce contenu sur la machine victime, donnant à l’attaquant un accès distant ultérieur. En parallèle, le malware tente d’escalader ses privilèges sur la machine locale : s’il détecte que Docker est installé et que l’utilisateur y a accès, il exécute une commande qui monte le système de fichiers hôte dans un conteneur privilégié, afin de copier une entrée malveillante dans la configuration sudoers du système. Cette manipulation lui confère un accès root sans mot de passe sur la machine compromise, assurant un contrôle total persistant même si le compte initial n’était pas administrateur du système.
- Étape 5 – Destruction conditionnelle : En l’absence de certaines conditions d’exfiltration, le malware active une routine destructrice en guise de « représailles ». Si aucun token GitHub ou npm valide n’a pu être obtenu et que la création du dépôt distant a échoué (autrement dit, si toutes les tentatives de vol de secrets et de persistance ont été entravées), Shai-Hulud efface purement et simplement les données de sa cible. Sur les systèmes Linux, il lance par exemple une commande pour supprimer récursivement tous les fichiers du répertoire home de l’utilisateur (avec un shred pour écraser définitivement les contenus). Cette fonctionnalité de wiper ne s’active que dans le scénario d’échec complet de l’exfiltration, mais elle représente une escalade brutale par rapport à la première vague du malware – l’attaquant passant d’une simple collecte de données à un sabotage punitif si le vol d’informations est empêché.
Impact et réactions
Cette attaque touche des projets très variés dans l’écosystème Node.js. Sur la liste initiale de 186 packages compromis recensée par Aikido, figuraient de nombreux modules Zapier, ENS Domains, PostHog, AsyncAPI, ou encore des utilitaires liés à Postman.
Certains de ces packages jouent un rôle crucial : par exemple, les librairies ENS Domains sont employées par des portefeuilles Ethereum, des dApps et l’application ENS Manager pour gérer les noms de domaine .eth (résolution d’adresse, liens IPFS, etc.), tandis que les SDK Zapier constituent la base du développement d’intégrations sur cette plateforme d’automatisation. Au total, les ~492 packages infectés en novembre cumulaient 132 millions de téléchargements mensuels sur npm, ce qui donne une idée de l’ampleur potentielle de l’impact.
Face à la menace, GitHub et npm ont pris des mesures. La plateforme npm a marqué certains packages comme compromis en affichant un avertissement de « publication non autorisée » sur la dernière version malveillante détectée. De son côté, GitHub a activement supprimé des milliers de dépôts publics créés par le malware, même si l’attaquant en générait de nouveaux presque aussi vite. Les équipes de sécurité recommandent aux développeurs et aux organisations touchées de révoquer immédiatement tous les tokens et secrets exposés (GitHub, npm, AWS, GCP, Azure…), de remplacer les packages corrompus par des versions saines, et d’inspecter leurs dépôts à la recherche de workflows ou de comptes suspects laissés par l’attaque.
Ce retour de Shai-Hulud intervient alors que GitHub commence tout juste à déployer des protections supplémentaires pour sécuriser la chaîne d’approvisionnement npm suite à des attaques précédentes – un processus graduel qui ne suffira pas à enrayer instantanément ce type de menace sophistiquée.
Sources :
BleepingComputer – Bill Toulas (24 Nov 2025): “Shai-Hulud malware infects 500 npm packages, leaks secrets on GitHub”
Koi Security – Yuval Ronen & Idan Dardikman (24 Nov 2025): “Live Updates: Sha1-Hulud, The Second Coming – Hundreds of NPM Packages Compromised”
Step Security – Ashish Kurmi (23 Nov 2025): “Sha1-Hulud: The Second Coming – Zapier, ENS Domains, and Other Prominent NPM Packages Compromised”
Aikido Security – Charlie Eriksen (24 Nov 2025): “Shai Hulud Launches Second Supply-Chain Attack: Zapier, ENS, AsyncAPI, PostHog, Postman Compromised”
Wiz Research (24 Nov 2025): “Shai-Hulud 2.0 Supply Chain Attack: 25K+ npm Repos Exposed”
The Hacker News – Ravie Lakshmanan (24 Nov 2025): “Second Sha1-Hulud Wave Affects 25,000+ Repositories via npm Preinstall Credential Theft”



