Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
tanscript-exploit-check — TanStack/Mini Shai-Hulud npmサプライチェーン攻撃(CVE-2026-45321)用のIOCチェッカー | Kitploit
ツール/GitHubGitHub/nkopylov/tanscript-exploit-check
侵害指標 (IOC) 管理脆弱性分析フォレンジック脅威インテリジェンスサプライチェーンセキュリティインシデントレスポンス
GitHubnkopylov/tanscript-exploit-check

tanscript-exploit-check

TanStack/Mini Shai-Hulud npmサプライチェーン攻撃(CVE-2026-45321)用のIOCチェッカー

リポジトリを見る
12ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Mini Shai-Hulud サプライチェーン攻撃 — IOC チェッカー

root@kitploit:~
curl -fsSL https://raw.githubusercontent.com/nkopylov/tanscript-exploit-check/main/check-tanstack-exploit.sh | bash

または、クローンしてローカルで実行:

root@kitploit:~
git clone https://github.com/nkopylov/tanscript-exploit-check.git
cd tanscript-exploit-check
./check-tanstack-exploit.sh [project_dir ...]

何が起きたか

このチェッカーは、TeamPCP による Mini Shai-Hulud サプライチェーン攻撃キャンペーンの2つの波をカバーしています。

第1波: TanStack CI/CD 侵害(2026年5月11日)

