
Rileva il compromesso della catena di fornitura Mini Shai-Hulud (CVE-2026-45321) — esegue la scansione di 170 pacchetti npm + 2 pacchetti PyPI avvelenati tra TanStack, Mistral AI, UiPath, OpenSearch, Guardrails AI
Uno scanner Bash veloce e senza dipendenze per rilevare se la tua macchina è affetta dall'attacco alla supply chain CVE-2026-45321 "Mini Shai-Hulud".
L'11 maggio 2026, oltre 170 pacchetti npm e 2 pacchetti PyPI attraverso TanStack, Mistral AI, UiPath, OpenSearch e Guardrails AI sono stati avvelenati simultaneamente. Il payload malevolo ruba credenziali AWS, token GitHub, token npm, segreti Vault e chiavi SSH — e include un worm auto-propagante che si diffonde attraverso le pipeline CI/CD.
curl -fsSL https://raw.githubusercontent.com/qi-scape/scan-shai-hulud/main/scan-shai-hulud.sh | bash
Oppure clona ed esegui:
git clone https://github.com/qi-scape/scan-shai-hulud.git
cd scan-shai-hulud
chmod +x scan-shai-hulud.sh
./scan-shai-hulud.sh
# Scan current directory + system-wide persistence checks
./scan-shai-hulud.sh
# Scan a specific project
./scan-shai-hulud.sh ~/my-project
# Deep scan across entire home directory
./scan-shai-hulud.sh --full
Lo scanner esegue 8 fasi:
170 pacchetti npm su 15 scope:
react-router, vue-router, solid-router, router-core, ecc.)mistralai, mistralai-azure, mistralai-gcpopensearchagentwork-cli, cmux-agent-mcp, cross-stitch, , , , , , , 2 pacchetti PyPI:
mistralai==2.4.6guardrails-ai==0.10.1Se lo scanner segnala risultati CRITICI:
ghp_*, gho_*, ghs_*), token npm, token Vault, chiavi SSH, token dei service account Kubernetesnpm cache clean --force && rm -rf node_modules && npm installlaunchctl unload ~/Library/LaunchAgents/com.user.gh-token-monitor.plist2026-05-11T19:20Znpm access ls-packagesfind, grep, shasum)mdfind (macOS Spotlight, per ricerca file più veloce)npm, pip (per verifica pacchetti/token)git (per verifica repository)lsof (per verifica connessioni di rete)MIT
| Fase | Descrizione |
|---|
| Persistenza | macOS LaunchAgent (file + stato caricato launchctl), servizio systemd Linux, script dead-man's switch, drop payload .claude/ e .vscode/, workflow GitHub Actions iniettati, dropper /tmp |
| File malevoli | router_init.js, tanstack_runner.js, router_runtime.js, gh-token-monitor.sh, transformers.pyz — verificati rispetto a 3 hash SHA-256 noti |
| Indicatori C2 | Scansiona file di configurazione (.npmrc, .bashrc, .zshrc, .env) e sorgenti del progetto per 6 domini C2 + marcatori della campagna |
| Pacchetti npm | Tutti gli alberi node_modules, root globale npm, lockfile (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lock), cache npm — con corrispondenza precisa per pacchetto (42 pacchetti @tanstack router specifici, non l'intero scope) |
| Pacchetti PyPI | pip show in tutti gli ambienti Python/conda + requirements.txt, pyproject.toml, Pipfile, poetry.lock |
| Repository Git | Commit malevolo nella cronologia, rami dead-drop dependabout/*/setup-formatter, autore commit dead-drop, codeql_analysis.yml iniettato |
| Cronologia shell e ambiente | Cronologia Bash/Zsh/Fish per tracce di esecuzione del payload, file RC della shell per iniezioni, variabili d'ambiente per domini C2 |
| Rete e token | Connessioni attive verso C2 tramite lsof, /etc/hosts, ~/.ssh/known_hosts, elenco token npm |
git-branch-selectorgit-git-gitml-toolkit-tsnextmove-mcpsafe-actionts-dnawot-api| Indicatore | Valore |
|---|
| Exfil primario | filev2.getsession.org |
| Semi di sessione | seed{1,2,3}.getsession.org |
| C2 secondario | api.masscan.cloud, git-tanstack.com |
| Staging payload | litter.catbox.moe/h8nc9u.js, litter.catbox.moe/7rrc6l.mjs |
| Commit malevolo | 79ac49eedf774dd4b0cfa308722bc463cfe5885c |