自衛のためのサイバー攻撃の仕組み講座(AI時代・エンジニア水準)

区分4 AIとエージェントを狙う攻撃★★★

No.12 サプライチェーン攻撃(npm・拡張機能・スキル・委託先)

サプライチェーン攻撃は、あなた自身ではなく、あなたが使う部品や取引先を経由して入ってくる攻撃です。IPA 10大脅威2026の組織向けで2位に入っています。AIの周りでは部品が一気に増えています。2026年10月時点の公式資料に当てて書いています。
目次
  1. 第0章 前提知識
  2. 第1章 npm の事件で見る、典型の流れ
  3. 第2章 AI の周りで増えた「部品」
  4. 第3章 委託先と SaaS
  5. 自分の環境を点検する
  6. 確認問題

第0章 前提知識

① 言葉の意味

② 身近なたとえ 必ず覚える

自社の弁当に毒を入れるのは難しくても、食材の仕入れ先に混ぜれば、何百もの店に同時に届きます。 サプライチェーン攻撃は、自分より守りの弱い仕入れ先を狙う攻撃です。

IPA 10大脅威2026(組織向け)は、2位に「サプライチェーンや委託先を狙った攻撃」、3位に「AIの利用をめぐるサイバーリスク」を置きました。 3位は2026年に初めて選ばれた項目です。この回は、その2つが重なる所を扱います。

第1章 npm の事件で見る、典型の流れ

① 2025年9月の事件 必ず覚える

2025年9月、npm で広がった事件を、CISA(米国のサイバー防衛機関)が9月23日に注意喚起しました。 通称「Shai-Hulud(シャイ・フルード)」。500以上のパッケージが改ざんされた、と報告されています。

流れは次の通りです。

  1. 作り手の合鍵(トークン)が盗まれる
  2. その合鍵で、正規のパッケージに悪意のある版が公開される
  3. 利用者が更新で入れると、インストール時に自動で動く部分が動き、手元のGitHubのトークンやクラウドの鍵(AWS・Google Cloud・Azure など)を探して外へ送る
  4. 盗んだ合鍵で、その人が持つ別のパッケージにも悪意のある版を公開する。こうして自分で増えていく

ポイントは、3の「インストール時に自動で動く」ところです。 npm には、インストールの前後に自動で走る小さなスクリプト(ライフサイクルスクリプト)があります。 便利な仕組みですが、攻撃者にとってはあなたの端末で動けるきっかけになります。

② この流れから出る3つの対策 必ず覚える

CISA の推奨と npm の公式機能を、自分の環境向けに整理すると、次の3つです。

対策 何をするか 効く理由
版を固定する ロックファイル(package-lock.json)をコミットし、入れる時は npm ci を使う 勝手に新しい版へ上がらない
新しすぎる版を避ける npm の min-release-age(公開から指定日数以上たった版だけを入れる)や、before(指定日までの版)を使う 公開直後は、見つかって取り下げられる前の時間帯にあたる
自動実行を止める ignore-scripts=true にして、インストール時のスクリプトを動かさない 手順3のきっかけを消す

min-release-age は新しめの npm(v11系)の設定です。自分の npm の版で使えるかを npm --version と公式の設定一覧で確かめてください。 ignore-scripts を有効にすると、一部の部品が動かなくなることがあります。動かなくなった物だけ、中身を読んでから個別に許可します。

あわせて、公開側には耐フィッシングの多要素認証(パスキー等)が求められています。CISA の推奨でも、開発者の GitHub と npm のアカウントに義務づけるよう挙げられています。

③ 事件のあとにやること さらっと

自分が影響を受けたかもしれない時は、次の順です。

  1. ロックファイルで、該当する版が入っていないかを確かめる
  2. 入っていたら、その端末に置いてあった鍵を全部作り直す(GitHub・クラウド・npm・API キー)
  3. 作り直すまで、古い鍵は有効なまま盗まれた状態だと考える

第2章 AI の周りで増えた「部品」

① 起動のたびに最新を取る MCP サーバー 必ず覚える

