ssecutils
Security / Browser-native guide

ソフトウェアサプライチェーン攻撃2026 - npm/PyPIの6類型と防御

11Zero tracking reading surface

現代のソフトウェアは、自分が書いたコードより取り込んだ依存パッケージの方が圧倒的に多いのが当たり前です。npm install 一発で何百もの第三者コードが自分の環境とCIで実行される——その信頼を逆手に取るのがソフトウェアサプライチェーン攻撃です。Sonatype は累計120万件超の悪性パッケージを追跡しており、2025年9月の自己増殖ワーム Shai-Hulud 以降、攻撃の頻度と技術的な深さは「いたずらの時代」から「高被害の時代」へと一段上がりました。

本記事は、個別事件の速報ではなく、npm/PyPIを狙う攻撃を6つの類型に整理し、2026年の実例とともに「どこを守ればよいか」を体系立てて解説します。攻撃の入口は違っても、防御の勘所は共通しています。

なぜ依存パッケージが狙われるのか

理由は単純で、費用対効果が圧倒的だからです。人気パッケージを1つ汚染できれば、それを使う何千ものプロジェクトとCI環境に一気に到達できます。しかもパッケージのインストールは、多くの場合スクリプトの自動実行を伴います。

  • npmpreinstall / postinstall などのライフサイクルスクリプトが、依存の検証より前・インストール時に自動実行される。
  • Python(PyPI)setup.py の実行や、import した瞬間のコード実行が悪用される。

つまり「インストールしただけ」「import しただけ」で、開発者のトークン・環境変数・クラウド認証情報が抜かれ得ます。狙われるのは最終的にCIのシークレットとクラウドの鍵です。

サプライチェーン攻撃の6類型

1. タイポスクワッティング(typosquatting)

人気パッケージと1文字違いの名前で悪性パッケージを公開し、打ち間違いを待つ手口。2026年初頭には PyPI で boto3requestsnumpy 等の1文字違いを狙うキャンペーンがあり、import 時にリバースシェルを張り、環境変数を窃取しました。データサイエンス/ML チームが標的でした。

2. 依存関係混同(dependency confusion)

社内のプライベートパッケージと同名のパッケージを公開レジストリに、より高いバージョン番号で公開する手口。ビルドツールが「新しい方」を優先して公開側を取り込んでしまう設定の隙を突きます。社内名がソースやログから漏れていると刺さります。

3. slopsquatting(AIの幻覚を悪用)

2026年ならではの新類型です。AIコーディングツールは、実在しないパッケージ名を「もっともらしく」提案(ハルシネーション)することがあります。攻撃者はAIがよく幻覚する名前を先回りして登録し、開発者がAIの提案を鵜呑みに install するのを待ちます。「AIが言ったから存在するはず」という思い込みが穴になります。

4. メンテナアカウント乗っ取り

正規パッケージの作者アカウントを乗っ取り、本物のパッケージに悪性コードを仕込む手口。フィッシングや トークン窃取 で公開権限を奪います。2026年には TanStack・Mistral AI・UiPath・OpenSearch など実在の有名パッケージ群がまとめて汚染され、累計5.18億ダウンロード規模に影響しました。利用者からは「いつもの信頼できるパッケージ」に見えるため発見が遅れます。

5. 悪意あるインストール/ライフサイクルスクリプト

前述の preinstall / postinstall や import 時実行を悪用するもの。2026年4月の SAP関連npmパッケージ侵害では、preinstall スクリプトが検証や多くのセキュリティツールが走る前に実行され、認証情報を窃取しました。TrapDoor キャンペーン(2026年5月〜)は npm・PyPI・crates.io にまたがり、34超のパッケージ・384超のバージョンを、暗号通貨・AIツール・セキュリティ関連を装った名前で配布しています。

6. 自己増殖ワーム

最も新しく、最も厄介な類型。汚染されたパッケージが感染した開発者のトークンを使って、その人の他のパッケージへ自動的に感染を広げる Shai-Hulud がその嚆矢で、2025年12月の Shai-Hulud 2.0、2026年5月の Mini Shai-Hulud(170超のnpm+PyPIパッケージ、404の悪性バージョン、「Shai-Hulud: Here We Go Again」を含む400超のリポジトリ作成)と再来・変異を繰り返しています。人手を介さず連鎖するため、被害が指数関数的に広がります。

図解案:汚染がCIのシークレットに届くまで

[攻撃者] 6類型のいずれかで悪性パッケージを公開/汚染
      │
      ▼
[開発者/CI] npm install ・ pip install
      │ postinstall(npm) / import時実行(Python) が自動発火
      ▼
[実行環境] 環境変数・.npmrc・クラウド鍵・CIシークレットを窃取
      │
      ├─▶ クラウド侵害(漏れた鍵で本番へ)
      └─▶ 盗んだ公開トークンで他パッケージへ感染(=ワーム化)

★ 守る要点:①取り込む前に止める ②install時の自動実行を抑える
            ③漏れても被害を限定する(最小権限・環境分離)

