
Détecte les artefacts de CVE-2026-45321 (compromission de la chaîne d'approvisionnement TanStack) et du ver Mini Shai-Hulud. Scanne node_modules, lockfiles, hooks de persistance (Claude Code, VS Code, systemd, LaunchAgent), workflows GitHub, historique git, domaines C2 et configurations d'outils IA.
⚠️ Avertissement : Cet outil a été conçu pour mon propre usage. Tous les indicateurs proviennent des sources d'avis suivantes :
Si de nouveaux IOCs, variantes de charge utile ou infrastructure d'attaquant apparaissent après la dernière mise à jour, ils ne seront pas détectés. Recoupez toujours avec les derniers avis publiés.
Détecte la compromission de la chaîne d'approvisionnement TanStack (CVE-2026-45321) et les artefacts du ver Mini Shai-Hulud associés dans une vérification locale du projet.
Le script est conçu pour un triage rapide dans les vérifications de code source, les tâches CI et les builds Docker. Un résultat propre signifie qu'aucun des indicateurs connus ci-dessous n'a été trouvé. Il ne s'agit pas d'une enquête médico-légale complète ni d'une garantie qu'une machine n'a jamais été exposée.
| Catégorie | Détails |
|---|---|
| Paquets compromis | Tous les 42 paquets @tanstack/* + 20 victimes secondaires propagées par le ver (@mistralai, @opensearch-project, @draftlab, safe-action, etc.) |
| Analyse du fichier de verrouillage | pnpm-lock.yaml, yarn.lock, bun.lock, bun.lockb, package-lock.json, y compris les entrées packages multi-lignes de npm v3 et les strophes de sélecteur/version de Yarn v1 |
| Fichiers de charge utile | router_init.js, tanstack_runner.js dans node_modules avec vérification SHA-256 ; les correspondances exactes de hachage et les discordances font toutes deux échouer l'analyse. |
| Vecteur d'infection | @tanstack/setup en tant que optionalDependency dans tout paquet installé. |
| Persistance | Hooks SessionStart de Claude Code dans les paramètres de projet et du répertoire personnel, tâches folderOpen de VS Code, gh-token-monitor (LaunchAgent + systemd), workflows GitHub malveillants. |
| Artefacts disque | .claude/router_runtime.js, .claude/setup.mjs, .vscode/setup.mjs, gh-token-monitor.sh, com.user.gh-token-monitor.plist |
| IOCs sources | Hachages de commits d'attaquants, domaines C2 (api.masscan.cloud, git-tanstack.com), endpoints du protocole Session, sel PBKDF2, chaînes de campagne. |
| Historique Git | Commits signés par [email protected] |
| Modèles de branches | dependabot/github_actions/format/* et dependabout/*/setup-formatter |
| Configurations d'outils IA |
pnpm, yarn, bun, puis npm). Si un dépôt contient intentionnellement plusieurs fichiers de verrouillage, analysez chaque état de gestionnaire de paquets pertinent séparément.npm est disponible et suffisamment authentifié pour npm token list.HOME actuel du processus exécutant le script. Dans les CI ou conteneurs, cela peut différer du répertoire personnel d'une station de travail de développeur.# Scan current directory
bash check-tanstack-compromise.sh .
# Scan a specific project
bash check-tanstack-compromise.sh /path/to/project
# One-liner (curl)
curl -sL https://raw.githubusercontent.com/ry-allan/tanstack-compromise-checker/main/check-tanstack-compromise.sh | bash
Code de sortie 0 = aucun indicateur couvert trouvé.
Code de sortie 1 = indicateur de compromission ou de charge utile suspecte couvert trouvé.
═══════════════════════════════════════════════════════════════
TanStack Supply Chain Compromise Check (CVE-2026-45321)
═══════════════════════════════════════════════════════════════
Advisory: GHSA-g7cv-rxg3-hmpx
Reference: https://snyk.io/blog/tanstack-npm-packages-compromised/
Deep dive: https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-…
[*] Scanning: /Users/xxxxx/repos/xxxxx
[*] Package manager: pnpm (pnpm-lock.yaml)
[*] Checking installed TanStack packages against 42 known-compromised versions…
[*] Checking worm-propagated secondary victims (Mini Shai-Hulud)…
[*] Packages: @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
[*] Scanning lockfile for known-compromised versions (pnpm-lock.yaml)…
[✓] No compromised versions in lockfile
[*] Checking for persistence artifacts (payload files, hooks, services, C2)…
[✓] No malicious author commits in git history
───────────────────────────────────────────────────────────────
[✓] No compromise detected.
Installez Aikido Safe Chain pour analyser automatiquement chaque installation de paquet à la recherche de logiciels malveillants :
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/latest/download/install-safe-chain.sh | sh
Redémarrez votre terminal ensuite. Safe Chain encapsule npm, npx, yarn, pnpm, pip, uv, etc. — bloquant les paquets de moins de 48 heures et les versions connues comme mauvaises avant qu'ils ne touchent le disque. Aucun jeton ou configuration requis.
Le Dockerfile d'intégration crée des fixtures synthétiques uniquement. Il ne télécharge pas de paquets compromis réels.
La fixture principale vérifie que tous les 33 messages de détection se déclenchent sur les manifests de paquets, fichiers de verrouillage, artefacts de persistance, workflows, historique git, IOCs sources, noms de fichiers de charge utile, configurations d'outils IA et sortie de remédiation :
docker build -f integration.Dockerfile -t tanstack-check-test .
Le build Docker inclut également une couverture de régression ciblée pour :
package-lock.json v3 où le nom du paquet et la version compromise apparaissent sur des lignes séparées.version compromise apparaissent sur des lignes séparées.router_init.js avec hachage discordant renvoyant le code de sortie 1.SessionStart de Claude Code au niveau du répertoire personnel même lorsqu'un fichier .claude/settings.json propre existe au niveau du projet.Après la construction, la commande de l'image peut être exécutée directement :
docker run --rm tanstack-check-test
Fichiers .claude/mcp.json et .kiro/settings/mcp.json modifiés. |
| Processus en cours | Processus démonisés de charge utile et gh-token-monitor. |
| Jetons npm | Jetons marqués de rançon (IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner) |