
Erkennt CVE-2026-45321 (TanStack-Lieferkettenkompromittierung) und Mini-Shai-Hulud-Wurm-Artefakte. Scannt node_modules, Lockfiles, Persistenz-Hooks (Claude Code, VS Code, systemd, LaunchAgent), GitHub-Workflows, Git-Verlauf, C2-Domains und KI-Tool-Konfigurationen.
⚠️ Haftungsausschluss: Dieses Tool wurde für meinen eigenen Anwendungsfall erstellt. Alle Indikatoren stammen aus folgenden Quellen:
Sollten nach der letzten Aktualisierung neue IOCs, Payload-Varianten oder Angreifer-Infrastruktur auftauchen, werden diese nicht erkannt. Quervergleiche mit den neuesten veröffentlichten Advisories sind immer erforderlich.
Erkennt die TanStack-Lieferkettenkompromittierung (CVE-2026-45321) und zugehörige Mini-Shai-Hulud-Wurm-Artefakte in einem lokalen Projekt-Checkout.
Das Skript ist für schnelle Triage in Source-Checkouts, CI-Jobs und Docker-Builds gedacht. Ein sauberes Ergebnis bedeutet, dass keiner der unten genannten bekannten Indikatoren gefunden wurde. Es ist keine vollständige forensische Untersuchung oder Garantie, dass eine Maschine nie exponiert war.
| Kategorie | Details |
|---|
| Kompromittierte Pakete | Alle 42 @tanstack/*-Pakete + 20 durch den Wurm propagierte sekundäre Opfer (@mistralai, @opensearch-project, @draftlab, safe-action, usw.) |
| Lockfile-Scan | pnpm-lock.yaml, yarn.lock, bun.lock, bun.lockb, package-lock.json, einschließlich mehrzeiliger npm v3 packages-Einträge und Yarn v1 Selector/Version-Strophen |
| Payload-Dateien | router_init.js, tanstack_runner.js in node_modules mit SHA-256-Überprüfung; exakte Hash-Übereinstimmungen und Hash-Abweichungen führen beide zu einem Fehlschlag des Scans |
| Infektionsvektor | @tanstack/setup als optionalDependency in einem installierten Paket |
| Persistenz | Claude Code SessionStart-Hooks sowohl in Projekt- als auch in Home-Einstellungen, VS Code folderOpen-Tasks, gh-token-monitor (LaunchAgent + systemd), bösartige GitHub-Workflows |
| Datenträger-Artefakte | .claude/router_runtime.js, .claude/setup.mjs, .vscode/setup.mjs, gh-token-monitor.sh, com.user.gh-token-monitor.plist |
| Source-IOCs | Angreifer-Commit-Hashes, C2-Domains (api.masscan.cloud, git-tanstack.com), Session-Protocol-Endpunkte, PBKDF2-Salt, Kampagnen-Strings |
| Git-Verlauf | Commits, die von [email protected] verfasst wurden |
| Branch-Muster | dependabot/github_actions/format/* und dependabout/*/setup-formatter |
| KI-Tool-Konfigurationen | Manipulierte .claude/mcp.json und .kiro/settings/mcp.json |
| Laufende Prozesse | Daemonisierte Payload- und gh-token-monitor-Prozesse |
| npm-Tokens | Mit Lösegeld markierte Tokens (IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner) |
pnpm, yarn, bun, dann npm) ausgewählt. Wenn ein Repository absichtlich mehrere Lockfiles enthält, scannen Sie jeden relevanten Paketmanager-Zustand separat.npm verfügbar und ausreichend authentifiziert ist, um npm token list auszuführen.HOME des Prozesses, der das Skript ausführt. In CI oder Containern kann dies von einem Entwickler-Workstation-Home-Verzeichnis abweichen.# Aktuelles Verzeichnis scannen
bash check-tanstack-compromise.sh .
# Ein bestimmtes Projekt scannen
bash check-tanstack-compromise.sh /pfad/zum/projekt
# Einzeiler (curl)
curl -sL https://raw.githubusercontent.com/ry-allan/tanstack-compromise-checker/main/check-tanstack-compromise.sh | bash
Exit-Code 0 = keine abgedeckten Indikatoren gefunden.
Exit-Code 1 = abgedeckter Kompromittierungs- oder verdächtiger Payload-Indikator gefunden.
═══════════════════════════════════════════════════════════════
TanStack Supply Chain Compromise Check (CVE-2026-45321)
═══════════════════════════════════════════════════════════════
Advisory: GHSA-g7cv-rxg3-hmpx
Referenz: https://snyk.io/blog/tanstack-npm-packages-compromised/
Tiefergehende Analyse: https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-…
[*] Scanne: /Users/xxxxx/repos/xxxxx
[*] Paketmanager: pnpm (pnpm-lock.yaml)
[*] Prüfe installierte TanStack-Pakete gegen 42 bekannte kompromittierte Versionen…
[*] Prüfe durch Wurm propagierte sekundäre Opfer (Mini Shai-Hulud)…
[*] Pakete: @mistralai, @opensearch-project, @draftlab, @draftauth,
[*] @dirigible-ai, safe-action, cmux-agent-mcp, nextmove-mcp,
[*] git-git-git, git-branch-selector, agentwork-cli, ml-toolkit-ts,
[*] wot-api, cross-stitch, ts-dna
[*] Scanne Lockfile auf bekannte kompromittierte Versionen (pnpm-lock.yaml)…
[✓] Keine kompromittierten Versionen in der Lockfile
[*] Prüfe auf Persistenz-Artefakte (Payload-Dateien, Hooks, Dienste, C2)…
[✓] Keine bösartigen Author-Commits im Git-Verlauf
───────────────────────────────────────────────────────────────
[✓] Keine Kompromittierung erkannt.
Installieren Sie Aikido Safe Chain, um automatisch jede Paketinstallation auf Schadsoftware zu scannen:
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/latest/download/install-safe-chain.sh | sh
Starten Sie danach Ihr Terminal neu. Safe Chain umschließt npm, npx, yarn, pnpm, pip, uv und mehr – und blockiert Pakete, die jünger als 48 Stunden sind, sowie bekannte schlechte Versionen, bevor sie die Festplatte berühren. Keine Tokens oder Konfiguration erforderlich.
Das Integration-Dockerfile erstellt nur synthetische Fixtures. Es werden keine echten kompromittierten Pakete heruntergeladen.
Das Haupt-Fixture stellt sicher, dass alle 33 Erkennungsmeldungen über Paketmanifeste, Lockfiles, Persistenz-Artefakte, Workflows, Git-Verlauf, Source-IOCs, Payload-Dateinamen, KI-Tool-Konfigurationen und Remediation-Ausgabe ausgelöst werden:
docker build -f integration.Dockerfile -t tanstack-check-test .
Der Docker-Build enthält auch gezielte Regressionsabdeckung für:
package-lock.json v3-Einträge, bei denen der Paketname und die kompromittierte Version in separaten Zeilen erscheinen.version in separaten Zeilen erscheinen.router_init.js-Payload-Dateinamen, die Exit-Code 1 zurückgeben.SessionStart-Hooks auf Home-Ebene, selbst wenn eine saubere projektweite .claude/settings.json existiert.Nach dem Build kann der Image-Befehl direkt ausgeführt werden:
docker run --rm tanstack-check-test