
Scanner für den Mini-Shai-Hulud-npm/PyPI-Lieferkettenwurm (NHS CC-4781 · CVE-2026-45321). Erkennt gh-token-monitor-Persistenz, Payload-Artefakte und Angreifer-Commits. Python, Bash, PowerShell.
Ein kostenloser Offline-Scanner für den npm/PyPI-Supply-Chain-Wurm, der sich gerade durch große Pakete frisst. Entwickelt vom Intrudify-Team. Keine Anmeldung, keine Telemetrie, läuft vollständig offline.
NHS CC-4781 · CVE-2026-45321 (CVSS 9.6) · GHSA-g7cv-rxg3-hmpx
Wenn du in den letzten Wochen npm install oder pip install ausgeführt hast, ist das hier für dich.
Besonders, wenn du @tanstack/*, @uipath/*, @mistralai/*, @cap-js/* oder PyPIs litellm, mistralai, guardrails-ai, oder verwendet hast. Das sind die bestätigt vergifteten Namensräume. Insgesamt 149 Pakete, bisher 400+ bösartige Versionen erfasst.
lightningtelnyxMini Shai-Hulud ist der Wurm, der den Schaden anrichtet. Er stiehlt deine npm- und GitHub-Zugangsdaten, installiert Persistenzmechanismen auf macOS, Linux und Windows und hinterlässt – der Teil, den die meisten übersehen – ein mit einer Falle versehenes Token. Widerrufst du es von der infizierten Maschine aus, löst das rm -rf ~/ aus. Dein Home-Verzeichnis ist weg. Die Reihenfolge der Bereinigung ist entscheidend.
Dieser Scanner prüft alle 19 bekannten Indikatoren einer Kompromittierung über Pakete, Lockfiles, Persistenzmechanismen, Payload-Hashes, C2-Verkehr, Git-History und CI-Umgebungen hinweg. Er liest nur. Er schreibt nichts, löscht nichts und sendet keine Daten nach außen.
Drei Skripte, eine Aufgabe: Python, Bash, PowerShell. Wähle das, das zu deinem Stack passt.
Intrudify ist Europas erster vollständig autonomer KI-Pentester für Webanwendungen. Das Konzept ist einfach: die gleichen Ergebnisse wie ein menschliches Pentest-Team für 30.000 $, geliefert in Stunden statt Wochen, mit prüfungsfertigem Bericht und Schritt-für-Schritt-Anleitung zur Behebung für NIS2, SOC2 und ISO27001. Wenn du Code auslieferst und kein Sicherheitsteam hast, schließen wir genau diese Lücke.
Dieser Scanner ist ein Teil davon. Er ist kostenlos, weil Supply-Chain-Würmer sich schneller bewegen als Beschaffungszyklen. Ein Entwickler, der um 23 Uhr auf einen CVE-Feed starrt, braucht keinen Vertriebsanruf. Er braucht ein Werkzeug, das in 30 Sekunden läuft und ihm sagt, ob es ihn erwischt hat.
Bei aktiven Kompromittierungen (CI/CD-Pipeline-Entführungen, Missbrauch von GitHub-Actions-OIDC-Tokens, npm/PyPI-Supply-Chain-Incident-Response) wende dich direkt an: [email protected]
Wenn du in den letzten Wochen ein npm- oder PyPI-Paket installiert hast, insbesondere etwas von @tanstack/*, @uipath/*, @mistralai/*, @cap-js/* oder PyPIs litellm, mistralai, guardrails-ai, lightning oder telnyx, ist deine Maschine möglicherweise kompromittiert.
Der Mini-Shai-Hulud-Wurm stiehlt Zugangsdaten, installiert Persistenzmechanismen auf macOS, Linux und Windows und kann dein Home-Verzeichnis löschen, wenn du die Bereinigung in der falschen Reihenfolge durchführst.
Dieser Scanner prüft alle 19 bekannten Indikatoren. Er liest nur. Er schreibt nichts, löscht nichts und sendet nichts von deiner Maschine nach außen.
Der Wurm platziert ein mit einer Falle versehenes npm-Token. Widerrufst du es von der infizierten Maschine aus, löst das rm -rf ~/ aus. Die Reihenfolge ist entscheidend.
Wenn der Scanner KRITISCHE Befunde findet, gehe in dieser Reihenfolge vor:
| Du bist auf... | Verwende das |
|---|---|
| macOS oder Linux | scan_cc4781.sh (oder scan_cc4781.py, wenn du Python bevorzugst) |
| Windows | scan_cc4781.ps1 (oder scan_cc4781.py mit nativem Python) |
| CI / Docker | scan_cc4781.py oder 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
Das Flag --deep / -Deep durchsucht rekursiv alle node_modules unter dem aktuellen Verzeichnis. Empfohlen, wenn du ein Monorepo oder mehrere Projekte hast.
Falls PowerShell das Skript blockiert:
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 = bestätigter Kompromittierungsindikator. Sofort handeln.
HIGH = verdächtig. Untersuchen. Einige HIGH-Befunde sind erwartete Fehlalarme (siehe unten).
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
Die HIGH-Befunde sysmon.py und execution.js sind Fehlalarme: Die Dateinamen entsprechen den Payload-Namen des Wurms, aber die SHA-256-Hashes stimmen nicht überein. CRITICAL wird nur ausgelöst, wenn der Hash mit einer bestätigt bösartigen Payload übereinstimmt.
| Flag | Bash / Python | PowerShell | Funktion |
|---|---|---|---|
| Tiefenscan | --deep | -Deep | Durchsucht rekursiv alle node_modules unter dem aktuellen Arbeitsverzeichnis |
| Zielverzeichnis | --npm-dir /path | -NpmDir C:\path | Scannt einen bestimmten node_modules-Ordner |
| JSON-Ausgabe | --json | -Json | Maschinenlesbare Ausgabe für SIEM / SOAR |
JSON-Ausgabeformat: { "host": "...", "findings": [{ "severity": "CRITICAL|HIGH", "category": "...", "detail": "...", "path": "..." }] }
| # | Kategorie | Worauf geprüft wird |
|---|---|---|
| 1 | npm-Versionen | 149 Pakete, 400+ bestätigt bösartige exakte Versionen |
| 2 | Lockfiles | package-lock.json, pnpm-lock.yaml, yarn.lock |
| 3 | PyPI | litellm, telnyx, lightning, mistralai, guardrails-ai |
| 4 | Persistenz | macOS LaunchAgent, Linux systemd, Windows Scheduled Task + HKCU-Run-Key |
| 5 | Persistenz | Claude-Code-SessionStart-Hook, VS-Code-folderOpen-Task |
| 6 | Payload-Dateien | 13 Dateinamen + SHA-256 gegen 11 bekannte bösartige Hashes |
| 7 | C2-Hosts | 11 Domains in /etc/hosts, Proxy-Umgebungsvariablen, WinHTTP |
| 8 | C2-DNS | Löst alle 11 C2-Domains auf |
| 9 | C2-Verbindungen | Aktive TCP-Verbindungen zu 5 erfassten C2-IPs |
| 10 | package.json | Injection von optionalDependencies github:tanstack/router |
| 11 | package.json | Injection von prepare: bun run tanstack_runner.js |
| 12 | Workflows | .github/workflows/codeql_analysis.yml, format-check.yml |
| 13 | Git-Log | Exfiltrations-Commits des Angreifers ([email protected]) |
| 14 | Git-Branches | Dune-bezogene Wurm-Branches, dependabout/-Typosquatting |
| 15 | npm-Tokens | RANSOM-TOKEN-Erkennung |
| 16 | Shell-History | C2-Domains, IPs, Payload-Dateinamen |
| 17 | CI-Umgebung | Leck von GitHub-Actions-Anmeldedaten |
| 18 | Git-Remotes | Angreiferkonten und C2-Domains |
| Welle | Datum | Pakete | Publisher |
|---|---|---|---|
| TanStack | Mai 2026 | 43 @tanstack/*-Pakete | voicproducoes |
| UiPath / JFrog | Mai 2026 | 66 @uipath/*-Pakete | voicproducoes / zblgg |
| SAP @cap-js | April 2026 | @cap-js/db-service, @cap-js/sqlite, @cap-js/postgres, mbt | cloudmtabot |
| PyPI | Feb–April 2026 | litellm, telnyx, lightning, mistralai, guardrails-ai | verschiedene |
Wichtig: Ein erfolgreiches npm audit signatures bedeutet nicht, dass du sicher bist. Mini Shai-Hulud ist der erste dokumentierte Angriff, der über eine GitHub-Actions-OIDC-Pipeline-Entführung gültige SLSA-Build-Level-3-Provenienz erzeugt. Signaturen verifizieren die Build-Provenienz, nicht dass die Build-Pipeline selbst sauber war.
Der Wurm verwendet eine dreischichtige Verschleierung: obfuscator.io, dann eine Fisher-Yates-Substitutions-Chiffre (PBKDF2-SHA256, 200.000 Iterationen), dann AES-256-GCM. Er exfiltriert Zugangsdaten über das Session-Protocol-CDN, GitHub-GraphQL-Dead-Drops, einen ICP-Blockchain-Canister und WAV-Steganografie.
Die Persistenz wird als macOS-LaunchAgent, Linux-systemd-Unit, Windows-Scheduled-Task oder HKCU-Run-Key, Claude-Code-SessionStart-Hook, VS-Code-folderOpen-Task und Python-.pth-Startdatei installiert. Auf kompromittierten CI-Runnern installiert er ein Kubernetes-DaemonSet.
Das RANSOM-TOKEN (IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner) ist mit einem gh-token-monitor-Daemon gekoppelt, der alle 60 Sekunden api.github.com/user abfragt. Eine 40x-Antwort löst auf Linux/macOS rm -rf ~/ aus – oder das Windows-Äquivalent.
Aggregiert aus GHSA-g7cv-rxg3-hmpx, JFrog Security Research, StepSecurity, Socket.dev, Wiz Threat Research, Snyk, Aikido Security, Orca Security, Mend.io (Stand: 2026-05-13).
Erkennungsregeln: Sigma 5299fadf-f228-4526-8274-251db1960be9 (Shai-Hulud Malicious Bun Execution), Palo-Alto-ATP-Signatur 87120.
Intrudify ist spezialisiert auf npm/PyPI-Supply-Chain-Incident-Response, CI/CD-Pipeline-Entführungen und den Missbrauch von GitHub-Actions-OIDC-Tokens.
Kontakt: [email protected] · intrudify.com
| 19 |
| Erweiterte Persistenz |
sysmon/pgmon-Service-Tarnung, litellm_init.pth, Kubernetes-DaemonSet, WAV-Steganografie |