
Scanner pour le ver de chaîne d'approvisionnement npm/PyPI Mini Shai-Hulud (NHS CC-4781 · CVE-2026-45321). Détecte la persistance gh-token-monitor, les artefacts de payload et les commits d'attaquants. Python, Bash, PowerShell.
Un scanner gratuit et hors ligne pour le ver de la chaîne d'approvisionnement npm/PyPI qui ravage actuellement les principaux packages. Développé par l'équipe Intrudify. Pas d'inscription, pas de télémétrie, fonctionne entièrement hors ligne.
NHS CC-4781 · CVE-2026-45321 (CVSS 9.6) · GHSA-g7cv-rxg3-hmpx
Si vous avez exécuté npm install ou pip install ces dernières semaines, ceci est pour vous.
Surtout si vous avez touché à @tanstack/*, @uipath/*, @mistralai/*, @cap-js/*, ou aux packages PyPI litellm, mistralai, guardrails-ai, lightning, ou telnyx. Ce sont les espaces de noms confirmés comme empoisonnés. 149 packages au total, plus de 400 versions malveillantes suivies à ce jour.
Mini Shai-Hulud est le ver qui cause les dégâts. Il vole vos identifiants npm et GitHub, installe une persistance sur macOS, Linux et Windows, et (la partie que la plupart des gens manquent) laisse derrière lui un token piégé. Si vous le révoquez depuis la machine infectée, cela déclenche rm -rf ~/. Votre répertoire personnel, disparu. L'ordre du nettoyage compte.
Ce scanner vérifie les 19 indicateurs de compromission connus dans les packages, les lockfiles, les mécanismes de persistance, les empreintes de payloads, le trafic C2, l'historique git et les environnements CI. Il ne fait que lire. Il n'écrit jamais, ne supprime rien et ne téléphone pas à la maison.
Trois scripts, un seul objectif : Python, Bash, PowerShell. Choisissez celui qui correspond à votre stack.
Intrudify est le premier pentesteur IA entièrement autonome d'Europe pour les applications web. L'idée est simple : le même résultat qu'une équipe de pentest humain à 30 000 $, livré en heures au lieu de semaines, avec un rapport prêt pour l'audit et des conseils de correction pas à pas pour NIS2, SOC2 et ISO27001. Si vous livrez du code et que vous n'avez pas d'équipe de sécurité, c'est le fossé que nous comblons.
Ce scanner en fait partie. Il est gratuit parce que les vers de chaîne d'approvisionnement avancent plus vite que les cycles d'achat. Un développeur qui regarde un flux CVE à 23h n'a pas besoin d'un appel commercial. Il a besoin d'un outil qui s'exécute en 30 secondes et lui dit s'il est cuit.
Pour les compromissions actives (détournements de pipeline CI/CD, abus de token OIDC GitHub Actions, réponse à incident sur la chaîne d'approvisionnement npm/PyPI), contactez-nous directement : [email protected]
Si vous avez installé un package npm ou PyPI ces dernières semaines, surtout quelque chose provenant de @tanstack/*, @uipath/*, @mistralai/*, @cap-js/*, ou des packages PyPI litellm, mistralai, guardrails-ai, lightning, ou telnyx, votre machine peut être compromise.
Le ver Mini Shai-Hulud vole des identifiants, installe une persistance sur macOS, Linux et Windows, et peut effacer votre répertoire personnel si vous gérez le nettoyage dans le mauvais ordre.
Ce scanner vérifie les 19 indicateurs connus. Il ne fait que lire. Il n'écrit jamais, ne supprime rien et n'envoie rien depuis votre machine.
Le ver place un token npm piégé. Le révoquer depuis la machine infectée déclenche rm -rf ~/. L'ordre compte.
Si le scanner trouve des résultats CRITIQUES, faites ceci dans l'ordre :
| Vous êtes sur... |
|---|
# macOS / Linux
chmod +x scan_cc4781.sh
./scan_cc4781.sh --deep
# Windows PowerShell
.\scan_cc4781.ps1 -Deep
# Python (tout OS)
python3 scan_cc4781.py --deep
Le flag --deep / -Deep parcourt récursivement tous les node_modules sous le répertoire courant. Recommandé si vous avez un monorepo ou plusieurs projets.
Si PowerShell bloque le script :
powershell -ExecutionPolicy Bypass -File .\scan_cc4781.ps1 -Deep
RESULT : 0 CRITICAL / 0 HIGH → vous êtes propre
RESULT : X CRITICAL / Y HIGH → arrêtez-vous et suivez les étapes ci-dessus avant de faire quoi que ce soit d'autre
CRITICAL = indicateur de compromission confirmé. Agissez immédiatement.
HIGH = suspect. Enquêtez. Certains résultats HIGH sont des faux positifs attendus (voir ci-dessous).
CC-4781 / Scanner d'attaque de chaîne d'approvisionnement Mini Shai-Hulud
Hôte : votre-nom-d-hôte OS : votre-os
Vérification de 149 packages npm (plus de 400 versions malveillantes), 5 packages PyPI
[OK] processus gh-token-monitor non détecté
[HIGH] artefact-payload : sysmon.py -> .../coverage/sysmon.py <- faux positif : package Python coverage
[HIGH] artefact-payload : execution.js -> .../n8n/.../execution.js <- faux positif : n8n
[OK] git-tanstack.com ne résout pas
[OK] Aucune référence github: malicious dans optionalDependencies trouvée
[OK] Aucun commit d'exfiltration de l'attaquant dans le log git
RESULT : 0 CRITICAL / 4 HIGH
Les résultats HIGH pour sysmon.py et execution.js sont des faux positifs : les noms de fichiers correspondent aux noms des payloads du ver, mais les empreintes SHA-256 ne correspondent pas. CRITICAL ne se déclenche que lorsque l'empreinte correspond à un payload confirmé malveillant.
Format de sortie JSON : { "host": "...", "findings": [{ "severity": "CRITICAL|HIGH", "category": "...", "detail": "...", "path": "..." }] }
Important : npm audit signatures qui réussit ne signifie pas que vous êtes en sécurité. Mini Shai-Hulud est la première attaque documentée générant une provenance valide SLSA Build Level 3 via un détournement de pipeline GitHub Actions OIDC. Les signatures vérifient la provenance de la build, pas que le pipeline de build lui-même était sain.
Le ver utilise une obfuscation à trois couches : obfuscator.io, puis un chiffre de substitution Fisher-Yates (PBKDF2-SHA256, 200 000 itérations), puis AES-256-GCM. Il exfiltre les identifiants via le CDN Session Protocol, des boîtes aux lettres mortes GitHub GraphQL, un canister de blockchain ICP et de la stéganographie WAV.
La persistance est installée sous forme de LaunchAgent macOS, unité systemd Linux, tâche planifiée Windows ou clé HKCU Run, hook SessionStart de Claude Code, tâche folderOpen de VS Code et fichier de démarrage Python .pth. Sur les runners CI compromis, il installe un DaemonSet Kubernetes.
Le TOKEN DE RANÇON (IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner) est associé à un démon gh-token-monitor qui interroge api.github.com/user toutes les 60 secondes. Une réponse 40x déclenche rm -rf ~/ sur Linux/macOS ou l'équivalent Windows.
Aggrégées depuis GHSA-g7cv-rxg3-hmpx, JFrog Security Research, StepSecurity, Socket.dev, Wiz Threat Research, Snyk, Aikido Security, Orca Security, Mend.io (au 13/05/2026).
Règles de détection : Sigma 5299fadf-f228-4526-8274-251db1960be9 (Exécution malveillante de Bun par Shai-Hulud), signature Palo Alto ATP 87120.
Intrudify se spécialise dans la réponse aux incidents sur la chaîne d'approvisionnement npm/PyPI, les détournements de pipeline CI/CD et l'abus de token OIDC GitHub Actions.
Contact : [email protected] · intrudify.com
| Utilisez ceci |
|---|
| macOS ou Linux | scan_cc4781.sh (ou scan_cc4781.py si vous préférez Python) |
| Windows | scan_cc4781.ps1 (ou scan_cc4781.py avec Python natif) |
| CI / Docker | scan_cc4781.py ou scan_cc4781.sh |
| Flag | Bash / Python | PowerShell | Ce qu'il fait |
|---|
| Analyse approfondie | --deep | -Deep | Parcourt tous les node_modules sous le répertoire courant |
| Répertoire cible | --npm-dir /chemin | -NpmDir C:\chemin | Analyse un dossier node_modules spécifique |
| Sortie JSON | --json | -Json | Sortie lisible par machine pour SIEM / SOAR |
| # | Catégorie | Ce qu'il recherche |
|---|
| 1 | Versions npm | 149 packages, plus de 400 versions exactes confirmées malveillantes |
| 2 | Fichiers de verrouillage | package-lock.json, pnpm-lock.yaml, yarn.lock |
| 3 | PyPI | litellm, telnyx, lightning, mistralai, guardrails-ai |
| 4 | Persistance | LaunchAgent macOS, systemd Linux, Tâche planifiée Windows + clé HKCU Run |
| 5 | Persistance | Hook SessionStart de Claude Code, tâche folderOpen de VS Code |
| 6 | Fichiers payload | 13 noms de fichiers + SHA-256 contre 11 empreintes connues comme mauvaises |
| 7 | Hôtes C2 | 11 domaines dans /etc/hosts, variables d'environnement proxy, WinHTTP |
| 8 | DNS C2 | Résout les 11 domaines C2 |
| 9 | Connexions C2 | TCP actif vers 5 IP C2 suivies |
| 10 | package.json | Injection optionalDependencies github:tanstack/router |
| 11 | package.json | Injection prepare: bun run tanstack_runner.js |
| 12 | Workflows | .github/workflows/codeql_analysis.yml, format-check.yml |
| 13 | Log git | Commits d'exfiltration de l'attaquant ([email protected]) |
| 14 | Branches git | Branches du ver à thème Dune, typosquat dependabout/ |
| 15 | Tokens npm | Détection du TOKEN DE RANÇON |
| 16 | Historique du shell | Domaines C2, IP, noms de fichiers payload |
| 17 | Environnement CI | Fuite d'identifiants GitHub Actions |
| 18 | Remote git | Comptes attaquants et domaines C2 |
| 19 | Persistance avancée | Déguisement de service sysmon/pgmon, litellm_init.pth, DaemonSet Kubernetes, stéganographie WAV |
| Vague | Date | Packages | Éditeur |
|---|
| TanStack | Mai 2026 | 43 packages @tanstack/* | voicproducoes |
| UiPath / JFrog | Mai 2026 | 66 packages @uipath/* | voicproducoes / zblgg |
| SAP @cap-js | Avril 2026 | @cap-js/db-service, @cap-js/sqlite, @cap-js/postgres, mbt | cloudmtabot |
| PyPI | Fév–Avril 2026 | litellm, telnyx, lightning, mistralai, guardrails-ai | divers |