簡単に言うと (TL;DR)
2026年3月31日、攻撃者は、週に8300万回ダウンロードされる最も人気のJavaScript HTTPクライアントであるAxiosのプライマリメンテナーのnpmアカウントを侵害しました。彼らは、開発者のマシンから認証情報、SSHキー、クラウドトークンを盗むクロスプラットフォームのRAT(リモートアクセスツール)を含む悪意のあるバージョン(1.14.1および0.30.4)を公開しました。直ちにAxios 1.14.0にダウングレードし、すべてのシークレットをローテーションし、システム上で侵害の痕跡がないかスキャンしてください。
はじめに
Axiosは、他のどのJavaScriptライブラリよりも多くのHTTPリクエストを処理しています。過去5年間にAPIクライアントを構築したり、エンドポイントをテストしたり、フロントエンドをバックエンドに接続したりしたことがあるなら、おそらくそれを使ったことがあるでしょう。
2026年3月31日00:21 UTC、脅威アクターは乗っ取ったメンテナーアカウントを通じてAxiosバージョン1.14.1を公開しました。そのパッケージは正規のリリースと寸分違わず見えました。変更点は極めて巧妙で、86個のファイルのうちpackage.jsonだけが変更されていました。しかし、その単一のファイルがplain-crypto-jsというファントム依存関係を注入し、npm installを実行するすべてのマシンにリモートアクセスツールを展開しました。
悪意のあるバージョンは、npmによって削除されるまで約2〜3時間公開されていました。週に8300万回ダウンロードされる中で、2〜3時間です。
この記事では、攻撃がどのように行われたか、システムが侵害されたかどうかを検出する方法、そしてAPIチームが今後の依存関係管理について変更すべき点について詳しく解説します。
Axiosサプライチェーン攻撃の展開方法
タイムライン
攻撃者は18時間の間にこの作戦を正確に実行しました。
- 3月30日 05:57 UTC: クリーンなデコイパッケージ
plain-crypto-js@4.2.0がnpmに公開されました。最初に「クリーンな」バージョンを公開することで、パッケージにレジストリ上での短い履歴を与え、疑わしさを軽減しました。 - 3月30日 23:59 UTC: 悪意のあるバージョン
plain-crypto-js@4.2.1が公開され、ドロッパーを含むpostinstallフックが追加されました。 - 3月31日 00:21 UTC: 侵害された
jasonsaaymanアカウントを使用してaxios@1.14.1がリリースされました。 - 3月31日 01:00 UTC: 39分後には
axios@0.30.4がリリースされ、0.xブランチに固定されたプロジェクトを標的にしました。 - 3月31日 約03:15 UTC: コミュニティからの報告を受け、npmは両方のAxiosバージョンを非公開にしました。
- 3月31日 04:26 UTC: npmは
plain-crypto-jsの再公開を防ぐため、セキュリティホルダーのスタブを公開しました。
アカウントがどのように侵害されたか
攻撃者は、Axiosの主要メンテナーであるjasonsaaymanのnpmアカウントを乗っ取りました。彼らは登録されているメールアドレスをifstap@proton.meに変更しました。主要なフォレンジック証拠:
- 正規のAxiosリリースは、npmのOIDC Trusted PublisherメカニズムとGitHub Actionsを使用しています。悪意のあるバージョンは、OIDCバインディングが全くありませんでした。
- 侵害されたリリースには
gitHeadフィールドが存在せず、対応するGitHubコミットがないことを意味します。 - 攻撃者は、CI/CDを経由する代わりに、盗まれた長期間有効なnpmアクセストークンを使用して手動で公開しました。
この違いは重要です。もしあなたの組織がnpmパッケージを公開しているのであれば、リリースにおけるOIDCバインディングとCI/CDの履歴の欠如は、自動チェックする価値のある危険信号です。
依存関係注入の手法
この攻撃が巧妙だったのは次の点です。攻撃者はAxiosのソースコードを変更しませんでした。彼らはpackage.jsonの1行を変更し、plain-crypto-js@^4.2.1をランタイム依存関係として追加しました。このパッケージはAxiosのコードベースのどこにもインポートされていませんでした。それはnpm install中にそのpostinstallフックをトリガーするためだけに存在していました。
バイナリ分析により、その外科的な精密さが確認されました。パッケージ内の全86ファイルのうち、クリーンな1.14.0リリースと侵害された1.14.1の間で異なっていたのはpackage.jsonだけでした。
悪意のあるペイロードの機能
ドロッパーのメカニズム
plain-crypto-jsのpostinstallフックは、setup.jsという4.2KBの難読化されたファイルを実行しました。2層の難読化を使用しました。
- 第1層: 文字列
"OrDeR_7077"から派生したキーを使用したXOR暗号 - 第2層: 文字反転を伴うBase64エンコーディング
デコードされると、ドロッパーはホストオペレーティングシステムを特定し、プラットフォーム固有のペイロードを実行しました。
プラットフォーム固有の攻撃経路
macOS:
Writes AppleScript to /tmp/6202033
Executes via osascript
Downloads payload to /Library/Caches/com.apple.act.mond
Windows:
Copies PowerShell to %PROGRAMDATA%\wt.exe (persistence artifact)
Executes VBScript dropper via cscript
Linux:
Downloads Python RAT to /tmp/ld.py
Executes via nohup python3
これら3つのブランチはすべて、プラットフォーム固有のPOSTボディでコマンド&コントロールサーバーに接触しました。
- macOS:
packages.npm.org/product0 - Windows:
packages.npm.org/product1 - Linux:
packages.npm.org/product2
RATの機能
展開されたリモートアクセスツールは以下をサポートしています。
- 任意のシェルコマンド実行
- ファイルシステムの列挙と情報漏洩
- プロセスリスト表示とインジェクション
- メモリ内バイナリインジェクション(ファイルレス実行)
- C2インフラへの60秒間隔のビーコン通信
簡単に言えば、攻撃者はあなたの開発マシンを完全にリモート制御できることになります。あなたの.envファイルを読み取り、APIキーを盗み、SSHキーをコピーし、クラウドプロバイダーのトークンを収集できます。
フォレンジック対策:自己削除型ペイロード
実行後、ドロッパーは3つのクリーンアップ手順を実行しました。
setup.js自体を削除- 悪意のある
package.jsonを削除 - プリステージされた
package.md(バージョン4.2.0を報告する)をpackage.jsonに改名
これにより、npm listがペイロードを実行した4.2.1ではなく4.2.0を報告するという欺瞞層が作成されました。後から依存関係をチェックした開発者は、何も異常に気づかないでしょう。
この攻撃の背後にいるのは誰か
Google脅威インテリジェンスグループは、Axios攻撃を北朝鮮の脅威アクターと疑われるUNC1069に帰属させました。macOSマルウェアは、Mandiantが2026年2月に追跡したC++バックドア「WAVESHAPER」と「かなりの重複」を示しています。
北朝鮮の国家支援グループは、サプライチェーン攻撃に関して深い経験を持っています。彼らはこれまで、侵害された開発ツールを使用して暗号通貨を盗んできました。そして、今回の作戦も同じ手口に従っています。広く使われている開発ツールを侵害し、数千の組織にわたる認証情報とクラウドインフラへのアクセスを得るというものです。
その巧妙さは注目に値します。2段階の依存関係注入、マルチプラットフォームRATの展開、およびフォレンジック対策のクリーンアップはすべて、十分なリソースを持つ作戦であることを示唆しています。これはスクリプトキディがクリプトマイナーをドロップしたものではありません。開発者のワークステーションを標的とした諜報活動です。
影響を受けているか確認する方法
ステップ1:Axiosのバージョンを確認する
Axiosを使用しているすべてのプロジェクトでこれを実行してください。
npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"
これが結果を返す場合、あなたのプロジェクトは侵害されたバージョンをインストールしています。
ステップ2:悪意のある依存関係を確認する
ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENTIALLY AFFECTED"
ドロッパーが自己削除したとしても、そのディレクトリの存在はペイロードが実行されたことを確認します。
ステップ3:システム上のRATアーティファクトを確認する
macOS:
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null
Linux:
ls -la /tmp/ld.py 2>/dev/null
Windows (PowerShell):
Test-Path "$env:PROGRAMDATA\wt.exe"
ステップ4:ネットワークインジケーターを確認する
以下の接続をブロックし、スキャンしてください。
- C2ドメイン:
sfrclak.com - C2 IP:
142.11.206.73 - C2 URL:
http://sfrclak.com:8000/6202033
ステップ5:CI/CDビルドログを確認する
3月31日00:21 UTCから03:15 UTCまでの間のCI/CDパイプライン実行をすべて確認してください。この時間帯にAxiosを解決したnpm installまたはnpm ciの実行は、ビルド環境内でドロッパーを実行した可能性があります。
即座の修復手順
侵害の痕跡を発見した場合、影響を受けたシステムは完全に侵害されているものとして扱ってください。優先順位リストです。
1. 直ちにAxiosをダウングレードする
npm install axios@1.14.0
または0.xブランチの場合:
npm install axios@0.30.3
2. package.jsonにバージョンオーバーライドを追加する
悪意のあるバージョンへの推移的な解決を防ぎます。
{
"overrides": {
"axios": "1.14.0"
}
}
Yarnの場合:
{
"resolutions": {
"axios": "1.14.0"
}
}
3. 悪意のあるパッケージを削除する
rm -rf node_modules/plain-crypto-js
4. すべての認証情報をローテーションする
ドロッパーがあなたのマシンで実行された場合、以下が侵害されたと仮定してください。
- npmトークン
- AWS/GCP/Azure認証情報
- SSHキー
- GitHubトークン
.envファイル内のAPIキー- データベース認証情報
- 環境変数に保存されているあらゆるシークレット
すべてをローテーションしてください。RATが活動中に何を情報漏洩したかを知る方法はありません。
5. ネットワークレベルでC2をブロックする
ホストファイルまたはファイアウォールルールに追加してください。
echo "0.0.0.0 sfrclak.com" | sudo tee -a /etc/hosts
6. アーティファクトが見つかった場合、マシンを再構築する
シェル実行とファイルシステムアクセスが可能なRATは、何でも変更できます。ステップ3でアーティファクトを発見した場合、システムを信用しないでください。既知の正常な状態から再構築してください。
API開発チームのための長期的な防御策
ロックファイルを使用し、正確なバージョンを固定する
Axios攻撃は^セムバー範囲を悪用しました。もしpackage.jsonが"axios": "^1.14.0"と指定している場合、npmは最新の互換バージョンを解決しますが、攻撃期間中は1.14.1でした。
{
"dependencies": {
"axios": "1.14.0"
}
}
正確なバージョンを固定してください。常にpackage-lock.jsonまたはyarn.lockをコミットしてください。CI/CDではnpm installの代わりにnpm ciを実行して、ロックファイルの解決を強制してください。
CI/CDでpostinstallスクリプトを無効にする
攻撃全体は、npm install中にpostinstallフックが実行されることに依存していました。これは無効にできます。
npm ci --ignore-scripts
これにより、ネイティブコンパイルが必要な一部のパッケージが壊れる可能性があります。まずビルドをテストし、その後、必要なパッケージに対して.npmrcを使用してスクリプトを選択的に許可してください。
ignore-scripts=true
依存関係を定期的に監査する
npm audit
npx socket-security/cli audit
これらをCI/CDでゲートとして実行してください。重大または高レベルの脆弱性はビルドをブロックすべきです。
HTTPクライアントの依存関係の表面積を減らす
この攻撃が提起するより深い問いは、なぜあなたのAPIテストワークフローが、侵害される可能性のあるサードパーティ製HTTPライブラリに依存しているのか、ということです。
Apidogは、APIテスト、デバッグ、ドキュメント作成のための組み込みHTTPクライアントを提供します。あなたのテストスタックにAxios、node-fetch、gotは必要ありません。HTTPクライアントはプラットフォームの一部であり、侵害される可能性のあるサードパーティの依存関係はありません。
特にAPIテストの場合、HTTPリクエストをApidogに移行することで、攻撃対象領域全体を排除できます。
- APIテスト: Axiosベースのテストスクリプトを記述する代わりに、Apidogのビジュアルテストビルダーを使用する
- APIデバッグ: カスタムHTTPクライアントコードの代わりに、Apidogの組み込みリクエストインスペクターを使用する
- モックサーバー: Express + Axiosでモックエンドポイントを構築する代わりに、Apidogのスマートモックを使用する
- CI/CD統合: npm HTTP依存関係なしで自動APIテストのためにApidog CLIを使用する
Apidogを無料で試してください。APIワークフローからHTTPライブラリの依存関係を削除することが、どのようにサプライチェーンのリスクを軽減するかを体験してください。
パッケージの来歴を確認する
npmは現在、Sigstoreを介したパッケージの来歴をサポートしています。依存しているパッケージがこれを使用しているか確認してください。
npm audit signatures
悪意のあるAxiosバージョンにはOIDCの来歴がありませんでした。CI/CDパイプラインからの正規のリリースには、そのビルド元の暗号学的証明が含まれています。来歴のない新しいバージョンが現れた場合、それを疑ってかかるべきです。
JavaScriptエコシステムにとっての意味
信頼モデルが破綻している
npmの信頼モデルは、メンテナーアカウントのセキュリティに依存しています。たった1つの侵害された認証情報で、攻撃者は週に8300万のプロジェクトがインストールするパッケージを制御できます。二要素認証は役立ちますが、侵害された開発環境から長期間有効なアクセストークンが盗まれる可能性は依然としてあります。
コミュニティではいくつかの構造的変更が議論されています。
- OIDC公開の義務化: ダウンロードしきい値を超えるすべてのパッケージに対し、長期間有効な認証情報の代わりにOIDCトークンを使用したCI/CDベースの公開を義務付ける。
- 2人によるリリース承認: 重要なパッケージのリリースには、2人目のメンテナーによる承認を義務付ける。
- ランタイム権限スコープ: Denoの権限モデルと同様に、
postinstallスクリプトがアクセスできる範囲を制限する。
サプライチェーン攻撃は減速しない
この攻撃は、RubyGemsの分裂事件や、継続しているPyPIの依存関係に関する懸念から数日後に発生しました。あらゆる言語エコシステムのパッケージレジストリが、継続的な攻撃に晒されています。API開発者は、依存関係ツリーを利便性としてではなく、攻撃対象領域として考える必要があります。
Redditの議論は、その感情をよく捉えています。「今日のインターネットにおける最大の弱点はNPMであり、それは依然として巨大な大災害を引き起こすだろう。」その誇張に同意するかどうかにかかわらず、Axios攻撃は、その被害範囲が現実のものであることを示しています。
比較:HTTPクライアントの依存関係アプローチ
| アプローチ | サプライチェーンリスク | メンテナンス負担 | テスト機能 |
|---|---|---|---|
| Axios + カスタムスクリプト | 高い(サードパーティ依存) | 高い(バージョン管理) | 手動設定が必要 |
| Node.jsネイティブfetch | 低い(ランタイムに組み込み) | 低い | 限られたテスト機能 |
| Apidog組み込みクライアント | なし(npm依存なし) | なし(プラットフォーム管理) | 全面的なテスト、モック、ドキュメント |
| curl/httpieスクリプト | 低い(システムレベルツール) | 中 | 限られた自動化 |
よくある質問
Axiosは現在使用しても安全ですか?
はい。バージョン1.14.0と0.30.3はクリーンです。侵害されたバージョン(1.14.1と0.30.4)は約3時間以内に非公開にされました。npm list axiosでインストールされているバージョンを確認し、ロックファイルを確認して安全なバージョンであることを確かめてください。
RATが私のマシンで実行されたかどうかを知るにはどうすればよいですか?
プラットフォーム固有のアーティファクトを確認してください:macOSでは/Library/Caches/com.apple.act.mond、Linuxでは/tmp/ld.py、Windowsでは%PROGRAMDATA%\wt.exeです。また、いずれかのプロジェクトにnode_modules/plain-crypto-jsが存在するかどうかも確認してください。ドロッパーは自己削除するため、侵害されたバージョンをインストールした場合、アーティファクトがないからといって安全であるとは限りません。
Axiosの使用を完全にやめるべきですか?
必ずしもそうではありません。Axiosは強力な実績を持つ、よくメンテナンスされたライブラリです。しかし、この攻撃は、そもそもサードパーティのHTTPクライアントが必要かどうかを評価するきっかけとなるべきです。Node.js 18+にはネイティブのfetchが含まれています。APIテストの場合、Apidogのようなプラットフォームは、この依存関係を排除する組み込みHTTPクライアントを提供します。
プロジェクトでサプライチェーン攻撃を防ぐにはどうすればよいですか?
正確な依存関係バージョンを固定し、ロックファイルをコミットし、CI/CDでnpm ci --ignore-scriptsを実行し、依存関係を定期的に監査し、npm audit signaturesでパッケージの来歴を確認し、依存関係ツリーを最小限に抑えてください。HTTP通信にnpmパッケージに依存しない統合プラットフォームにAPIテストワークフローを移行することも検討してください。
この攻撃はClaude Codeのソースコード漏洩と関連がありますか?
どちらの出来事も同じ日(2026年3月31日)に発生しましたが、無関係です。Axios攻撃は国家支援の脅威アクターによる意図的なサプライチェーン侵害でした。Claude Codeの漏洩は、本番環境でソースマップを出荷してしまったBunビルドツールのバグに起因するものです。この偶然のタイミングは、npmレジストリ全体のセキュリティに関する議論を加速させました。
Axios攻撃の背後にいたのは誰ですか?
Google脅威インテリジェンスグループは、この攻撃を北朝鮮の脅威アクターと疑われるUNC1069に帰属させました。macOSマルウェアは、Mandiantが追跡しているバックドア「WAVESHAPER」とかなりの重複が見られます。北朝鮮のグループは、サプライチェーン攻撃に関して広範な経験を持ち、通常は開発者の認証情報と暗号通貨インフラを標的にしています。
何人の開発者が影響を受けましたか?
悪意のあるバージョンは約2〜3時間公開されていました。週に8300万回ダウンロードされることから、潜在的な露呈は重大です。npmは公式な影響数を公表していません。StepSecurityのランタイム検出は、npm installの開始から依存関係の解決が完了するまでの1.1秒以内に、ドロッパーがC2に接触したことを確認しました。
Apidogはサプライチェーン攻撃を防ぐのに役立ちますか?
Apidogは、APIテスト、デバッグ、ドキュメント作成のための組み込みHTTPクライアントを提供することで、主要な攻撃ベクトルの一つを排除します。テストワークフローでAxios、node-fetch、その他のHTTPライブラリをインストールする必要はありません。これにより、npmの依存関係の表面積が減少し、侵害されたHTTPクライアントパッケージがAPI開発プロセスに影響を与えるリスクが排除されます。
主な要点
- Axiosサプライチェーン攻撃は、たった1つの盗まれたメンテナーアカウントを通じて、週に8300万回以上のダウンロードを侵害しました
- RATはすべてのプラットフォーム(macOS、Windows、Linux)を標的とし、認証情報、SSHキー、クラウドトークンを盗みます
- 上記の検出手順を使用して、直ちにシステムを確認してください
- 正確な依存関係バージョンを固定し、CI/CDでpostinstallスクリプトを無効にしてください
- APIテストにはApidogのような組み込みツールを使用して、HTTPクライアントの依存関係の表面積を減らしてください
- パッケージレジストリのセキュリティは、npm、PyPI、RubyGemsに影響を与えるシステム的な問題です
Axios攻撃は警鐘です。node_modules内のすべての依存関係は、信頼に関する決定です。それらの決定をデフォルトではなく、意図的に行っていることを確認してください。