防御策

取り込む前に止める(入口)

  • バージョン固定とlockfilepackage-lock.json / poetry.lock で完全性ハッシュ込みに固定。勝手な更新で汚染版を引き込まない。
  • 導入前のクールダウン:公開直後の新バージョンを即採用せず、数日寝かせて事故報告を待つ。ワーム対策に有効。
  • リポジトリファイアウォール/許可リスト:未知・新規・低評価のパッケージをプロキシでブロックし、承認済みのみ通す。タイポスクワッティング/slopsquatting を入口で弾く。
  • 名前を確認する習慣:AIが提案したパッケージ名をそのまま信じず実在と正当性を確認。社内名と公開名の衝突(依存関係混同)にも注意。

インストール時の自動実行を抑える(実行)

  • --ignore-scripts を既定にし、必要なパッケージだけ明示的に許可する。ライフサイクルスクリプト悪用の大半を無効化できる。
  • CIを最小権限・環境分離で:ビルドジョブからクラウド本番鍵を見えなくする。シークレットはジョブ単位でスコープし、短命トークンに。

供給側・組織の信頼を固める

  • Trusted Publishing(OIDC):長命な公開トークンを廃し、CIからの署名付き短命認証で公開する。メンテナアカウント乗っ取りの被害を縮小。
  • メンテナ認証の強化:公開アカウントにフィッシング耐性のあるMFA(Passkey/FIDO2)を必須化。
  • 署名・来歴(provenance):npm provenance や Sigstore で「どのソース・どのCIから来たか」を検証可能にする。

漏れても被害を限定する(可視化と対応)

  • SBOM(ソフトウェア部品表)と継続スキャン:「いま何のどのバージョンが入っているか」を即答できる状態に。既知の悪性パッケージとの照合を自動化する。
  • 侵害時はトークン即rotate:漏れた可能性のある認証情報・公開トークンを直ちに失効・再発行。ワームの連鎖を断つ。

まとめ

サプライチェーン攻撃は、「開発の土台になっている信頼」そのものを武器化します。6類型(タイポスクワッティング/依存関係混同/slopsquatting/メンテナ乗っ取り/悪意あるスクリプト/自己増殖ワーム)は入口こそ違え、ゴールは共通——install/import の自動実行を足がかりに、CIのシークレットとクラウドの鍵を奪うことです。

守りも共通します。取り込む前に止める(固定・クールダウン・許可リスト)、install時の自動実行を抑える(--ignore-scripts・環境分離)、漏れても限定する(最小権限・SBOM・即rotate)。具体的なワームの挙動は Shai-Hulud 詳解、AIエージェント基盤に固有のサプライチェーンは MCPのセキュリティ も合わせてご覧ください。

※ 本記事のキャンペーン名・統計値・パッケージ名は、Sonatype/Unit 42/Microsoft/各セキュリティベンダーの公表内容および報道に基づきます。状況は急速に更新されるため、対応時は最新の公式情報をご確認ください。

Related reading

関連記事

Security11
MCPのセキュリティ - Tool Poisoning・Rug Pull・サプライチェーンの実例と対策AIエージェントの標準プロトコルMCPの攻撃面を体系整理。ツール説明文に指示を仕込むTool Poisoning、承認後に定義を差し替えるRug Pull(CVE-2025-54136)、偽MCPサーバのサプライチェーン、過剰権限トークン、MCP Inspector RCEなど2025〜26年の実例と、最小権限・人間による承認・サーバ検証の防御を日本語で解説します。
Security11
ClickFix攻撃とは - 偽CAPTCHAで「自分で感染させる」手口とFileFix亜種・対策偽CAPTCHA・偽エラーでWin+RやPowerShellにコマンドを貼り付け実行させ、Lumma/StealCなどを自分で感染させるClickFix攻撃を解説。Run無効化を回避するFileFix亜種、700サイト改ざん(CVE-2026-26980)などの実例、利用者教育・GPO・ASR・ログ監視による多層防御を日本語で整理します。
Security11
AIブラウザの危険性 - Comet/Atlasを乗っ取る間接プロンプトインジェクションPerplexity CometやChatGPT AtlasなどのAIブラウザを狙う間接プロンプトインジェクションを解説。Webページに隠した指示でAIを操り、ログイン中のGmailや1Passwordを横断悪用してOTPを盗むBraveのPoC、Zenityのゼロクリック乗っ取り、Same-Origin Policyが無力化される理由、入力分離・操作ゲート・モード分離による対策を日本語で整理します。
Security11
インフォスティーラーとセッションCookie窃取 - MFAを回避するpass-the-cookie情報窃取マルウェアがMFAを突破ではなく迂回する仕組みを解説。Lumma/StealCが数十秒で全ブラウザのCookieと保存パスワードを盗み、攻撃者がpass-the-cookieで本人になりすます流れ、3.9億件規模の被害、ClickFix等の感染経路、ChromeのDBSC・FIDO2・短命セッション・条件付きアクセス・異常検知による多層防御を日本語で整理します。