セキュリティ17分で読める

Axiosに北朝鮮バックドア——週間1億DLのnpmパッケージが3時間汚染された

週間1億ダウンロードを超えるJavaScript HTTPライブラリ「Axios」のnpmパッケージが、北朝鮮の脅威アクターによって一時的に侵害された。2026年3月31日の約3時間、悪意あるバージョンがnpmレジストリに公開され、インストールした開発者のマシンにバックドアが仕込まれる状態になっていた。Google Threat Intelligence Group(GTIG)の分析により、攻撃はUNC1069と呼ばれる北朝鮮関連のグループに帰属すると特定された。

JavaScriptのエコシステムを根幹から揺るがすこの事件は、オープンソースのサプライチェーンセキュリティがいかに脆弱であるかを改めて突きつけた。

何が起きたのか——攻撃の全容

侵害の時系列

2026年3月31日 00:21 UTC、Axiosのnpmレジストリに2つの不正バージョンが公開された。axios 1.14.1axios 0.30.4だ。これらのバージョンには、通常のAxiosには存在しない「plain-crypto-js」という依存パッケージが追加されていた。

この図は、攻撃の時系列と帰属情報を示しています。

Axios npm サプライチェーン攻撃の時系列:00:21 UTCに悪意あるバージョンが公開され、03:20 UTCに削除されるまでの約3時間の経過と、UNC1069(北朝鮮)への帰属情報

plain-crypto-jsは一見すると暗号化ユーティリティに見えるが、その実態はWAVESHAPER.V2と命名されたマルチプラットフォーム対応のバックドアだった。Windows、macOS、Linuxのいずれの環境でも動作し、インストールされたマシンに対して持続的なリモートアクセスを確立する。

悪意あるバージョンは03:20 UTCまでに検出・削除され、侵害期間は約3時間に留まった。しかし、Axiosの週間ダウンロード数は8300万〜1億超であり、この短時間であっても相当数の開発者やCI/CDパイプラインが影響を受けた可能性がある。

影響バージョンの詳細

項目詳細
影響バージョンaxios 1.14.1 / axios 0.30.4
注入された依存関係plain-crypto-js
マルウェア名WAVESHAPER.V2
対応OSWindows / macOS / Linux
侵害期間2026-03-31 00:21〜03:20 UTC(約3時間)
安全なバージョン1.14.0以下 / 0.30.3以下、および1.14.2以降

WAVESHAPER.V2バックドアとは何か

技術的な仕組み

WAVESHAPER.V2は、npmパッケージのインストール時に自動実行されるpostinstallスクリプトを悪用するバックドアだ。npm installを実行した時点で、ユーザーの明示的な操作なしにマルウェアが起動する。

このバックドアの特徴は、マルチプラットフォーム対応であることだ。JavaScriptのnpmエコシステムはクロスプラットフォームであるため、攻撃者はWindows、macOS、Linuxそれぞれに対応したペイロードを用意していた。バックドアはC2(Command and Control)サーバーとの通信を確立し、以下の機能を提供する。

  • 持続的なリモートアクセス: システム再起動後も自動的に再接続
  • 情報窃取: 環境変数、認証情報、暗号資産ウォレット情報の収集
  • 追加ペイロードの配信: C2サーバーから追加のマルウェアをダウンロード・実行

なぜ「plain-crypto-js」という名前なのか

攻撃者は依存関係の名前を巧妙に選んでいる。npmには「crypto-js」という正規の暗号化ライブラリが存在し、週間数百万ダウンロードを記録している。「plain-crypto-js」という名前は、コードレビュー時に正規ライブラリの派生版と誤認させる意図があったと考えられる。

このテクニックはタイポスクワッティングの亜種であり、名前の類似性を悪用してセキュリティレビューをすり抜ける手法だ。

攻撃者UNC1069の正体

Google GTIGによる帰属分析

Google Threat Intelligence Group(GTIG)は、この攻撃をUNC1069に帰属させた。UNC1069は2018年以降活動が確認されている北朝鮮関連の金銭目的脅威アクターだ。

帰属の根拠となったのは、攻撃インフラへの接続に使用されたAstrillVPNのノードだ。AstrillVPNは北朝鮮のサイバー作戦グループが好んで使用するVPNサービスとして知られており、過去の北朝鮮関連攻撃でも繰り返し観測されている。接続パターンや手法がUNC1069の過去の活動と一致したことで、高い確度での帰属が実現した。

ソーシャルエンジニアリングの手口

