📝 注意
本記事はAIの補助を受けて編集しています。
インシデント概要(TanStack 公式ポストモーテムより確認)
2026年5月11日 19:20~19:26 UTC(日本時間 5月12日 4:20~4:26 頃)、攻撃者は @tanstack/* 名前空間配下の 42 パッケージ に対して 合計 84 の悪意あるバージョン を npm に公開しました。
攻撃者は以下の 3 つの脆弱性を連鎖させることで、TanStack の正規リリースパイプラインを乗っ取りました:
-
pull_request_targetの設定ミス(Pwn Request) - GitHub Actions キャッシュのポイズニング
- OIDC トークンのランタイム抽出
重要:TanStack の npm トークンは盗まれておらず、公開ワークフロー自体は改変されていません。しかし攻撃者は 正規のリリースパイプラインをハイジャック し、SLSA Build Level 3 の正当な来歴証明書を持つ悪意あるパッケージを公開することに成功しました。
※ 現在、攻撃者の身元に関する公式な帰属(attribution)はありません。
💡 SLSA は絶対安全を保証しない:悪意あるパッケージにも SLSA Build Level 3 の証明書が付いていました。SLSA は「どのパイプラインが生成したか」のみを証明し、「そのパイプラインが意図通り動作したか」は検証しません。
影響範囲(確認済み)
TanStack 公式ポストモーテムによると、直接の被害は @tanstack/* の 42 パッケージです。
しかし、セキュリティ企業の報告ではマルウェアは他のエコシステムにも拡散しました:
- npm / PyPI 上で 172 のユニークなパッケージ(
@uipath、@mistralai、@opensearch-projectなどを含む) - 403 の悪意あるバージョン(Mend.io 調べ – 複数のエコシステム合計)
主な影響を受けたパッケージと悪意バージョンの例:
| パッケージ | 悪意あるバージョン例 |
|---|---|
@tanstack/react-router |
1.169.5、1.169.8 |
@tanstack/router-core |
1.169.5、1.169.8 |
@tanstack/router-utils |
1.161.11、1.161.14 |
@tanstack/history |
1.161.9、1.161.12 |
完全なリストは GitHub Advisory GHSA-g7cv-rxg3-hmpx を参照してください。
マルウェアの動作(TanStack ポストモーテムより確認)
-
認証情報の収集:AWS IMDS/Secrets Manager、GCP メタデータ、Kubernetes サービスアカウントトークン、Vault トークン、
~/.npmrc、GitHub トークン(環境変数・gh CLI・. git-credentials)、SSH 秘密鍵など -
外部への送信:Session の P2P 暗号化ネットワーク(
filev2.getsession.orgなど)経由で送信 - 自己伝播(ワーム機能):被害者がメンテナンスする他の npm パッケージを特定し、同じ方法で悪意あるバージョンを再公開
特別なメカニズム – Dead Man's Switch(デッドマンスイッチ)
Semgrep の解析によると、マルウェアには IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner という文字列を含むトークン監視機能が存在し、トークンが無効化された場合に破壊的な動作(ホームディレクトリの削除など)を引き起こす可能性が示唆されています。StepSecurity や TanStack 自身(ハードニングブログ)も同様の挙動を確認しています。
トークンを revoke する前に、感染が疑われるマシンをネットワークから隔離してください。
感染の有無を確認する方法
1. ロックファイルの確認
package-lock.json、pnpm-lock.yaml、yarn.lock に上記の悪意バージョンが含まれていないか確認します。
2. マーカーファイルの存在確認
find . -name "router_init.js"
find . -name "router_runtime.js"
find . -name "setup.mjs"
特に node_modules/@tanstack/ と ls -la .vscode/ .claude/ をチェックしてください。
3. 不審な Git コミットの有無
git log --all --author=claude@users.noreply.github.com
(マルウェアが Claude Code の設定を改変する可能性があるため)
4. コミュニティツール(tanstack-shield)
コミュニティ製のスキャンツールもあります。使用前にソースコードを確認することをお勧めします。
まずは上記の手動コマンドを優先してください。
緊急対応手順(確認済み)
- 感染したホスト / CI/CD 環境を特定(上記の確認手順に従う)
- ネットワークから隔離 – トークン revoke 前に必ず行う(Dead Man's Switch 対策)
- すべてのシークレットをローテーション(必須) – TanStack ポストモーテムに従い、AWS、GCP、Kubernetes、Vault、GitHub、npm、SSH の認証情報をすべて更新
- Git 履歴の監査 – 不正なコミットやプッシュが行われていないか確認
-
.claude/と.vscode/ディレクトリを削除(TanStack を使用するプロジェクト内) - 修正済みバージョンを再インストール
注意:影響を受ける時間帯(2026年5月11日 19:20 UTC 以降)にインストールを行った場合のみ、認証情報が漏洩した可能性があります。すべての TanStack ユーザーが影響を受けるわけではありません。
公式情報・一次情報源
| ソース | 説明 |
|---|---|
| TanStack Post‑mortem | メンテナーによる正確な技術詳細 |
| TanStack Hardening ブログ | Dead Man's Switch の存在確認、事後対策 |
| GitHub Advisory GHSA-g7cv-rxg3-hmpx | 影響パッケージ・バージョンの完全リスト |
| Semgrep 分析 | Dead Man's Switch の詳細解析 |
| CVE‑2026‑45321 | CVSS 9.6、公式 CVE 情報 |
まとめ
このインシデントは、SLSA の来歴証明書だけでは「安全」を保証できないことの現実的な例です。
影響を受ける可能性のある時間帯にインストールを行った場合は、ネットワーク隔離後にトークンをローテーション することを最優先してください。