MCP のサーバーの紹介でよく見る書き方に、npx -y パッケージ名 があります。 npx は、npm のパッケージをその場で取ってきて動かす命令で、-y は確認を省く指定です。

版を書かずに使うと、起動のたびに、その時点の最新版を取って動かすことになります。 第1章の事件と組み合わせると、ある日突然、悪意のある版があなたの Claude Code の裏で動き出す、という流れが成り立ちます。

対策は、版を書くことです。

npx -y パッケージ名@1.2.3

のように版番号を固定し、更新は自分が変更点を読んでから上げます。

② スキル・プラグイン・フック・CLAUDE.md 必ず覚える

Claude Code は、拡張の形がいくつもあります。

拡張 中身 危険の見方
スキル AIへの手順書と、付属のスクリプト 手順書の文が命令になる(No.10)。付属スクリプトは実行される
フック 決まった場面で動くコマンド あなたの権限で、そのまま動く
MCP サーバー 外部のプログラム 第2章①と No.11
プラグイン 上の物をまとめた配布物 全部入りなので、中身の確認が大変

どれも、ただの設定ではなくコードか、AIが従う文章です。 他人が作った物を入れる時は、入れる前にファイル全体を読む。これを標準の動きにしてください。

③ AI が「存在しない部品名」を答えることがある さらっと

AI に「この処理に使える部品は?」と聞くと、実在しない名前を自信ありげに出すことがあります。 攻撃者がその名前の部品を先に登録しておくと、AIの言う通りに入れた人が、悪意のある部品を入れてしまいます。研究では、この種の幻の名前が繰り返し出ることが確かめられています。

自衛は簡単です。AI が出した部品名は、入れる前に公式ページで実在・作者・公開日・利用者数を確かめます。

第3章 委託先と SaaS

① 自分のチェックが及ばない所 必ず覚える

IPA の項目名に「委託先」とあるように、部品はプログラムだけではありません。

ここで効くのは、技術より棚卸しと契約と鍵の絞り込みです。

自分の環境を点検する

読むだけの点検です。

  1. claude mcp list の出力に npx -y で版なしの物が無いか見る。あれば版を書き足す候補にする
  2. ls ~/.claude/skills と、入れているプラグインの一覧を出し、「自分で書いた物」「他人が作った物」に分ける。後者は、1つずつ中身を読み直す日を決める
  3. 使っているnpmのプロジェクトで npm audit を実行し、結果を見る。ロックファイルがコミットされているかも確認する
  4. 外部サービスに渡している鍵の一覧を作り、使っていない物に印を付ける

頼み方の例:「このフォルダの MCP 設定とスキルを読んで、版が固定されていない物と、外部のスクリプトを呼んでいる物を表にして。書き換えはしないで」

攻撃は、守りの弱い部品や取引先を経由して入る。npm の事件は、合鍵の盗難→悪意のある版の公開→インストール時の自動実行→鍵の窃取→自己増殖、の流れ。版を固定し、新しすぎる版と自動実行を避け、他人のスキルやMCPは読んでから入れる。

確認問題

問1 2025年9月の npm の事件で、手元の鍵が盗まれた仕組みとして正しいのはどれですか?

問2 `npx -y パッケージ名` で版を書かずに MCP サーバーを起動し続けると、どんな危険がありますか?

問3 他人が配っているスキルを入れる前に、まずやることはどれですか?

問4 自分の端末に、改ざんされた版が入っていたと分かりました。最初にすべきことはどれですか?

出典(2026年10月時点で確認):CISA「Widespread Supply Chain Compromise Impacting npm Ecosystem」(https://www.cisa.gov/news-events/alerts/2025/09/23/widespread-supply-chain-compromise-impacting-npm-ecosystem)/IPA「情報セキュリティ10大脅威 2026」(https://www.ipa.go.jp/security/10threats/10threats2026.html)/npm Docs「config」(https://docs.npmjs.com/cli/v11/using-npm/config)/OWASP Top 10 for LLM Applications 2025「LLM03 Supply Chain」(https://genai.owasp.org/llm-top-10/)/MCP 公式仕様「Security Best Practices」(https://modelcontextprotocol.io/specification/2025-11-25/basic/security_best_practices)