OreNPMGuard - Scanneur de Paquets Shai-Hulud
Version 2.0.0 - Détection Shai-Hulud 2.0 et Système de Prévention Amélioré
Un outil de sécurité pour détecter les paquets npm compromis lors des attaques de la chaîne d'approvisionnement Shai-Hulud (originale septembre 2025 et Shai-Hulud 2.0 novembre 2025). Analyse les fichiers package.json et package-lock.json pour détecter les versions installées exactes et les Indicateurs de Compromission (IoCs). Disponible en implémentations Python et Node.js avec une configuration YAML centralisée pour une maintenance facile.
Dernière mise à jour : 24 novembre 2025 - 738+ paquets compromis suivis avec 1 291 combinaisons uniques paquet@version. Détecte désormais les variantes d'attaque originales Shai-Hulud et Shai-Hulud 2.0.
Pour l'analyse multi-écosystème, voir ore-mal-pkg-inspector.
🔗 Projets Connexes
Pour l'analyse de paquets malveillants multi-écosystème (npm, PyPI, Maven, RubyGems, Go, Cargo), voir :
ore-mal-pkg-inspector - Scanner complet de paquets malveillants avec renseignement dynamique sur les menaces.
OreNPMGuard se concentre spécifiquement sur la défense contre les attaques Shai-Hulud pour les paquets npm.
🚨 À propos des attaques Shai-Hulud
Shai-Hulud est un ver auto-réplicant qui a commencé à compromettre des paquets npm les 14-15 septembre 2025, représentant la première attaque auto-propagée réussie dans l'écosystème npm et l'une des attaques les plus graves de la chaîne d'approvisionnement JavaScript observées à ce jour. Nommé d'après les vers de sable géants de la série Dune de Frank Herbert, ce malware a évolué en plusieurs variantes.
Shai-Hulud original (septembre 2025)
L'attaque originale a infecté 200+ paquets npm (tels que suivis dans cet outil) avec plusieurs versions affectées par paquet.
Shai-Hulud 2.0 (novembre 2025) - NOUVEAU
Une nouvelle variante est apparue en novembre 2025 avec des changements significatifs :
- 738+ paquets compromis avec 1 291 combinaisons uniques paquet@version
- 25 000+ dépôts affectés à travers ~350 utilisateurs uniques
- Nouvelle phase d'exécution : Utilise des scripts
preinstall (pas seulement postinstall)
- Nouveaux fichiers de charge utile :
setup_bun.js et bun_environment.js (en plus de bundle.js)
- Persistance renforcée : Crée des runners auto-hébergés nommés 'SHA1HULUD' et de nouveaux modèles de workflows GitHub
- Ciblage multi-cloud : Récolte de credentials AWS, Azure et GCP
- Escalade de privilèges Docker : Tente d'obtenir un accès root via des conteneurs privilégiés
- Paquets téléversés entre le 21 et 23 novembre 2025
Référence : Wiz Research - Article de blog sur Shai-Hulud 2.0
Patient zéro : L'attaque a commencé avec le paquet rxnt-authentication publié le 14 septembre 2025 à 17:58:50 UTC par le compte npm compromis "techsupportrxnt".
Chaîne d'attaque (Shai-Hulud original) :
- Installation : Le paquet malveillant exécute un script
postinstall lançant bundle.js (charge utile JavaScript de 3 Mo+)
- Récolte de credentials : Utilise TruffleHog pour rechercher des tokens GitHub/npm, des credentials AWS/GCP/Azure, des variables d'environnement et des clés cloud exposées via IMDS
- Exfiltration de données : Crée un dépôt public "Shai-Hulud" sous le compte GitHub de la victime avec les secrets volés dans
data.json (double encodage base64)
- Persistance : Injecte un workflow GitHub Actions malveillant (
.github/workflows/shai-hulud-workflow.yml) qui exfiltre les secrets du dépôt vers webhook[.]site
- Migration de dépôt : Force les dépôts organisationnels privés à devenir des dépôts personnels publics avec le suffixe "-migration" et la description "Shai-Hulud Migration"
- Propagation du ver : Utilise les tokens npm volés pour injecter un malware dans d'autres paquets maintenus par la victime, en incrémentant les numéros de version et en ajoutant des hooks
postinstall
Chaîne d'attaque (Shai-Hulud 2.0 - novembre 2025) :
- Installation : Le paquet malveillant exécute un script
preinstall lançant setup_bun.js ou bun_environment.js (nouveaux fichiers de charge utile)
- Création de fichiers de données : Crée les fichiers
cloud.json, contents.json, environment.json et truffleSecrets.json
- Récolte de credentials : Ciblage multi-cloud (AWS, Azure, GCP) à l'aide des SDK officiels, récupération de credentials à partir de fichiers de configuration, variables d'environnement et IMDS
- Enregistrement de runner auto-hébergé : Enregistre la machine infectée en tant que runner auto-hébergé nommé 'SHA1HULUD'
- Injection de workflow GitHub :
- Crée
.github/workflows/discussion.yaml avec un runner auto-hébergé pour un accès backdoor
- Crée
.github/workflows/formatter_*.yml pour l'exfiltration de secrets (puis supprime le workflow pour cacher l'activité)
- Escalade de privilèges Docker : Tente d'obtenir un accès root via
docker run --rm --privileged -v /:/host
- Déchargement de secrets cloud : Utilise des sessions authentifiées pour décharger les secrets d'AWS Secrets Manager, Google Secret Manager et Azure Key Vault
- Création de dépôts : Crée des dépôts avec "Shai-Hulud" dans la description pour l'exfiltration
🎯 Ce qui est volé
- Credentials de développement : PATs GitHub (
ghp_*, gho_*), tokens d'authentification npm
- Credentials cloud : Clés d'accès et tokens AWS, GCP, Azure
- Clés API : Credentials Atlassian, Datadog et autres services
- Informations système : Variables d'environnement, détails de l'hôte, comptes utilisateurs
- Code source : Dépôts privés rendus publics ou clonés
📊 Échelle d'impact
Shai-Hulud original (septembre 2025) :
- 200+ paquets compromis dans cette base de données de suivi (y compris des paquets populaires comme
@ctrl/tinycolor, ngx-bootstrap)
- Plusieurs comptes GitHub compromis (le nombre exact varie selon les sources)
- Dépôts publics créés avec le label "Shai-Hulud Migration"
- Développeurs potentiellement affectés via les dépendances de paquets
Shai-Hulud 2.0 (novembre 2025) :
- 738+ paquets compromis avec 1 291 combinaisons uniques paquet@version
- 25 000+ dépôts affectés créés à travers ~350 utilisateurs uniques
- 1 000+ nouveaux dépôts ajoutés toutes les 30 minutes pendant les premières heures de la campagne
- Affecte des paquets de grands écosystèmes : Zapier, ENS Domains, PostHog, Postman, AsyncAPI, etc.
- Vol de credentials multi-cloud (AWS, Azure, GCP)
- Tentatives d'escalade de privilèges Docker
Vol de credentials vérifié (à partir d'environ 20 000 dépôts analysés) :
- 775 tokens d'accès GitHub compromis
- 373 credentials AWS exposés
- 300 credentials GCP exposés
- 115 credentials Azure exposés
⚠️ Avertissement d'exfiltration entre victimes
CRITIQUE : Wiz Research a confirmé que l'exfiltration entre victimes a lieu. Cela signifie :
- Les secrets volés d'une victime peuvent être publiés dans des dépôts appartenant à une victime différente et non liée
- Si vous trouvez des données suspectes dans vos dépôts GitHub, elles peuvent appartenir à un autre utilisateur compromis
- Vos données peuvent avoir été exfiltrées vers des dépôts que vous ne possédez pas
- Cela complique l'attribution et la réponse aux incidents
Implication pour l'enquête : Lors de l'examen des données exfiltrées dans vos dépôts, vérifiez si les données appartiennent réellement à votre organisation ou à une autre victime.