ハッカーがサプライチェーン攻撃でnpmパッケージを乗っ取り、週20億ダウンロードを達成

セキュリティニュース

投稿日時: 更新日時:

ハッカーがサプライチェーン攻撃でnpmパッケージを乗っ取り、週20億ダウンロードを達成

複数の報道と技術分析を突き合わせると、著名メンテナのアカウントがフィッシングメールで乗っ取られ、chalkdebugansi-styles をはじめとする少なくとも18パッケージに不正なバージョンが短時間公開されました。

これらは合算で週26億超のダウンロード規模に達する基盤的ライブラリ群で、今回のケースは影響対象の潜在規模という意味で過去最大級です。一方で、検知が数分〜1時間以内と早かったこと、影響が出る前提条件が限定的だったことから、オンチェーンの直接的な被害は現時点で小さく抑えられています。

関連記事

JavaScriptやNode.jsで40本以上のパッケージが改ざんされるサプライチェーン攻撃-NPMエコシステムへ再び攻撃

GitHubがnpm サプライチェーン攻撃の防御を強化-二要素認証の必須化やトークンを7日に

タイムラインと攻撃手口の概要

メンテナーのJosh Junon氏support@npmjs[.]help からフィッシングメールが送られ、偽の2FA更新を装って資格情報と2FAコードを外部サーバ(websocket-api2.publicvm[.]com)へ送出させるものでした。

乗っ取り後、攻撃者は対象パッケージを新バージョンで上書き公開index.js 等にブラウザ常駐型のフックを差し込み、Webアプリの実行時に以下を横取りできるようにしました。

  • fetch / XMLHttpRequest のフック

  • window.ethereum、Solana/Tron 等 ウォレットAPI のフック

  • レスポンス内の暗号資産アドレスの文字列置換(類似度でそれらしく置換)

npm側は不正版の多くを速やかに取り下げメンテナ側でも順次無害化を進めています。

影響対象(npmパッケージと件数)

今回のサプライチェーン侵害で不正更新が確認されたのは、少なくとも18パッケージです。

基盤的ユーティリティが中心で、chalkdebugansi-stylessupports-colorstrip-ansiansi-regexwrap-ansicolor-convertcolor-namecolor-stringslice-ansisupports-hyperlinkshas-ansierror-exsimple-swizzleis-arrayishchalk-templatebackslash が含まれます。これらは多くのプロジェクトに直接または間接依存しており、短時間でも不正版が配布された事実そのものが広範な影響可能性を生みます。

ダウンロード規模

影響パッケージ群の合算は週あたり約26億ダウンロード規模に上ります。

単体でも ansi-styles(約3.71億/週)、debug(約3.58億/週)、chalk(約3.00億/週)、supports-color(約2.87億/週)、strip-ansi(約2.61億/週)、ansi-regex(約2.44億/週)、wrap-ansi(約1.98億/週)、color-convert(約1.94億/週)と、いずれもエコシステムの中核に位置づけられます。

ダウンロード数はそのまま被害件数を意味しませんが、潜在的な影響の広さがうかがえます。

いま時点の実害と成立条件

今回の不正コードは、ブラウザ側で fetchXMLHttpRequestwindow.ethereum などのウォレットAPIをフックし、暗号資産の宛先を書き換える挙動が狙いでした。ただし影響が成立するには、

(1)不正版が配布された短時間に新規インストール(lockfile生成)が行われ、(2)対象パッケージが依存に含まれ、(3)成果物がブラウザで実行される

という条件が重なる必要があります。

検知と除去が比較的早かったこともあり、現時点で確認されるオンチェーンの直接被害は限定的とみられます。

参照

Hackers hijack npm packages with 2 billion weekly downloads in supply chain attack

Oops, No Victims: The Largest Supply Chain Attack Stole 5 Cents