axiosが乗っ取られた──npm史上最も巧妙なサプライチェーン攻撃の全貌
JavaScriptの世界で最も信頼されていたHTTPクライアントが、たった一つの認証情報から崩壊した。週間8300万ダウンロードを誇るaxiosに何が起きたのか。
JavaScriptの世界で最も信頼されていたHTTPクライアントが、たった一つの認証情報から崩壊した。週間8300万ダウンロードを誇るaxiosに何が起きたのか。
メンテナーのアカウントが奪われた
axiosの正規リリースが、静かに汚染されている。
2026年3月31日(日本時間)、セキュリティ企業StepSecurityは、npmに公開されたaxiosの2つのバージョン──1.14.1と0.30.4──にリモートアクセス型トロイの木馬(RAT)が仕込まれていたことを公表した。攻撃者はaxiosの主要メンテナーであるジェイソン・サーイマンのnpmアカウントを乗っ取り、登録メールアドレスを匿名のProtonMailに変更。正規のGitHub Actions CI/CDパイプラインを完全に迂回し、npm CLIから直接、毒入りパッケージを公開した。
axiosのGitHubリポジトリには、v1.14.1に対応するコミットもタグも存在しない。この「リリース」はnpm上にしか存在しなかった。
SocketのCEO、フェロスは即座にXで警告を発した。「npmで最も依存されているパッケージの一つに対する、現在進行形のサプライチェーン攻撃だ」と。
🚨 CRITICAL: Active supply chain attack on axios -- one of npm's most depended-on packages.
— Feross (@feross) March 31, 2026
The latest [email protected] now pulls in [email protected], a package that did not exist before today. This is a live compromise.
This is textbook supply chain installer malware. axios…
この投稿は瞬く間に拡散し、AI研究者のアンドレイ・カルパシー(Eureka Labs創設者、元OpenAI/Tesla AI責任者)も自身のシステムをスキャンした結果をXに投稿。バージョンが固定されていなければ感染していたと述べ、パッケージ管理のデフォルト設定そのものに構造的な問題があると指摘した。
New supply chain attack this time for npm axios, the most popular HTTP client library with 300M weekly downloads.
— Andrej Karpathy (@karpathy) March 31, 2026
Scanning my system I found a use imported from googleworkspace/cli from a few days ago when I was experimenting with gmail/gcal cli. The installed version (luckily)… https://t.co/9DOVWH5KK1
18時間の周到な準備
この攻撃は衝動的な犯行ではない。18時間前から入念に仕込まれていた。
攻撃者はまず3月30日午後3時ごろ(JST)、[email protected]という「無害な」パッケージをnpmに公開した。正規のcrypto-jsライブラリのコピーで、悪意のあるコードは一切含まれていない。目的はただ一つ──npmの公開履歴を偽装し、セキュリティスキャナーの「新規アカウント」アラームを回避することだ。正規のcrypto-jsライブラリのコピーで、悪意のあるコードは一切含まれていない。目的はただ一つ──npmの公開履歴を作り、セキュリティスキャナーの「新規アカウント」アラートを回避することだ。
そして約18時間後、同じアカウントから[email protected]が公開された。今度はpostinstallフックに、OS検出・C2サーバー通信・RAT配信を行うドロッパーが仕込まれていた。
plain-crypto-jsはaxiosのソースコード内で一度もimportされていない。依存関係リストに存在するだけの「幽霊パッケージ」だ。
それから39分以内に、axiosの1.x系と0.x系の両方のブランチが汚染された。レガシーユーザーも最新ユーザーも、逃げ場はなかった。
感染すると何が起きるか
npm install [email protected]を実行した瞬間、plain-crypto-jsのpostinstallスクリプトが自動的に走る。StepSecurityの実行時検証によれば、C2サーバーへの最初の通信はnpm install開始からわずか1.1秒後に発生した。
ドロッパーはOSを検出し、プラットフォームごとに異なるペイロードを配信する。macOSではAppleScriptを経由してバイナリを/Library/Caches/com.apple.act.mondに配置し、Appleのシステムプロセスに偽装。WindowsではPowerShellのコピーを%PROGRAMDATA%\wt.exeとしてWindowsターミナルに見せかけ、VBScript経由でRATを実行する。Linuxでは/tmp/ld.pyにPythonスクリプトをダウンロードし、バックグラウンドで起動する。
| macOS | Windows | Linux | |
|---|---|---|---|
| 配信手法 | AppleScript | VBScript→PowerShell | Pythonスクリプト |
| 偽装対象 | Appleデーモン | Windowsターミナル | なし |
| 確認ファイル | com.apple.act.mond |
wt.exe |
ld.py |
| 実行経路 | osascript→curl→バイナリ | cscript→cmd→PS | curl→python3 |
| 証拠消去 | 一部 | 一部 | なし |
| C2識別 | product0 |
product1 |
product2 |
※確認ファイルの完全パス:macOS=/Library/Caches/com.apple.act.mond、Windows=%PROGRAMDATA%\wt.exe、Linux=/tmp/ld.py
※証拠消去「一部」=中間スクリプトは自己削除するが永続バイナリは残存。Linuxはファイルがディスク上に残る
※C2ドメイン:sfrclak.com:8000 出典:StepSecurity技術分析
そして、すべてが終わった後に証拠を消す。setup.jsは自分自身を削除し、悪意のあるpackage.jsonを「無害な」バージョンに差し替える。事後にnode_modulesフォルダを覗いても、何も起きなかったかのように見える。
plain-crypto-jsディレクトリが存在すること自体が、ドロッパーが実行された証拠になる。中身が「きれい」に見えても、それは偽装だ。
約3時間で削除、だが傷跡は残る
npmは日本時間3月31日の昼過ぎまでに両バージョンを削除し、plain-crypto-jsにセキュリティホールドをかけた。[email protected]が公開されていたのは約2時間53分、[email protected]は約2時間15分。短い窓だった。
だが、週間8300万ダウンロードのパッケージにとって、「短い」は相対的な概念だ。この数時間の間にnpm installを実行した開発者は、npmトークン、AWSキー、SSHキー、.envファイルに保存されたあらゆる秘密を漏洩した可能性がある。CI/CDパイプラインでインストールが走った場合、被害はさらに広がる。
The Hacker Newsの報道では、同じマルウェアを配布していた別パッケージ──@shadanai/openclawと@qqbrowser/openclaw-qbot──も確認されている。汚染されたaxiosを「内包」する形で、サプライチェーンの連鎖が起きていた。
構造的な問題が露呈している
なぜ一つのトークンで崩壊するのか
axiosの正規リリースはGitHub ActionsとnpmのOIDC Trusted Publisher機構を使い、暗号学的にワークフローと紐づけられている。それでも、メンテナーが保持していた長期間有効なクラシックnpmトークンが一つ漏洩しただけで、すべてが無意味になった。
npmのパブリッシュ認証は、有効なトークンがあればそれだけで通る。メール変更に追加の本人確認はなく、正規の所有者はアカウント回復すらできなくなった。GitHubのissue #10604では、協力者が「攻撃者の権限が自分より高く、アクセスを取り消せない」と報告している。
npm installのデフォルトが危険すぎる
カルパシーが指摘した通り、^1.14.0のようなキャレット指定は、次のnpm installで自動的に最新の1.14.1を引き込む。ほとんどの開発者はこのデフォルト設定を変更していない。bunやpnpmはライフサイクルスクリプトをデフォルトで実行しないが、npmはそうではない。
iTnewsの報道によれば、暗号通貨マイナーやランサムウェアのコンポーネントが見つかっていないことから、金銭目的ではなくAPT(高度持続的脅威)による諜報活動の可能性も指摘されている。
半年で3度目の大規模攻撃
これは孤立した事件ではない。2025年9月にはChalkとDebugがフィッシング攻撃でメンテナーアカウントを奪われ、同年12月にはShai-Hulud 2.0ワームが500以上のパッケージを汚染し、40万件の開発者シークレットを窃取した。同じパターンが繰り返されている──メンテナーアカウントが単一障害点であり、メール変更に追加検証がなく、CLIパブリッシュがCI/CDを迂回できる。
npmが計画している対策──必須FIDO 2FA、トークンのデフォルト無効化、Trusted Publishingの強制──はまだ開発中だ。
開発者が今すぐやるべきこと
該当バージョンをインストールした開発者は、システムが侵害されたと想定すべきだ。axiosを1.14.0または0.30.3にダウングレードし、node_modules/plain-crypto-jsディレクトリを削除。npm install --ignore-scriptsで再インストールする。そしてnpmトークン、クラウド認証情報、SSHキー、CI/CDシークレットなど、影響を受けた可能性のあるすべての認証情報をローテーションする必要がある。
macOSなら/Library/Caches/com.apple.act.mond、Windowsなら%PROGRAMDATA%\wt.exe、Linuxなら/tmp/ld.pyの存在を確認すること。C2ドメインsfrclak.comへの通信をファイアウォールやDNSレベルでブロックすることも推奨される。
axiosチームはGitHub上でPR #10591をマージし、侵害バージョンをnpmレジストリ上で非推奨としてマークするワークフローを追加した。対応は迅速だった。だが、根本的な問題は残っている。
npm installを実行するたびに、私たちは見知らぬ誰かの認証情報の安全性に賭けている。その賭けに負けたとき、気づけるかどうか──それが、いま問われている。
参照元
他参照
関連記事
- Axiosを侵した「偽の会議」――北朝鮮ハッカーの手口
- Claude Code流出、Anthropicが認めた代償
- Claude Codeのソースコード全文が流出、npmの設定ミスで51万行が丸見えに
- イラン系ハッカー、米国の水道・電力を「実際に破壊」──FBIが異例の緊急警告
- Flatpakに致命的な脆弱性、サンドボックスを完全に突破される
- 米国サイバー犯罪被害が過去最高208億ドル突破、AIとクリプト詐欺が急増
- GmailのGemini統合、Googleが「メールでAIを訓練しない」と改めて表明
- Firefox 149.0.2公開、5件の高深刻度脆弱性を修正
- AI検索でブランドを売り込む新SEO産業、ゴールドラッシュの内幕
- OpenAI・Anthropic・Googleが共闘、中国への「蒸留」流出で情報共有