まとめ
2026年3月30日から31日にかけて、axiosのバージョン1.14.1および0.30.4がnpm上で不正な依存関係により侵害され、感染したマシンにリモートアクセス型トロイの木馬(RAT)が仕込まれました。両バージョンは既に公開停止されています。安全なバージョンは1.14.0です。該当バージョンをインストールした場合、マシンが侵害されたとみなし、すべての認証情報を直ちに変更してください。
axiosとは何か、そしてなぜこれが重要なのか
axiosはnpmで週に1億回ダウンロードされる、主要なHTTPクライアントです。多くのフロントエンド・バックエンド・エンタープライズアプリケーションで利用されています。このような基盤パッケージが侵害された場合、影響範囲は非常に広大です。2026年3月30日から31日の短期間にnpm installを実行した開発者は、マルウェアを自身のマシンにインストールしてしまった可能性があります。
これは仮説ではなく、実際に発生した深刻なサプライチェーン攻撃です。任意コマンドの実行、システムデータの外部送信、永続化するRATが含まれていました。
あなたのチームがaxiosを利用し、ApidogでHTTPクライアントの統合を設計・テストしている場合は、次回のデプロイ前に以下の内容を必ず確認しましょう。
攻撃のタイムライン
-
2026年3月30日 — 23:59:12 UTC:
nrwise@proton.meのアカウントが、plain-crypto-js@4.2.1(悪意あるパッケージ)をnpmに公開。18時間前には正規のcrypto-jsのタイポスクワットであるクリーンなバージョン(4.2.0)も公開。 -
2026年3月31日 — 00:05:41 UTC: Socketの自動検出システムが
plain-crypto-js@4.2.1をマルウェアとして検出(公開から6分後)。 -
2026年3月31日 — 深夜直後:
axios@1.14.1がnpmに公開され、不正な依存としてplain-crypto-js@4.2.1を組み込む。このバージョンはGitHubリポジトリの公式タグには存在しない。 -
2026年3月31日 — 午前: GitHub issue
#10604でaxios@1.14.1と0.30.4の侵害が報告される。攻撃者は正規メンテナー以上のnpm権限を持っていた。 -
2026年3月31日:
axios@1.14.1と0.30.4がnpmから公開停止。トークンの失効と公開管理の強化、調査が開始。
攻撃の手口
この攻撃は、長期間有効なnpmトークンというワークフロー上のギャップを突いたものです。攻撃者はメンテナーの認証情報を侵害し、通常のリリースフロー外で新バージョンを公開しました。
新バージョンはplain-crypto-js@4.2.1を依存関係として持ちます。plain-crypto-jsは正規の暗号化ユーティリティを装っており、クリーンなバージョン履歴も用意されていました。
内部にはSocketが検出した多段階ペイロードが存在します。
- ステージ1 — 実行: npmライフサイクルスクリプトでコード実行、セカンダリペイロードをドロップ。
- ステージ2 — RATの展開: 恒久的なバックドアとしてRATをインストール。
- ステージ3 — データ抜き取り: RATが任意コマンド実行やシークレット情報の外部送信を行う。
RATは再起動後も残るため、パッケージを削除してもRATの明示的除去が必要です。
影響を受けていますか?
以下に該当する場合、マシンが侵害されている可能性があります。
-
2026年3月30日23:59 UTC〜2026年3月31日正午UTCの間に
npm install axiosまたはnpm installを実行した。 -
node_modules/axios/package.jsonのバージョンが1.14.1または0.30.4。 -
package-lock.jsonやyarn.lockでaxiosが1.14.1や0.30.4として解決されている。
確認手順:
# インストールされているバージョンを確認
npm list axios
# ロックファイルを確認
grep '"axios"' package-lock.json | head -5
# plain-crypto-jsの存在を確認
npm list plain-crypto-js
ls node_modules/plain-crypto-js 2>/dev/null && echo "INFECTED" || echo "Not found"
plain-crypto-jsが存在する場合、悪意あるバージョンを実行した証拠です。
今すぐすべきこと
1. axiosを直ちにアップデートする
npm install axios@1.14.0
# または最新の安全なバージョンに固定
npm install axios@latest
バージョン確認:
npm list axios
# 1.14.0またはそれ以上が表示されていることを確認
2. 侵害されたバージョンをインストールした場合
このケースは通常のアップデート以上の対応が必要です。マシンが侵害された前提で以下を実施してください。
- すべてのシークレット情報(APIキー、DB認証情報、SSHキー、クラウドトークン、.env変数等)を変更
- 環境変数の漏洩を確認
- 影響期間中の外部ネットワーク接続を監査(未知IPへの通信有無を確認)
- cronジョブ、スタートアップスクリプト、systemdサービスなど永続化の兆候をスキャン
- CIランナーや本番サーバーの場合は再イメージング。開発PCの場合も認証情報をすべて変更し、完全にクリーンと判断できるまで注意
3. CI/CDパイプラインを監査する
ビルドパイプラインで該当期間にnpm installが実行された場合、CI環境も侵害されている可能性があります。確認と対応を必ず行ってください。
# 影響期間のビルドログでaxios@1.14.1のインストール有無を確認
# 現在のCI環境がクリーンかチェック
npm list axios plain-crypto-js
CIで利用するすべての認証情報(デプロイキー、クラウド認証情報、レジストリトークン等)を変更してください。
4. ロックファイルを確認する
package-lock.jsonやyarn.lockで1.14.1が使われていた場合は再生成しましょう。
rm package-lock.json
npm install
新しいロックファイルが安全なバージョンのaxiosに解決されていることをコミット前に必ず確認してください。
Apidogを使用してaxiosのAPIコールを監査する
axiosアップデート後、APIクライアントの動作が変化していないか、Apidogで迅速に回帰テストを実行しましょう。
- axios@1.14.0にアップデート後、APIエンドポイントをApidogにインポート
- 回帰テストを実行し、リクエスト・レスポンスの改ざんが無いか検証
- Apidogのレスポンスアサーションで不正なフィールドやヘッダーが混入していないかチェック
例:
// Apidogのレスポンス後アサーション
pm.test("Response is clean — no injected fields", () => {
const body = pm.response.json();
pm.expect(body).to.not.have.property('__injected');
pm.expect(pm.response.headers.get('X-Injected-Header')).to.be.null;
});
Apidogで更新後のaxiosバージョンで完全なテストスイートを実行することで、出荷前にクリーンなベースラインを保証できます。
HTTPクライアントの回帰テストを設定するにはApidogを無料でお試しください。
npmにおけるサプライチェーン攻撃の阻止が困難な理由
axiosへの攻撃は例外ではなく、これまでにも同様の事例が発生しています。
- event-stream (2018): ビットコインウォレット標的のペイロード追加(週800万DL)
- ua-parser-js (2021): 暗号通貨マイナー・パスワード窃取ツールの混入
- node-ipc (2022): 指定地域IPを標的とした破壊的コード
- xz utils (2024): Linuxコア圧縮ライブラリへの2年越しのバックドア
- axios (2026): メンテナー認証情報侵害によるRAT配布
共通点は「公開アカウントへの信頼」が攻撃ベクトルとなっている点です。npmの公開権限やトークン管理が突破されると、攻撃者は信頼を乗っ取ることが可能です。
実践的な対策:
| 対策 | 内容 |
|---|---|
ロックファイル(package-lock.json) |
厳密なバージョン固定でサイレントアップデート防止 |
CIでのnpm audit
|
既知の脆弱性をデプロイ前に検出 |
| Socket.dev / Snyk | 振る舞い分析による未知脅威の検出 |
| npmの二要素認証 | 認証情報侵害の難易度上昇 |
有効期限の短いnpm publishトークン |
トークン漏洩時の被害期間最小化 |
| PRでのロックファイル確認 | 依存更新の差分をコードレビューで監査 |
axiosチームは長期有効トークンの危険性を認め、公開管理を厳格化しています。しかし本質的には、npmエコシステム全体での対策が不可欠です。
侵害の痕跡(IOCs)
-
悪意のあるパッケージ:
plain-crypto-js@4.2.1、axios@1.14.1、axios@0.30.4 -
公開者メール:
nrwise@proton.me - 挙動: npmインストール時のネットワーク接続、RAT永続化、環境変数の外部流出
- 安全なaxiosバージョン: 1.14.0以下(0.30.4は除外)、1.13.x、1.12.x
感染が疑われる場合、security@npmjs.comに報告し、関連ログを保存してください。
結論
axios 1.14.1の侵害は、依存関係のセキュリティ管理が一度だけの監査では不十分であり、継続的なプロセスであることを再認識させます。バージョン固定、CIでのSocket.dev(または同等ツール)による振る舞い分析、認証情報の即時変更、ロックファイルのコードレビューを徹底してください。
axiosアップデート後、API統合の信頼性を再構築する必要がある場合は、Apidogがテストシナリオ・アサーション・モックツールを提供します。本番環境投入前にHTTPクライアントの動作を確実に検証しましょう。
よくある質問
侵害されたaxiosのバージョンはどれですか?
axios@1.14.1とaxios@0.30.4です。両方ともnpmから公開停止済み。安全なバージョンは1.14.0、または1.13.x、1.12.xライン。
悪意のあるaxiosペイロードは何をしますか?
plain-crypto-js@4.2.1を依存関係として導入し、リモートアクセス型トロイの木馬(RAT)を含む多段階ペイロードを展開。このRATはリモートC2から任意コマンドを実行し、環境変数やシークレット情報を外部流出、再起動後も永続化します。
侵害されたバージョンをインストールしたか知るには?
npm list axiosを実行し、1.14.1や0.30.4が表示されたら影響あり。npm list plain-crypto-jsも確認し、存在すれば悪意コードが実行されています。
axiosを更新するだけで十分ですか?
いいえ。アップデートは今後の不正依存の排除にはなりますが、RATは既にマシンに永続化している可能性があります。該当バージョンをインストールした場合、すべてのシークレット情報を変更し、永続化メカニズムへの対応が必要です。
攻撃者はメンテナーでなくとも、npmへ公開できた理由は?
攻撃者がメンテナー認証情報を侵害し、公開権限を持つ長期有効npmトークンを悪用した可能性が高いです。axiosチームは現在も調査中で、公開管理体制を強化中。
今回のケースと通常の脆弱性との違いは?
脆弱性は正規コードの欠陥、サプライチェーン攻撃は信頼された公開チャネル経由で悪意コードを導入。今回の侵害コードはGitHubには存在せず、npm公開プロセスに直接注入されました。
今後のサプライチェーン攻撃対策は?
ロックファイル活用、CIでのnpm audit、Socket.dev等の振る舞い分析ツール導入、npmアカウント2FA、有効期限付き公開トークン、コードレビューでロックファイル差分の監査を徹底。
Top comments (0)