2026年5月11日(19:20〜19:26 UTC)に、攻撃者は6分間で 42 の @tanstack/* npm パッケージにわたって 84 の悪意のあるバージョンを公開しました。この攻撃は Mistral AI、UiPath、OpenSearch などのパッケージにも及び、npm と PyPI 全体で合計 170 以上のパッケージに影響しました。

メンテナーの認証情報は盗まれていません。 攻撃者は、3段階の攻撃によって CI/CD トラストチェーン自体を悪用しました:

  1. pull_request_target エクスプロイト — 使い捨ての GitHub フォークが PR を開き、ベースリポジトリのセキュリティコンテキストで攻撃者コードを実行させました
  2. GitHub Actions キャッシュポイズニング — フォークのコードが共有の pnpm キャッシュを汚染し、後に正規のリリースワークフローに感染しました
  3. プロセスメモリからの OIDC トークン抽出 — 悪意のあるコードが GitHub Actions ランナーのメモリから npm publish トークンを直接抽出し、**有効な SLSA Build Level 3 の発行元証明(provenance attestations)**を持つパッケージを生成しました

第2波: npm アカウント「atool」の乗っ取り(2026年5月19日)

2026年5月19日(01:39〜02:06 UTC)に、侵害された npm アカウント atool([email protected])は、2回の自動化された波で 314 パッケージにわたって 637 の悪意のあるバージョンを公開しました。影響の大きいターゲットは次のとおりです:

  • size-sensor(月間 4.2M ダウンロード)
  • echarts-for-react(月間 3.8M ダウンロード)
  • @antv/scale(月間 2.2M ダウンロード)
  • timeago.js(月間 1.15M ダウンロード)
  • その他 310 以上の @antv/* および別のパッケージ

この波では、Bun ベースのペイロード(498KB の index.js)が "preinstall": "bun run index.js" によってトリガーされ、第2段階のペイロードは、フォークオブジェクト共有エクスプロイトを介して antvis/G2 GitHub リポジトリにプッシュされた偽装コミットに隠されていました。

悪意のあるコードの動作(両方の波)

両方の波は、同じ「Mini Shai-Hulud」ツールキットファミリーを使用しています:

  • 認証情報の収集: 80 以上の環境変数、AWS フルチェーン(env → config → IMDSv2 → ECS → Secrets Manager)、GitHub PAT、npm トークン、SSH キー、K8s トークン、Vault トークン、パスワードマネージャー(1Password、Bitwarden、pass、gopass)
  • 永続化: LaunchAgent/systemd を介した gh-token-monitor(第1波)と kitty-monitor(第2波)デーモン、.claude/settings.json と .vscode/tasks.json へのフック
  • 外部へのデータ流出: P2P ネットワーク(第1波)、GitHub Git Data API + OpenTelemetry トレースを装った HTTPS(第2波)
  • CI/CD の悪用: toJSON(secrets) をダンプするワークフローインジェクション、npm OIDC トークン交換
  • デッドマンスイッチ: デーモンがアクティブな状態で GitHub トークンが失効された場合、rm -rf ~/ を実行
  • デッドドロップ C2(第2波): GitHub コミット検索 API をポーリングして firedalazer キーワードを探し、RSA-PSS 署名付きコマンドを受信

このスクリプトがチェックする内容

影響を受けたパッケージ

第1波: TanStack(42パッケージ)

影響を受けたのは @tanstack/router* と @tanstack/start* のみです。影響なし: @tanstack/query*、@tanstack/table*、@tanstack/form*、@tanstack/virtual*、@tanstack/store。

全42パッケージの詳細は、完全なアドバイザリを参照してください。

第2波: atool アカウント(314パッケージ)

npm ユーザー atool([email protected])が公開したすべてのパッケージに、2026年5月19日に悪意のあるバージョンが公開されました。影響の大きいパッケージは次のとおりです:

パッケージ月間ダウンロード数
size-sensor4.2M
echarts-for-react3.8M
@antv/scale2.2M

さらに 310 以上のパッケージが、主に @antv/* スコープ(@antv/g2、@antv/g6、@antv/l7、@antv/s2、@antv/x6、@antv/f2 など)、ai-figure、timeago-react、jest-canvas-mock、jest-date-mock などに影響しました。

完全なリストは、SafeDep の記事を参照してください。

修復手順(侵害された場合)

重要: トークンを失効させる前に、デッドマンスイッチを無効にしてください。 デーモンがアクティブな状態でトークンが失効されると、マルウェアは $HOME を消去します。

  1. 永続化デーモン(gh-token-monitor と kitty-monitor)を停止し、LaunchAgent/systemd サービスを削除する
  2. 永続化ファイル(.claude/router_runtime.js、.vscode/setup.mjs、~/.local/share/kitty/cat.py、/var/tmp/.gh_update_state など)を削除する
  3. node_modules とロックファイルを削除し、--ignore-scripts で再インストールする
  4. すべての認証情報をローテーションする(npm、GitHub、AWS、GCP、SSH キー、Vault トークン、パスワードマネージャーのトークンなど)
  5. 攻撃者ドメインを DNS/ファイアウォールレベルでブロックする(api.masscan.cloud、filev2.getsession.org、git-tanstack.com、t.m-kosche.com)
  6. 2026年5月11日〜19日のクラウドプロバイダーログを監査する

公式発表と参考情報

第1波: TanStack(5月11日)

  • CVE-2026-45321(CVSS 9.6 Critical)— CVE レコード
  • GHSA-g7cv-rxg3-hmpx — GitHub アドバイザリ
  • TanStack ポストモーテム — tanstack.com/blog/npm-supply-chain-compromise-postmortem
  • TanStack ハードニングフォローアップ — tanstack.com/blog/incident-followup
  • GitHub 追跡イシュー — TanStack/router#7383

第2波: atool アカウント乗っ取り(5月19日)

  • SafeDep 分析 — safedep.io/mini-shai-hulud-strikes-again-314-npm-packages-compromised

セキュリティ研究者による記事

  • Socket.dev
  • Snyk
  • StepSecurity(最初の発見者)
  • Wiz
  • Orca Security
  • SecurityWeek

AI コーディングエージェント向けハードニングプロンプト

これらのプロンプトを AI コーディングエージェント(Claude Code、Cursor、Cline/OpenClaw、Windsurf、Hermes など)にコピー&ペーストして、このようなサプライチェーン攻撃に対してプロジェクトをハードニングしてください。

プロンプト1: npm publish の遅延(新規バージョンの隔離)

サプライチェーン攻撃に対してこのプロジェクトの npm 設定をハードニングしてください。以下を行ってください:

  1. バージョンを完全固定する: package.json 内のすべての依存関係から ^ と ~ のプレフィックスを削除し、npm install が新しく公開されたバージョンを静かに取得しないようにします。

  2. デフォルトで postinstall スクリプトを無効化する: .npmrc に ignore-scripts=true を追加します。次に、このプロジェクトが実際に必要とする既知の安全なライフサイクルスクリプトのみを実行する明示的な "preinstall" スクリプトを package.json に追加します(ある場合)。

  3. CI でロックファイルのみを使用したインストールを強制する: CI が npm install ではなく npm ci を使用するようにします。CI 設定ファイルがある場合はこれを確認し、ない場合は手動ステップとして記載します。

  4. 発行元検証を追加する: CI パイプラインのステップと pre-push git フックとして npm audit signatures を追加します。

  5. 更新ポリシースクリプトを作成する: 次のような scripts/safe-update.sh を作成します:

プロンプト2: AI エージェント設定のハードニング

このプロジェクトの AI コーディングエージェント設定を、サプライチェーンインジェクション攻撃(.claude/settings.json と .vscode/tasks.json に悪意のあるフックを注入した TanStack/Mini Shai-Hulud キャンペーンなど)に対して監査し、ハードニングしてください。以下を行ってください:

Claude Code(.claude/):

  1. .claude/settings.json と .claude/settings.local.json を確認し、シェルコマンドを実行する hooks エントリがないか調べます。特に .claude/、.vscode/、node_modules/ 内から .js、.mjs、.sh ファイルを実行するものをフラグ付けします。
  2. 正当なユーザー作成目的に遡れないフックはすべて削除します。
  3. .claude/settings.local.json がコミットされないように(ローカルのままにする)、 ルールを追加します。

プロンプト3: GitHub Actions のハードニング

このリポジトリの GitHub Actions 設定を、CI/CD サプライチェーン攻撃に対して監査し、ハードニングしてください。以下を行ってください:

  1. pull_request_target トリガーを削除またはリファクタリングする — これらは、フォークによってトリガーされた場合でも、シークレットにアクセスできるベースリポジトリのコンテキストでワークフローコードを実行します。必要に応じて、pull_request + 承認ゲート付きの別ワークフローに置き換えてください。

  2. すべてのサードパーティ製アクションを完全なコミット SHA に固定する(タグやブランチではなく)。たとえば、actions/checkout@v4 を actions/checkout@<full-sha> に置き換えます。読みやすさのため、タグをコメントとして追加してください。

  3. すべてのワークフローに最小権限を適用する。明示的な permissions: ブロックを追加します。ほとんどのワークフローは contents: read のみが必要です。公開(publish)ワークフローには id-token: write のみが必要です — それ以外は不要です。

  4. キャッシュのスコープを制限する: actions/cache を使用している場合、キャッシュキーをブランチ単位にして、ブランチ間の汚染を防ぎます。restore-keys は慎重に追加してください — 信頼できないブランチからキャッシュを復元しないでください。

  5. StepSecurity Harden-Runner をすべてのジョブの最初のステップとして追加する: egress-policy: audit(許可されたエンドポイントがわかっている場合は )を指定した 。

ライセンス

MIT

ツールをダウンロード
#チェック説明
1デッドマンスイッチ永続化デーモン: gh-token-monitor(第1波)、kitty-monitor(第2波)
2悪意のあるプロセス既知の攻撃者プロセス名(両方の波)
3ペイロードファイル名前と SHA-256 ハッシュによる既知の悪意のあるファイル(4種類のハッシュ)
4Claude Code フック.claude/settings.json に注入されたフック + 汎用 SessionStart ヒューリスティック
5VS Code タスク.vscode/tasks.json に注入されたタスク + 汎用 runOn: folderOpen ヒューリスティック
6GitHub Actionsすべてのワークフロー内の toJSON(secrets) + pull_request_target 警告
7npm ロックファイルロックファイル内の侵害されたパッケージバージョン
8optionalDependencies悪意のある @tanstack/setup と @antv/setup + 4 つの偽装コミット SHA
9ネットワーク接続C2 インフラへのアクティブな接続(5 ドメイン/IP)
10DNS キャッシュ攻撃者ドメインの事前解決(4 ドメイン)
11Git ブランチDune をテーマにした攻撃者のブランチ命名パターン
12ライフサイクルスクリプトヒューリスティック: preinstall/postinstall 内の bun run(インストール済みパッケージ)
13デッドドロップ C2git 履歴内の firedalazer キーワードと「Shai-Hulud」マーカー
14GitHub 依存関係ヒューリスティック: optionalDeps 内でコミット SHA に固定された github: 依存関係
パッケージ悪意のあるバージョン最初の安全なバージョン
@tanstack/react-router1.169.5, 1.169.81.169.9
@tanstack/router-core1.169.5, 1.169.81.169.9
@tanstack/vue-router1.169.5, 1.169.81.169.9
@tanstack/solid-router1.169.5, 1.169.81.169.9
@tanstack/react-start1.167.68, 1.167.711.167.72
@tanstack/router-plugin1.167.38, 1.167.411.167.42
timeago.js
1.15M
  • パッケージ名を引数として受け取る
  • 最新バージョンがいつ公開されたかを確認する(npm view <pkg> time --json)
  • バージョンが 3 日未満の場合は更新を拒否する
  • 3 日より古い場合は npm install <pkg>@latest --save-exact を実行する
  • 変更内容のサマリーを出力する

アプリケーションコードは変更しないでください。設定ファイル、.npmrc、package.json スクリプト、CI 設定のみを変更してください。

.gitignore

VS Code(.vscode/):

  1. .vscode/tasks.json と .vscode/launch.json を確認し、予期しないスクリプトやバイナリを実行するタスクがないか調べます。
  2. setup.mjs、router_runtime.js など、このプロジェクトに属さないファイルを参照するタスクエントリを削除します。
  3. .vscode/extensions.json に認識できない拡張機能がないか確認します。

Cursor(.cursor/):

  1. .cursor/settings.json とルールファイルに、注入されたコマンドやフックがないか確認します。
  2. 上記の VS Code と同じチェックを行います — Cursor は .vscode/ 設定を継承します。

全般:

  1. package.json 内に、自分が書いていない preinstall、postinstall、prepare、prestart スクリプトがないか確認します。疑わしいものにはフラグを立てます。
  2. pull_request_target を使用するワークフローが .github/workflows/ にないか確認し、セキュリティリスクとして理由をコメント付きでフラグを立てます。
  3. .gitignore が、資格情報を漏洩させる可能性のあるエージェントセッションファイル(.claude/projects/、.cursor/logs/ など)を除外していることを確認します。

見つけた内容と変更内容を報告してください。アプリケーションコードは変更しないでください。

block
step-security/harden-runner@v2
  • ワークフローログにシークレットがないか確認する: どのワークフローステップも ${{ secrets.* }} や ${{ toJSON(secrets) }} を stdout に出力していないことを確認します。

  • すべての変更を報告してください。アプリケーションコードは変更しないでください。