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 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
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.
🔗 Lien avec les attaques précédentes
Cette attaque est directement liée au compromis s1ngularity/Nx d'août 2025, où le vol initial de tokens GitHub a permis l'attaque plus large de la chaîne d'approvisionnement. De nombreuses premières victimes de Shai-Hulud étaient des victimes connues de l'attaque s1ngularity. Les chercheurs en sécurité notent également l'intégration de contenu généré par IA dans la campagne, avec une confiance modérée qu'un LLM a été utilisé pour générer le script bash malveillant.
📅 Chronologie de l'attaque
Campagne Shai-Hulud originale :
26 août 2025 : Compromis s1ngularity/Nx (attaque précurseur)
14 septembre 2025 17h58 UTC : Premier paquet malveillant rxnt-authentication publié (« Patient zéro »)
15 septembre 2025 : Attaque détectée et signalée par des chercheurs en sécurité
15-16 septembre 2025 : Le ver se propage rapidement dans l'écosystème npm
16 septembre 2025 : Plus de 180 paquets confirmés compromis
17 septembre 2025 : Efforts de surveillance et de nettoyage en cours
18 septembre 2025 : Version v1.2.0 avec 200 paquets suivis et outils de prévention améliorés
Campagne Shai-Hulud 2.0 :
21-23 novembre 2025 : Paquets malveillants téléversés dans le registre npm
24 novembre 2025 : Attaque détectée et signalée par Wiz Research et Aikido
24 novembre 2025 : Version v2.0.0 avec plus de 738 paquets suivis et capacités de détection Shai-Hulud 2.0
En cours : GitHub continue de supprimer les dépôts créés par l'attaquant ; l'attaquant continue de créer de nouveaux dépôts
Les scanneurs Python et JavaScript utiliseront automatiquement les données mises à jour
Cette approche centralisée élimine le besoin de mettre à jour plusieurs fichiers lorsque de nouvelles menaces sont découvertes.
Options de déploiement
Pour les équipes de sécurité
root@kitploit:~
# Create central scanning script
curl -O https://your-domain.com/shai_hulud_scanner.py
chmod +x shai_hulud_scanner.py
# Mass scan multiple projects
for dir in /projects/*/; do
echo "Scanning $dir"
python3 shai_hulud_scanner.py "$dir"
done
Intégration CI/CD
root@kitploit:~
# GitHub Actions example
- name: Scan for Shai-Hulud packages
run: |
curl -O https://your-domain.com/shai_hulud_scanner.js
npm install js-yaml
node shai_hulud_scanner.js .
if [ $? -ne 0 ]; then
echo "SECURITY ALERT: Compromised packages detected!"
exit 1
fi
Déploiement entreprise
root@kitploit:~
# Add to security toolkit
cp shai_hulud_scanner.py /usr/local/bin/
cp shai_hulud_scanner.js /usr/local/bin/
cp affected_packages.yaml /usr/local/bin/
# Create alias for easy access
echo 'alias scan-shai="python3 /usr/local/bin/shai_hulud_scanner.py"' >> ~/.bashrc
Notes techniques
Plateformes cibles : Linux, macOS et Windows (Shai-Hulud 2.0 ajoute la prise en charge de Windows)
Taille de la charge utile : Bundle JavaScript minifié de 3 Mo+ (original), nouvelles charges utiles dans Shai-Hulud 2.0
Auto-propagation : Premier ver auto-réplicant réussi dans l'écosystème npm
Phases d'exécution : L'original utilise postinstall, Shai-Hulud 2.0 utilise preinstall (augmente l'exposition dans les environnements de construction)
Sûr : Opérations en lecture seule, aucune modification de vos fichiers
Rapide : Optimisé pour l'analyse rapide de grandes bases de code
Précis : Basé sur les listes officielles d'IoC des chercheurs en sécurité (Wiz Research, Aikido)
Composants générés par IA : Les chercheurs en sécurité évaluent avec une confiance modérée qu'un LLM a été utilisé pour générer des parties du script bash malveillant
Mécanismes de persistance :
Original : Workflows GitHub Actions, branches malveillantes et migrations de dépôts
Shai-Hulud 2.0 : Runners auto-hébergés, workflows basés sur les discussions, workflows de formattage
Intégration cloud :
Original : Cible les environnements AWS et GCP à l'aide des bibliothèques SDK et des points de terminaison IMDS
Shai-Hulud 2.0 : Ciblage multi-cloud (AWS, Azure, GCP) avec SDK officiels, déchargement du gestionnaire de secrets
Indicateurs de Compromission (IoC)
Shai-Hulud original (septembre 2025) :
Hook postinstall malveillant : "postinstall": "node bundle.js" dans package.json
Fichier de charge utile : bundle.js (généralement JavaScript minifié de 3 Mo+)
Point d'exfiltration : Références aux domaines webhook.site
Workflow GitHub : .github/workflows/shai-hulud-workflow.yml pour la persistance
Nommage des dépôts : Dépôts avec suffixes "Shai-Hulud" ou "-migration"
Indicateurs de branches : Branches nommées shai-hulud contenant des commits malveillants
Shai-Hulud 2.0 (novembre 2025) :
Hook preinstall malveillant : "preinstall": "node setup_bun.js" ou "preinstall": "node bun_environment.js" dans package.json
Nouveaux fichiers de charge utile : setup_bun.js, bun_environment.js (en plus de bundle.js)
Fichiers de données : cloud.json, contents.json, environment.json, truffleSecrets.json
Workflows GitHub :
.github/workflows/discussion.yaml (avec runs-on: self-hosted et RUNNER_TRACKING_ID: 0)
.github/workflows/formatter_*.yml (correspondance de motifs, utilisé pour l'exfiltration de secrets)
Runner auto-hébergé : Runner nommé 'SHA1HULUD' enregistré sur les machines infectées
Escalade de privilèges Docker : Commandes comme docker run --rm --privileged -v /:/host
Descriptions de dépôts : Dépôts avec "Shai-Hulud" dans la description
Ciblage multi-cloud : Tentatives d'accès à AWS Secrets Manager, Google Secret Manager, Azure Key Vault
Point d'exfiltration : Références aux domaines webhook.site (identique à l'original)
Commun aux deux variantes :
Point d'exfiltration : Références aux domaines webhook.site
Nommage des dépôts : Dépôts avec "Shai-Hulud" dans le nom ou la description