- NPMリポジトリで100個以上の認証情報窃取用の悪性パッケージが8月以降未検出のままアップロードされ、合計8万6,000回以上ダウンロードされていたことが確認された
- セキュリティ企業 Koi は、「PhantomRaven」と名付けた攻撃キャンペーンがNPMの Remote Dynamic Dependencies(RDD) 機能を悪用し、126個の悪性パッケージを配布したと報告
- RDDは、パッケージが信頼されていないドメインから依存コードを動的にダウンロードできる仕組みで、静的解析ツールでは検出されない
- 攻撃者はこの機能を利用してHTTP接続による悪性コードのダウンロードを行い、パッケージのメタデータ上では「0 Dependencies」と表示されるため、開発者やセキュリティスキャナーが認識できなかった
- このような構造的脆弱性は、NPMエコシステムにおけるセキュリティ管理の限界と自動インストール機構の危険性を浮き彫りにしている
NPMリポジトリ内での悪性パッケージ拡散
- 攻撃者がNPMコードリポジトリの構造的な弱点を利用し、8月以降100個以上の認証情報窃取用パッケージをアップロード
- 大半のパッケージは未検出のまま配布され、累計ダウンロード数は86,000回以上
- セキュリティ企業 Koi はこの攻撃を PhantomRavenキャンペーン と命名し、NPMの特定機能が悪用されたと分析
- Koiによれば、126個の悪性パッケージのうち約80個が記事執筆時点でもなおNPM上に残っていた
Remote Dynamic Dependencies(RDD)の脆弱な構造
- RDDは、パッケージが外部Webサイトから依存コードを動的にダウンロードすることを許可する機能
- 通常、依存関係はNPMの信頼されたインフラから取得されるが、RDDはHTTPなどの暗号化されていない接続でのダウンロードも許可する
- PhantomRavenの攻撃者はこの機能を使い、悪性URL(例:
http://packages.storeartifact.com/npm/unused-imports)からコードをダウンロードするよう設定
- こうした依存関係は開発者やセキュリティスキャナーから見えず、パッケージ情報には「0 Dependencies」と表示される
- NPMの自動インストール機能により、このような**「見えない」依存コードが自動実行**される構造になっている
セキュリティツールの検出限界
- Koiの Oren Yomtov は、「PhantomRavenは既存のセキュリティツールの死角を巧妙に悪用した事例だ」と述べた
- その結果、攻撃者はセキュリティ検証を回避しながら悪性コードを配布できた
追加の脆弱要因
- Koiは、RDDで取得された依存関係はインストールのたびに攻撃者のサーバーから新たにダウンロードされると説明
- キャッシュやバージョン管理がないため、同じパッケージでもインストール時点ごとに異なる悪性コードが注入される可能性がある
- このような動的ダウンロード構造は、パッケージ完全性の検証を困難にする
NPMの構造と背景
- NPMはJavaScript向けのパッケージマネージャーで、GitHub子会社の npm, Inc. が管理
- Node.jsの標準パッケージマネージャーであり、コマンドラインクライアントと npm registry で構成される
- registryには公開および有料の非公開パッケージが保存され、Webサイトから検索できる
- 今回の事件は、NPMの自動依存関係管理の仕組みが攻撃に悪用され得ることを示す事例として指摘されている
その他の言及
- 記事の末尾では、不要なJavaScriptの実行をブロックすべきだという意見に言及
- しかし今回の攻撃は、必須のJavaScriptコードすら悪用された事例だと指摘されている
まだコメントはありません。