はじめに
JavaScriptのエコシステムにおける主要なパッケージマネージャーであるnpmが、2025年9月にnpmを襲った大規模なサプライチェーン攻撃「Shai-Hulud」に対抗するために導入した防御機構に、Git依存関係を介した新たなバイパス経路が発見されました。エンドポイントおよびサプライチェーンセキュリティ企業Koiの研究者らは、この脆弱性の集合体を「PackageGate」と名付け、pnpm、vlt、Bun、そしてNPMを含む複数のJavaScriptエコシステムツールで確認されたと報告しています。
特筆すべきは、他のツールがこの問題に対処する中で、NPMは「想定通りの動作である」として報告を却下した点です。
脆弱性の詳細:スクリプト実行のバイパス
Koiの研究者が発見した主な問題は、スクリプト実行のバイパスに関するものです。NPMがGitリポジトリから依存関係をインストールする際、悪意のある.npmrc設定ファイルがgitバイナリのパスを上書きする可能性があります。これにより、開発者がセキュリティ強化のために設定する「--ignore-scripts=true」フラグが指定されていても、完全なコード実行が可能になってしまうことが判明しました。
研究者らは、過去にこの手法を悪用してリバースシェルを作成する概念実証(PoC)が公開された証拠があることを警告しており、この問題が理論上の脅威に留まらないことを強調しています。
Shai-Hulud攻撃の背景とnpmの対応
「Shai-Hulud」サプライチェーン攻撃は、2025年9月中旬にnpmに初めて影響を与え、187のパッケージが侵害されました。その後、1ヶ月後には500パッケージ規模の第2波が発生し、3万以上の自動生成されたGitHubリポジトリで40万の開発者シークレットが露出したと評価されています。これらの攻撃や「s1ngularity」「GhostAction」といった他のサプライチェーンインシデントへの対応として、GitHub(NPMの運営元)は追加のセキュリティ対策を導入し、以下の緩和策を推奨していました。
- インストール時のライフサイクルスクリプトの無効化(
--ignore-scripts=true) - ロックファイルの整合性チェックと依存関係の固定化
しかし、今回の発見は、これらの推奨策をもってしても悪用される可能性があることを示しています。
他パッケージマネージャーの対応とNPMの姿勢
Koiの報告を受け、他のJavaScriptパッケージマネージャーは迅速に対応しました。
- Bunはバージョン1.3.5でこの脆弱性に対処しました。
- vltはKoiからの連絡後数日内にパッチを適用しました。
- pnpmは、CVE-2025-69263およびCVE-2025-69264として追跡される2つの脆弱性に対する修正をリリースしました。
しかし、NPMは、HackerOneに提出された脆弱性レポート(バグバウンティのスコープに--ignore-scriptsによるスクリプト実行が含まれているにもかかわらず)を「ユーザーはインストールするパッケージの内容を精査する責任がある」との理由で却下しました。BleepingComputerがGitHubにコメントを求めたところ、広報担当者はnpmがレジストリ内のマルウェアを積極的にスキャンしており、問題への対処に取り組んでいると述べました。また、GitHubは、サプライチェーンのセキュリティ強化のために、信頼された公開、きめ細かなアクセストークン、および2要素認証の強制をプロジェクトに強く推奨しています。