今回の攻撃で特に注目すべきは、Axiosのメンテナに対する高度なソーシャルエンジニアリングだ。攻撃者は以下のステップで信頼を構築した。

  1. 実在する企業の創業者になりすまし: 正規の企業とその創業者のオンラインプレゼンス(LinkedIn、GitHub、Webサイト)を精巧にクローンした
  2. 企業クローンの作成: 本物と見分けがつかないコーポレートサイトやメールアドレスを準備
  3. 信頼関係の構築: メンテナと自然なコミュニケーションを重ね、協力関係を装った
  4. 認証情報の取得: 最終的にnpmパッケージの公開権限を持つ認証情報へアクセスする手段を確保

この手口は、単純なフィッシングメールとは次元が異なる。数週間から数か月の時間をかけて偽のアイデンティティを構築し、ターゲットの警戒心を解く、国家レベルのリソースが投入された作戦だ。

この図は、サプライチェーン攻撃の全体フローとマルウェアの影響範囲を示しています。

サプライチェーン攻撃フロー:偽装・接触からメンテナ侵害、パッケージ改ざん、npm公開までの流れと、WAVESHAPER.V2バックドアの機能、発覚後の対応

北朝鮮のサイバー作戦——なぜnpmを狙うのか

外貨獲得の手段としてのサイバー攻撃

北朝鮮は国際的な経済制裁により合法的な外貨獲得手段が極めて限られている。そのため、サイバー攻撃による暗号資産の窃取が国家の重要な収入源となっている。国連の報告書によれば、北朝鮮は2017年以降、サイバー攻撃を通じて数十億ドル規模の暗号資産を窃取したとされる。

UNC1069のようなグループは、この外貨獲得戦略の一翼を担っている。npmのサプライチェーン攻撃は、一度の侵害で大量の開発者マシンにアクセスできるため、暗号資産ウォレットの情報や秘密鍵を効率的に収集する手段として非常に魅力的だ。

開発者を狙う理由

一般ユーザーと比較して、ソフトウェア開発者のマシンには以下のような高価値の情報が存在する。

  • APIキーとアクセストークン: クラウドサービスやSaaSへのアクセス権限
  • 暗号資産ウォレット: Web3開発者が保有する暗号資産
  • SSH秘密鍵: サーバーやリポジトリへのアクセス権限
  • 環境変数: データベース接続情報、外部サービスの認証情報

開発者のマシン1台を侵害するだけで、そこから企業のインフラ全体への足がかりを得られる可能性がある。

最近のサプライチェーン攻撃との比較

npmやPyPIなどのパッケージレジストリを狙ったサプライチェーン攻撃は年々増加している。以下に、近年の主要な事例を比較する。

事件名時期対象影響規模攻撃者手法
Axios npm侵害2026年3月npm (axios)週間1億DL超UNC1069(北朝鮮)メンテナへのソーシャルエンジニアリング
xz-utils バックドア2024年3月Linux (xz)主要Linuxディストロ全般不明(国家支援の疑い)2年間のメンテナへの信頼構築
PyTorch 依存関係攻撃2022年12月PyPI (torchtriton)PyTorchナイトリービルド不明依存関係の名前空間混乱
ua-parser-js 侵害2021年10月npm (ua-parser-js)週間800万DL不明メンテナアカウント乗っ取り
event-stream 侵害2018年11月npm (event-stream)週間200万DL個人(社会工学)メンテナ権限の譲渡を依頼

特に2024年のxz-utils事件との類似性は注目に値する。xz-utilsでは攻撃者が約2年間にわたってメンテナとして活動し、信頼を構築した上でバックドアを仕込んだ。今回のAxios攻撃も、正規企業の創業者になりすますという高度なソーシャルエンジニアリングが使われており、「人間の信頼」を攻撃ベクトルにする手法が定着しつつあることを示している。

npmエコシステムの構造的脆弱性

依存関係の連鎖リスク

Axiosのような人気パッケージが侵害された場合、影響は直接的なユーザーだけに留まらない。npmの世界では、あるパッケージが別のパッケージに依存し、さらにそのパッケージが別のパッケージに依存するという依存関係の連鎖が存在する。

Axiosを依存関係に含むnpmパッケージは数千に及ぶ。これらのパッケージをインストールした開発者も、間接的にAxiosの悪意あるバージョンを取得する可能性があった。この「推移的依存関係」の問題は、npmエコシステムの構造的な脆弱性だ。

パッケージメンテナのセキュリティ

npmのパッケージ公開は、基本的にメンテナのnpmアカウントに紐づいている。つまり、メンテナの認証情報が漏洩すれば、そのパッケージを自由に更新できてしまう。

npmは2FA(二要素認証)を提供しているが、すべてのメンテナが有効にしているわけではない。また、今回のケースのように高度なソーシャルエンジニアリングが用いられた場合、2FAだけでは防げない攻撃ベクトルも存在する。

