NPMのShai-Huludサプライチェーン防御がGit依存関係を悪用して回避されるリスク
NPMのサプライチェーン防御策「Shai-Hulud」がGit依存関係を悪用して回避される脆弱性が発見。JavaScriptエコシステムのセキュリティリスクと対策を解説。
NPMのShai-Huludセキュリティ対策がGit依存関係を悪用して回避されるリスク
セキュリティ研究者らは、NPMのサプライチェーン防御策において、Shai-Hulud攻撃後に導入された重要な脆弱性を発見した。この脆弱性により、攻撃者はGit依存関係を悪用して保護機能を回避できることが判明した。この発見は、JavaScriptエコシステムにおける依存関係管理の持続的なリスクを浮き彫りにしている。
主な発見
2021年、NPMはShai-Huludサプライチェーン攻撃を受け、下流のアプリケーションを侵害する悪意あるパッケージが確認されたことを受け、セキュリティ対策を強化した。しかし、研究者らは現在、攻撃者がGitベースの依存関係—NPMレジストリではなく、Gitリポジトリに直接ホストされるパッケージ—を活用することで、これらの防御策を回避できることを実証した。
従来のNPMパッケージとは異なり、Git依存関係は同等のセキュリティスキャン、署名検証、メタデータバリデーションの対象とならない。この盲点により、攻撃者は以下のような行為が可能となる:
- 悪意あるコードを依存関係に注入し、検知を逃れる。
- オープンソースプロジェクトにおける信頼関係を悪用する。
- NPMの自動セキュリティチェック(パッケージ署名やプロベナンス検証など)を回避する。
技術的詳細
NPMのShai-Hulud対策後の防御策には以下が含まれる:
- パッケージ署名:公開者の信頼性を検証。
- プロベナンスチェック:パッケージの出所を検証。
- 自動マルウェアスキャン:レジストリにホストされたパッケージを対象。
しかし、package.json内でURLとして参照されるGit依存関係(例:git+https://github.com/user/repo.git)は、これらのセーフガードの対象外となる。攻撃者は以下の手法を用いることができる:
- 悪意あるパッケージを公開または非公開のGitリポジトリにホストする。
- タイポスクワッティングやソーシャルエンジニアリングを用いて開発者を騙し、依存関係として組み込ませる。
- インストール時に任意のコードを実行し、ビルド環境を侵害する。
影響分析
この脆弱性により、組織は以下のリスクにさらされる:
- CI/CDパイプラインを標的としたサプライチェーン攻撃。
- 侵害された依存関係を通じたデータ流出やバックドアの展開。
- 悪意あるコードを無意識に配布するプロジェクトによる評判の損失。
Git依存関係はエンタープライズやオープンソースプロジェクトで広く利用されており、リスクが増大している。Gitホストのパッケージに依存する高プロファイルなライブラリやツールは、意図せず脅威を拡散する可能性がある。
推奨対策
セキュリティチームと開発者は以下の対策を講じるべきである:
package.jsonファイルを監査し、可能な限りGit依存関係をレジストリホストの代替パッケージに置き換える。- 依存関係スキャンツール(例:GitHub Dependabot、Snyk)を導入し、悪意あるGit参照を検出する。
- Gitベースの依存関係に対する厳格なコードレビューポリシーを適用し、リポジトリソースの手動検証を含める。
- インストール時に**
--omit=devフラグ**を使用し、リスクを隠蔽する可能性のある開発依存関係を除外する。 - ビルドシステムにおける異常な挙動(予期しないネットワークリクエストやファイル変更など)を監視する。
次のステップ
NPMはこの問題に対するパッチや緩和策をまだリリースしていない。組織は以下を含む多層防御戦略を採用することが推奨される:
- 侵害された依存関係の影響を制限するための隔離されたビルド環境。
- 依存関係の出所を追跡するための**ソフトウェア部品表(SBOM)**の生成。
- 依存関係管理におけるゼロトラスト原則の適用。外部コードはデフォルトで信頼しない。
この発見は、見落とされがちな攻撃対象を悪用する攻撃者の戦術の変化に伴い、オープンソースのサプライチェーンを保護するための継続的な警戒の必要性を強調している。