
Scanner per il worm della supply chain npm/PyPI Mini Shai-Hulud (NHS CC-4781 · CVE-2026-45321). Rileva la persistenza di gh-token-monitor, gli artefatti del payload e i commit dell'attaccante. Python, Bash, PowerShell.
Un scanner gratuito e offline per il worm della supply chain npm/PyPI che sta attualmente colpendo i principali pacchetti. Creato dal team di Intrudify. Nessuna registrazione, nessuna telemetria, funziona interamente offline.
NHS CC-4781 · CVE-2026-45321 (CVSS 9.6) · GHSA-g7cv-rxg3-hmpx
Se hai eseguito npm install o pip install nelle ultime settimane, questo fa per te.
Soprattutto se hai avuto a che fare con @tanstack/*, @uipath/*, @mistralai/*, @cap-js/* o con litellm, mistralai, guardrails-ai, o su PyPI. Questi sono i namespace confermati come infetti. In totale 149 pacchetti, oltre 400 versioni dannose tracciate finora.
lightningtelnyxMini Shai-Hulud è il worm che sta causando il danno. Ruba le tue credenziali npm e GitHub, installa meccanismi di persistenza su macOS, Linux e Windows e (la parte che la maggior parte delle persone non nota) lascia dietro di sé un token-trappola. Se lo revochi dalla macchina infetta, attiva rm -rf ~/. La tua home directory, sparita. L'ordine delle operazioni di pulizia è fondamentale.
Questo scanner controlla tutti i 19 indicatori di compromissione noti tra pacchetti, lockfile, meccanismi di persistenza, hash dei payload, traffico C2, cronologia git e ambienti CI. Legge soltanto. Non scrive mai, non cancella e non trasmette dati all'esterno.
Tre script, un unico compito: Python, Bash, PowerShell. Scegli quello più adatto al tuo stack.
Intrudify è il primo penetration tester AI completamente autonomo in Europa per applicazioni web. Il concetto è semplice: gli stessi risultati di un team umano di pentest da 30.000 $, consegnati in ore invece che in settimane, con un report pronto per l'audit e una guida alla remediation passo dopo passo per NIS2, SOC2 e ISO27001. Se pubblichi codice e non hai un team di sicurezza, è proprio il vuoto che colmiamo.
Questo scanner è uno degli elementi di tutto questo. È gratuito perché i worm della supply chain si muovono più velocemente dei cicli di procurement. Uno sviluppatore che alle 23 sta guardando un feed CVE non ha bisogno di una chiamata commerciale. Ha bisogno di uno strumento che giri in 30 secondi e gli dica se è fregato.
Per compromissioni attive (dirottamenti di pipeline CI/CD, abuso di token OIDC di GitHub Actions, incident response sulla supply chain npm/PyPI), contattaci direttamente: [email protected]
Se nelle ultime settimane hai installato un pacchetto npm o PyPI, soprattutto qualcosa da @tanstack/*, @uipath/*, @mistralai/*, @cap-js/* o da PyPI litellm, mistralai, guardrails-ai, lightning o telnyx, la tua macchina potrebbe essere compromessa.
Il worm Mini Shai-Hulud ruba le credenziali, installa meccanismi di persistenza su macOS, Linux e Windows e può cancellare la tua home directory se gestisci la pulizia nell'ordine sbagliato.
Questo scanner controlla tutti i 19 indicatori noti. Legge soltanto. Non scrive mai, non cancella e non invia nulla dalla tua macchina.
Il worm installa un token npm-trappola. Se lo revochi dalla macchina infetta, attiva rm -rf ~/. L'ordine è importante.
Se lo scanner rileva risultati CRITICAL, procedi in questo ordine:
| Se sei su... | Usa questo |
|---|---|
| macOS o Linux | scan_cc4781.sh (o scan_cc4781.py se preferisci Python) |
| Windows | scan_cc4781.ps1 (o scan_cc4781.py con Python nativo) |
| CI / Docker | scan_cc4781.py o scan_cc4781.sh |
# macOS / Linux
chmod +x scan_cc4781.sh
./scan_cc4781.sh --deep
# Windows PowerShell
.\scan_cc4781.ps1 -Deep
# Python (any OS)
python3 scan_cc4781.py --deep
Il flag --deep / -Deep esegue la ricorsione in tutte le node_modules presenti nella directory corrente. Consigliato se hai un monorepo o più progetti.
Se PowerShell blocca lo script:
powershell -ExecutionPolicy Bypass -File .\scan_cc4781.ps1 -Deep
RESULT: 0 CRITICAL / 0 HIGH → you're clean
RESULT: X CRITICAL / Y HIGH → stop and follow the steps above before doing anything else
CRITICAL = indicatore di compromissione confermato. Agisci immediatamente.
HIGH = sospetto. Indaga. Alcuni risultati HIGH sono falsi positivi attesi (vedi sotto).
CC-4781 / Mini Shai-Hulud Supply-Chain Attack Scanner
Host: your-hostname OS: your-os
Checking 149 npm packages (400+ malicious versions), 5 PyPI packages
[OK] gh-token-monitor process not detected
[HIGH] payload-artefact: sysmon.py -> .../coverage/sysmon.py <- false positive: Python coverage package
[HIGH] payload-artefact: execution.js -> .../n8n/.../execution.js <- false positive: n8n
[OK] git-tanstack.com does not resolve
[OK] No malicious optionalDependencies github: references found
[OK] No attacker exfil commits in git log
RESULT: 0 CRITICAL / 4 HIGH
I risultati HIGH sysmon.py ed execution.js sono falsi positivi: i nomi dei file corrispondono a quelli dei payload del worm, ma gli hash SHA-256 non coincidono. Il livello CRITICAL scatta solo quando l'hash corrisponde a un payload confermato come dannoso.
| Flag | Bash / Python | PowerShell | Cosa fa |
|---|---|---|---|
| Scansione profonda | --deep | -Deep | Esegue la ricorsione in tutte le node_modules sotto la directory corrente |
| Directory di destinazione | --npm-dir /path | -NpmDir C:\path | Esegue la scansione di una specifica cartella node_modules |
| Output JSON | --json | -Json | Output leggibile da macchina per SIEM / SOAR |
Formato di output JSON: { "host": "...", "findings": [{ "severity": "CRITICAL|HIGH", "category": "...", "detail": "...", "path": "..." }] }
| # | Categoria | Cosa cerca |
|---|---|---|
| 1 | Versioni npm | 149 pacchetti, oltre 400 versioni esatte confermate come dannose |
| 2 | Lockfile | package-lock.json, pnpm-lock.yaml, yarn.lock |
| 3 | PyPI | litellm, telnyx, lightning, mistralai, guardrails-ai |
| 4 | Persistenza | LaunchAgent macOS, systemd Linux, Scheduled Task di Windows + chiave HKCU Run |
| 5 | Persistenza | hook SessionStart di Claude Code, attività folderOpen di VS Code |
| 6 | File payload | 13 nomi file + SHA-256 confrontati con 11 hash noti come dannosi |
| 7 | Host C2 | 11 domini in /etc/hosts, variabili d'ambiente proxy, WinHTTP |
| 8 | DNS C2 | Risolve tutti gli 11 domini C2 |
| 9 | Connessioni C2 | TCP attivo verso 5 IP C2 monitorati |
| 10 | package.json | iniezione di optionalDependencies github:tanstack/router |
| 11 | package.json | iniezione di prepare: bun run tanstack_runner.js |
| 12 | Workflow | .github/workflows/codeql_analysis.yml, format-check.yml |
| 13 | Git log | Commit di esfiltrazione dell'attaccante ([email protected]) |
| 14 | Branch git | branch del worm a tema Dune, typosquatting dependabout/ |
| 15 | Token npm | rilevamento RANSOM TOKEN |
| 16 | Cronologia della shell | domini C2, IP, nomi dei payload |
| 17 | Ambiente CI | perdita di credenziali di GitHub Actions |
| 18 | Remote Git | account dell'attaccante e domini C2 |
| Onda | Data | Pacchetti | Editore |
|---|---|---|---|
| TanStack | Maggio 2026 | 43 pacchetti @tanstack/* | voicproducoes |
| UiPath / JFrog | Maggio 2026 | 66 pacchetti @uipath/* | voicproducoes / zblgg |
| SAP @cap-js | Aprile 2026 | @cap-js/db-service, @cap-js/sqlite, @cap-js/postgres, mbt | cloudmtabot |
| PyPI | Febbraio--Aprile 2026 | litellm, telnyx, lightning, mistralai, guardrails-ai | vari |
Importante: il superamento di npm audit signatures non significa che sei al sicuro. Mini Shai-Hulud è il primo attacco documentato che genera una provenienza SLSA Build Level 3 valida tramite il dirottamento di una pipeline OIDC di GitHub Actions. Le firme verificano la provenienza della build, non che la pipeline di build stessa fosse pulita.
Il worm usa un'offuscazione a tre livelli: obfuscator.io, poi un cifrario a sostituzione Fisher-Yates (PBKDF2-SHA256, 200.000 iterazioni), quindi AES-256-GCM. Esfiltra le credenziali tramite il CDN del Session Protocol, dead-drop di GitHub GraphQL, un canister blockchain ICP e steganografia WAV.
La persistenza viene installata come LaunchAgent macOS, unità systemd Linux, Scheduled Task Windows o chiave HKCU Run, hook SessionStart di Claude Code, attività folderOpen di VS Code e file di avvio Python .pth. Sui runner CI compromessi installa un DaemonSet Kubernetes.
Il RANSOM TOKEN (IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner) è abbinato a un demone gh-token-monitor che interroga api.github.com/user ogni 60 secondi. Una risposta 40x attiva rm -rf ~/ su Linux/macOS o l'equivalente Windows.
Aggregati da GHSA-g7cv-rxg3-hmpx, JFrog Security Research, StepSecurity, Socket.dev, Wiz Threat Research, Snyk, Aikido Security, Orca Security, Mend.io (al 13-05-2026).
Regole di rilevamento: Sigma 5299fadf-f228-4526-8274-251db1960be9 (Shai-Hulud Malicious Bun Execution), firma Palo Alto ATP 87120.
Intrudify è specializzata in incident response sulla supply chain npm/PyPI, dirottamenti di pipeline CI/CD e abuso di token OIDC di GitHub Actions.
Contatto: [email protected] · intrudify.com
| 19 | Persistenza avanzata | mimetizzazione del servizio sysmon/pgmon, litellm_init.pth, DaemonSet Kubernetes, steganografia WAV |