1. 概要
2026年3月31日、週間1億以上のダウンロード数を誇るJavaScriptライブラリ「axios」のNPMパッケージ(Node Package Manager)が侵害されました。NPMパッケージは、Node.jsのエコシステムで使われる「再利用可能なコードのまとまり」であり、ライブラリやツールをまとめた開発者向けのパッケージです。攻撃者は該当パッケージのメンテナンス用アカウントを乗っ取り、バージョン「1.14.1」および「0.30.4」に悪性の依存パッケージを注入しました。この依存パッケージはユーザーが該当バージョンの「axios」をインストールするときにバックドアを対象のOSに合わせて配置します。これらの一連の攻撃はGoogleのGoogle Threat Intelligence Group(以降、GTIG)により北朝鮮系脅威アクター「UNC1069」によるものとされています。
今回の攻撃により影響を受けたバージョンは以下のとおりです。
| パッケージ名 | 危険なバージョン | 安全なバージョン |
|---|---|---|
| axios | 1.14.1、0.30.4 | 1.14.0以下、0.30.3以下 |
| plain-crypto-js | 4.2.1 | なし(悪性パッケージ) |
一連のインシデントは日本時間の3月31日の9時ごろから12時ごろに終了しました。悪性の「axios@1.14.1」の露出時間は約2時間53分、「axios@0.30.4」は約2時間15分と推定されます。

上記の期間中に以下の操作をした場合、バックドアによる侵害が行われた恐れがあります。
- 「npm install axios」を実行した場合
- 依存パッケージにaxiosが含まれており、バージョン固定されていない状態で「npm install」を実行した場合
- パッケージの依存ツリーにaxiosが含まれている状態で「npm install」を実行した場合
また、CI/CDパイプラインなどでこの時間帯に「npm install」が行われていた場合にも、パイプラインの実行先サーバーが侵害されている恐れがあります。
現在はnpm上で悪性バージョンは削除済みであり、「plain-crypto-js」も無害なセキュリティスタブに置換済みです。
2. キャンペーン概要
Google Threat Intelligence Group(GTIG)は、NPMパッケージ「axios」を標的としたソフトウェアサプライチェーン攻撃を追跡しています。2026年3月31日00:21〜03:20 UTCの間に、攻撃者は「plain-crypto-js」という悪性の依存パッケージをaxiosのリリースに注入しました。
axiosはHTTPリクエストを簡素化するための最も人気のあるJavaScriptライブラリであり、通常、上記バージョンはそれぞれ週間1億以上、8,300万以上のダウンロードを記録しています。この悪性依存パッケージはWindows、macOS、Linuxに「WAVESHAPER.V2」バックドアを展開する難読化されたドロッパーです。
GTIGは、このアクティビティをUNC1069(2018年以降活動する金銭的動機のある北朝鮮系脅威アクター)に帰属するものとしています。これはUNC1069が以前使用していたWAVESHAPERの更新版であるWAVESHAPER.V2の使用、および本攻撃で使用されたインフラストラクチャのアーティファクト分析において、UNC1069の過去の活動に使用されたインフラストラクチャとの重複が確認されたことに基づいています。
3. 侵害の仕組み
3.1 アカウント侵害と不正公開
侵害の起点はaxiosのメンテナアカウント(jasonsaayman)の乗っ取りです。いずれの悪性バージョンも、GitHubに対応するタグやコミットは存在せず、メンテナアカウント経由でnpmへ直接CLIアップロードされました。
正規版(v1.14.0)と悪性版(v1.14.1)のnpm registryのマニフェストを比較すると、以下の差異があります。

正規リリースはGitHub Actions OIDC(trustedPublisher付き)による短命トークンで行われているため、trustedPublisherなし・gitHeadなしの手動CLIパブリッシュは明確な異常です。メンテナのメールアドレスが攻撃者管理の「ifstap@proton.me」に変更されていることも確認されています。
なお、v1.x系にはnpm trusted publishing(GitHub Actions OIDC)が設定されていましたが、publishワークフローが NODE_AUTH_TOKEN 環境変数も併用しており、npmはトークンとOIDCが両方存在する場合トークンを優先します。この構成が侵害の一因となった可能性も指摘されています。
3.2 悪意のある依存注入:postinstallフックの利用
今回の侵害では、axios自体のソースコードには悪性コードが注入されていません。代わりに、package.jsonの「dependencies」(axiosが依存するパッケージ設定)に「plain-crypto-js」という悪性パッケージが追加されており、そちらのpostinstallフックが攻撃の起点になります。
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"postinstall": "node setup.js"
}
つまり、「axios@1.14.1」または「axios@0.30.4」をインストール(CLIでは「npm install」した時点で悪性コードが実行されます。このインストールを回避するためには、インストール時のコマンドライン引数で「--ignore-scripts」を付けている必要がありました。
plain-crypto-jsはaxiosのソースコードから一切 import されておらず、ランタイム依存としての必然性がありません。依存追加だけで攻撃が成立するこの手口は、以前のevent-stream侵害でも用いられた手法です。
また、攻撃者はスキャン回避のために、悪性のaxiosバージョンを先に公開し、その後に悪性の「plain-crypto-js@4.2.1」を公開しました。これにより、悪性バージョンのaxiosをインストールしようとした場合、ほとんどのスキャナーでは異常を検知することができませんでした。
