- Sur le registre NPM, plus de 1 000 composants ont été infectés en quelques heures selon la même méthode, et de nouvelles versions contenant du code malveillant ont été publiées
- Les paquets malveillants se faisaient passer pour un script d’installation du runtime Bun, en ajoutant
setup_bun.js et bun_environment.js obfusqué ; à l’exécution, ils utilisaient TruffleHog pour voler des identifiants locaux
- Les informations sensibles collectées, dont des tokens AWS/GCP/Azure, GitHub et NPM, étaient exfiltrées via un runner GitHub Action nommé
SHA1HULUD
- Le script malveillant exécutait automatiquement
npm publish afin d’assurer une auto-réplication de type ver, ce qui a abouti à l’infection de plus de 27 000 dépôts GitHub
- Le cas est considéré comme un nouvel exemple mettant en lumière la menace sur la sécurité de la supply chain dans tout l’écosystème open source
Vue d’ensemble de l’attaque
- Le 24 novembre 2025, HelixGuard a détecté sur le registre NPM plus de 1 000 paquets infectés en quelques heures selon le même mode opératoire
- Les nouvelles versions se présentaient comme ajoutant le runtime Bun et incluaient le script
preinstall: node setup_bun.js
- Le fichier
bun_environment.js, distribué avec elles, contenait un code malveillant obfusqué qui téléchargeait et exécutait TruffleHog
- TruffleHog scannait l’environnement local pour voler des tokens NPM, identifiants AWS/GCP/Azure et variables d’environnement
- Les informations dérobées étaient exfiltrées en créant un runner GitHub Action
SHA1HULUD, puis via un dépôt GitHub portant la description Sha1-Hulud: The Second Coming.
- HelixGuard estime que cette attaque pourrait être l’œuvre du même acteur que dans l’incident « Shai-Hulud » survenu en septembre 2025
Analyse du fonctionnement du code malveillant
- L’analyse du paquet
@asyncapi/specs, pris comme exemple, montre que la version publiée sur NPM était infectée, alors que le dépôt source sur GitHub restait sain
- L’attaquant a modifié
package.json pour ajouter setup_bun.js, puis a configuré ce script pour appeler bun_environment.js
bun_environment.js est un fichier JavaScript fortement obfusqué de plus de 10 Mo, dont les fonctions principales sont les suivantes
- collecte d’identifiants cloud et de tokens à partir des variables d’environnement
- scan de secrets avec TruffleHog
- exfiltration de données via GitHub Actions
- Le code modifiait aussi
package.json pour y injecter l’infection, puis exécutait automatiquement npm publish afin d’assurer une propagation de type ver
Infection de GitHub et exfiltration de données
- Le script malveillant créait le fichier
.github/workflows/formatter_123456789.yml et enregistrait le runner SHA1HULUD
- Ce workflow empaquetait les secrets du dépôt dans un fichier
actionsSecrets.json, encodé en Base64 deux fois
- Il créait ensuite un dépôt GitHub au nom aléatoire avec la description
Sha1-Hulud: The Second Coming. pour y téléverser les données
- HelixGuard a confirmé que plus de 27 000 dépôts GitHub avaient été infectés
- Parmi les secrets dérobés figuraient des identifiants de nombreux services, dont
AWS_ACCESS_KEY_ID, SLACK_WEBHOOK_URL, CODECOV_TOKEN et WEBFLOW_TOKEN
Liste des paquets infectés
- HelixGuard a signalé l’infection de centaines de paquets NPM
- Parmi eux, des paquets d’organisations majeures comme
@asyncapi, @ensdomains, @posthog, @zapier, @postman et @voiceflow
- Plusieurs versions de chaque paquet ont été touchées, par exemple
@asyncapi/specs@6.8.2 et @postman/csv-parse@4.0.5
- La plupart de ces paquets usurpaient l’apparence de projets open source légitimes, avec du code malveillant injecté dans le processus de déploiement automatisé
Enjeux de sécurité
- Cette attaque illustre comment des failles de sécurité de la supply chain peuvent être exploitées pour contaminer à grande échelle l’écosystème open source
- Elle met en évidence la nécessité de renforcer la sécurité de l’ensemble de l’infrastructure de développement, notamment autour de NPM, GitHub et des identifiants cloud
- HelixGuard recommande d’interrompre immédiatement l’installation des paquets infectés et de révoquer sans délai les tokens et identifiants concernés
Aucun commentaire pour le moment.