ロックファイルの重要性

package-lock.jsonyarn.lockなどのロックファイルを適切に管理していれば、既にインストール済みの環境では自動的に悪意あるバージョンに更新されることはない。問題は、新規インストールやCI/CDパイプラインでnpm installを実行した場合だ。バージョン指定が^1.14.0のような範囲指定になっていると、自動的に1.14.1(悪意あるバージョン)がインストールされてしまう。

日本への影響と教訓

日本の開発者への影響

Axiosは日本のWeb開発現場でも極めて広く使われている。React、Vue.js、Next.jsなどのフレームワークと組み合わせたフロントエンド開発、Node.jsによるバックエンド開発のいずれにおいても、HTTPリクエストライブラリとしてAxiosはデファクトスタンダードの地位にある。

侵害が発生した3月31日 00:21〜03:20 UTCは、日本時間では3月31日 09:21〜12:20にあたる。平日の午前中という、まさに日本の開発者がCI/CDパイプラインを稼働させ、npm installを実行する時間帯だ。日本企業の開発環境が影響を受けた可能性は十分にある。

日本企業が取るべきセキュリティ対策

日本のソフトウェア開発組織は、以下の対策を優先的に検討すべきだ。

  1. ロックファイルの厳格な管理: package-lock.jsonをGitリポジトリにコミットし、CI/CDではnpm ci(ロックファイルに基づくクリーンインストール)を使用する
  2. 依存関係の定期監査: npm auditSnykSocket.devなどのツールで依存関係の脆弱性を定期的にスキャンする
  3. プライベートレジストリの導入: Artifactoryなどのプライベートnpmレジストリを経由させ、新バージョンの自動取り込みを制御する
  4. SBOMの整備: ソフトウェア部品表(Software Bill of Materials)を作成・管理し、影響を受けたパッケージの特定を迅速に行える体制を構築する

経済安全保障の観点

2022年に施行された経済安全保障推進法のもと、日本政府はサプライチェーンの強靭化を重要政策に位置づけている。ソフトウェアのサプライチェーンも例外ではなく、今回のような国家支援型攻撃は経済安全保障上の脅威として認識されるべきだ。

特に、重要インフラ(金融、医療、通信、エネルギー)を支えるシステムにおいてオープンソースパッケージの管理が不十分であれば、国家レベルのリスクにつながりかねない。日本のサイバーセキュリティ戦略本部やNISC(内閣サイバーセキュリティセンター)による、ソフトウェアサプライチェーンに関するガイドラインの策定と周知がますます重要になる。

開発者が今すぐ確認すべきこと

影響を受けたかの確認方法

以下のコマンドで、自身のプロジェクトが影響を受けたバージョンを使用していないか確認できる。

# node_modules内のAxiosバージョンを確認
npm ls axios

# package-lock.jsonで特定バージョンの有無を確認
grep -r "1.14.1\|0.30.4" package-lock.json

# 悪意ある依存関係の存在確認
find node_modules -name "plain-crypto-js" -type d

もしaxios@1.14.1またはaxios@0.30.4がインストールされていた場合は、以下の対応が必要だ。

  1. node_modulesディレクトリを完全に削除してnpm ciで再インストール
  2. そのマシンで使用していたAPIキー、トークン、SSH鍵などの認証情報をすべてローテーション
  3. 暗号資産ウォレットを使用していた場合、直ちに資産を別のウォレットに移動

まとめ——今すぐ取るべき3つのアクション

今回のAxios npm侵害事件は、オープンソースのサプライチェーンセキュリティが国家レベルの脅威にさらされている現実を改めて浮き彫りにした。幸いにも侵害期間は約3時間に留まったが、週間1億DLを超えるパッケージの影響力を考えれば、被害は小さくない。

開発者および開発組織は、以下の3つのアクションを今すぐ実行すべきだ。

  1. 影響確認: npm ls axiosで自身のプロジェクトのAxiosバージョンを確認し、1.14.1または0.30.4を使用していた場合はクリーンインストールと認証情報のローテーションを実施する
  2. ロックファイルの徹底: package-lock.jsonをリポジトリに含め、CI/CDでは必ずnpm ciを使用する。npm installをCI環境で使うことは今日をもって止めるべきだ
  3. 依存関係監視の導入: npm auditの定期実行に加え、Socket.devやSnykなどのサプライチェーンセキュリティツールを導入し、新しい依存関係の追加やバージョン変更をリアルタイムで監視する体制を構築する

北朝鮮のサイバー作戦は今後も継続する。次のターゲットがあなたのプロジェクトが依存するパッケージでない保証はどこにもない。防御は「事後対応」ではなく「事前の備え」でなければならない。

この記事をシェア