AIエージェントのnpm installを安全にする3段階フロー

POINT

  • 2026年8月4日発覚のShai-Hulud攻撃は、keyvなど434パッケージ・1381バージョンを汚染し、月間20億件超のインストールに影響した
  • ワームは認証情報を盗むだけでなく、.claude/settings.jsonやAI開発ツールの設定ファイルまで書き換えて感染を広げる
  • AIエージェントが提案する依存追加を「隔離→検証→昇格」の3段階に分けると、汚染パッケージを本番へ通す前に止められる

なぜAIエージェントの「npm install」はそのまま危険なのか

Claude CodeやCodexにコーディングを任せていると、「このパッケージを追加します」と提案されてそのままインストールが走る場面が頻繁にある。人間がひとつずつpackage.jsonを見て判断していた工程が、エージェントの一存で完結してしまう。

便利だが、依存追加はサプライチェーン攻撃の入り口そのものだ。2026年8月4日に発覚したShai-Hulud攻撃は、その入り口がどれほど無防備かを突きつけた。

Shai-Huludは何をしたのか

発端はkeyvメンテナーのGitHubアカウント侵害だった。攻撃者はメインブランチに悪意あるファイルを混入させ、GitHub Actionsの正規プロベナンス署名付きで汚染版をnpmに公開した。keyv 6.0.0、flat-cache 6.1.24、cacheable-request 13.0.20などが対象になり、2026年8月4日13時37分CEST時点で434パッケージ・1381バージョン、月間インストール合計20億件超が汚染された。

preinstallフックがBunランタイムv1.3.13を取得し、728KBのMath_Symbol.jsを実行。npm、GitHub、AWS、Kubernetes、HashiCorp Vault、Stripe、Slackの認証情報を収集し、暗号化して公開GitHubリポジトリへ送信する。失敗時はnpm-cache[.]com:443/routerへ流れる仕組みだった。

とりわけ見過ごせないのが、ghs_形式のGitHubトークンを取得した場合の挙動だ。ワームは最大50ブランチへ感染を広げ、.claude/settings.jsonと.vscode/tasks.jsonへ悪意あるフックを追加する。AIコーディングツールの設定ファイル自体が攻撃対象に含まれている。

Shai-Huludサプライチェーン攻撃の発生と拡散プロセス
1 2026.08.04 / 発端 GitHubアカウント侵害 keyv メンテナーのGitHub アカウントが攻撃され侵害 メインブランチへ不正ファイル混入 2 署名通過 / npm公開 汚染パッケージの公開 正規プロベナンス署名付き 434pkg / 月間20億件超影響 keyv 6.0.0, flat-cache等 3 自動実行 不正スクリプト作動 preinstallでBun取得 Math_Symbol.js (728KB) を自動実行 4 情報窃取 認証情報の収集・送信 AWS, GitHub, Vault, Slack 等の認証情報を暗号化窃取 公開リポジトリ等へ不正送信 5 横移動・AIツール攻撃 AI設定改ざん・感染拡大 ghs_トークンで50枝に拡散 .claude/settings.json .vscode/tasks.json 改ざん 6 二次拡散 第2世代の広域感染 math_init.js を経由し コミュニティ全体へ流出 400超のパッケージへ波及 1 1. GitHubアカウント侵害 (2026/8/4) keyvメンテナーのアカウントが侵害される メインブランチへの悪意あるコード混入が発端 2 2. 汚染版npmパッケージ公開 正規プロベナンス署名付きで検証をすり抜け 434pkg・月間20億件超のDLに影響 対象: keyv 6.0.0, flat-cache 6.1.24等 3 3. 悪意あるスクリプトの実行 preinstallフックでBun v1.3.13を取得 Math_Symbol.js (728KB) を自動実行 4 4. 認証情報の収集・外部送信 AWS, GitHub, Vault, Stripe, Slack等収集 暗号化し公開GitHubリポジトリ等へ送信 失敗時は外部ルーターへ流出させる構造 5 5. AI設定改ざん・ブランチ感染 ghs_トークンで最大50ブランチへ拡大 .claude/settings.json や .vscode/tasks.json へ悪意あるフック追加 6 6. コミュニティ二次拡散(第2世代) math_init.js により感染スクリプトが波及 400超のパッケージへ被害が拡大
アカウント侵害を起点に正規のビルド証明(プロベナンス署名)を悪用し、認証情報窃取からAI開発ツールの設定改ざん、二次感染へと段階的に展開されました。

「隔離・検証・昇格」フローの中身

エージェントが依存を提案してから本番に入るまでを、3段階に分けて運用する。

  • 隔離 ネットワーク遮断したサンドボックスコンテナ内でインストールを実行し、preinstall/postinstallスクリプトの挙動をログに残す。外部通信が発生した時点で止める。
  • 検証 パッケージ名・バージョン・メンテナー変更履歴を確認し、既知の侵害情報と突合する。学習データそのものにシークレットが混入している構造的リスクにも目を配りたい。TruffleHogの調査では、HuggingFace上の約7.6ペタバイトのデータから、有効な認証情報が221,303件見つかっている。GitHubの個人アクセストークン349件のうち223件がリポジトリへの完全な書き込み権限を持っていた。
  • 昇格 検証を通過したパッケージのみlockfileにピン留めし、本番ブランチへのマージはエージェントではなく人間のレビュー承認を経る。

この3段階を経ることで、汚染パッケージが本番環境やCI認証情報に触れる前に検知できる。

導入すべき人・しないほうがいい人

個人開発や小規模チームでAIエージェントに依存追加を日常的に任せているなら、隔離実行だけでも導入価値がある。CIに組み込むコストは小さく、被害を未然に止める効果が大きい。

一方、すでに全ての依存追加を人間が手動レビューしている体制なら、3段階フローを重ねると承認待ちが増えて開発速度が落ちる。既存レビューの精度を上げる方が優先度は高い。

まとめ

AIエージェントに依存追加を任せる利便性と、サプライチェーン攻撃の被害規模は表裏一体だ。汚染パッケージを本番に直行させない仕組みを持たない限り、エージェントの提案は検証されないまま実行され続ける。まず自分のCIにサンドボックス実行を1つ挟むところから始めるのが現実的だ。