
CVE-2026-45321(TanStack サプライチェーン侵害)および Mini Shai-Hulud ワームのアーティファクトを検出します。node_modules、ロックファイル、永続化フック(Claude Code、VS Code、systemd、LaunchAgent)、GitHub ワークフロー、git 履歴、C2 ドメイン、AI ツール設定をスキャンします。
⚠️ 免責事項: このツールは自身のユースケース用に作成したものです。すべてのインジケータは、以下のアドバイザリ情報源に基づいています:
最後の更新後に新しい IOC、ペイロードの亜種、攻撃者インフラが出現した場合、それらは検出されません。常に最新の公開アドバイザリと照合してください。
TanStack サプライチェーン侵害(CVE-2026-45321)および関連する Mini Shai-Hulud ワームのアーティファクトを、ローカルプロジェクトのチェックアウト内で検出します。
このスクリプトは、ソースチェックアウト、CI ジョブ、Docker ビルドでの迅速なトリアージを目的としています。クリーンな結果は、以下の既知のインジケータが1つも見つからなかったことを意味します。完全なフォレンジック調査や、マシンが過去に露出していないことの保証ではありません。
| カテゴリ | 詳細 |
|---|---|
| 侵害されたパッケージ | 全42個の @tanstack/* パッケージ + ワームにより拡散された20の二次被害パッケージ(@mistralai、@opensearch-project、@draftlab、safe-action など) |
| ロックファイルスキャン | pnpm-lock.yaml、yarn.lock、bun.lock、bun.lockb、package-lock.json。npm v3 の複数行 packages エントリと Yarn v1 のセレクタ/バージョンスタンザを含む |
| ペイロードファイル | node_modules 内の router_init.js、tanstack_runner.js を SHA-256 で検証。ハッシュが完全一致する場合も不一致の場合もスキャンは不合格となります |
| 感染経路 | インストール済みパッケージの optionalDependency としての @tanstack/setup |
| 永続化 | プロジェクトとホームの両設定における Claude Code SessionStart フック、VS Code の folderOpen タスク、gh-token-monitor(LaunchAgent + systemd)、悪意のある GitHub ワークフロー |
| ディスクアーティファクト | .claude/router_runtime.js、.claude/setup.mjs、.vscode/setup.mjs、gh-token-monitor.sh、com.user.gh-token-monitor.plist |
| ソースIOC | 攻撃者のコミットハッシュ、C2 ドメイン(api.masscan.cloud、git-tanstack.com)、Session Protocol エンドポイント、PBKDF2 ソルト、キャンペーン文字列 |
| Git履歴 | [email protected] が作者のコミット |
| ブランチパターン | dependabot/github_actions/format/* および dependabout/*/setup-formatter |
| AIツール設定 | 改ざんされた .claude/mcp.json および .kiro/settings/mcp.json |
| 実行中プロセス | デーモン化されたペイロードと gh-token-monitor プロセス |
| npmトークン | 身代金要求マーク付きトークン() |
pnpm、yarn、bun、次に npm)で1つのプロジェクトロックファイルを選択します。リポジトリに意図的に複数のロックファイルが含まれる場合は、関連する各パッケージマネージャの状態を個別にスキャンしてください。npm が利用可能で npm token list を実行できる十分な認証状態にある場合にのみ実行されます。HOME を検査します。CI やコンテナでは、開発者ワークステーションのホームディレクトリと異なる場合があります。# 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
終了コード 0 = 対象となるインジケータは検出されませんでした。
終了コード 1 = 対象となる侵害または不審なペイロードインジケータが検出されました。
═══════════════════════════════════════════════════════════════
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.
Aikido Safe Chain をインストールすると、すべてのパッケージインストールをマルウェアに対して自動的にスキャンできます:
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/latest/download/install-safe-chain.sh | sh
その後、ターミナルを再起動してください。Safe Chain は npm、npx、yarn、pnpm、pip、uv などをラップし、公開から48時間以内のパッケージや既知の悪意のあるバージョンがディスクに書き込まれる前にブロックします。トークンや設定は不要です。
統合 Dockerfile は合成フィクスチャのみを作成します。実際に侵害されたパッケージをダウンロードすることはありません。
メインのフィクスチャは、パッケージマニフェスト、ロックファイル、永続化アーティファクト、ワークフロー、git履歴、ソースIOC、ペイロードファイル名、AIツール設定、修復出力にわたって、33件すべての検出メッセージが発動することを検証します:
docker build -f integration.Dockerfile -t tanstack-check-test .
Docker ビルドには、以下の対象を絞った回帰テストも含まれています:
package-lock.json v3 エントリ。version が別々の行に現れる Yarn v1 ロックファイルエントリ。router_init.js ペイロードファイル名が終了コード 1 を返すケース。.claude/settings.json が存在する場合でも、ホームレベルの Claude Code SessionStart フックを検出するケース。ビルド後、イメージのコマンドを直接実行できます:
docker run --rm tanstack-check-test
IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner