axiosの特定バージョンをnpmから取得しただけで、開発端末やCIランナーにRATが展開される事例が確認されました。
問題があったバージョンは公開から約3時間で削除されましたが、インストール済み環境では自己削除と偽装によって痕跡が見えにくくなります。
node_modulesを目視しても異常に気づけない構造です。macOS、Windows、Linuxそれぞれに異なる常駐ファイルが残ります。
該当バージョンを使用したかどうかで、確認内容と対応手順が変わります。環境が安全かどうかを自分で判断できる具体的なコマンドと復旧条件を整理します。
何が起きたか
JavaScriptライブラリ「axios」に、ウイルス入りの偽バージョンが混入しました。
ウイルスはaxios本体ではなく、axiosをインストールしたときに自動で一緒に入る別パッケージ plain-crypto-js に仕込まれていました。
「ライブラリを最新版に更新した」だけで感染する可能性があり、開発者側の操作ミスや不注意が原因ではありません。なお、latestを自動取得する運用は、この種の事故に遭遇しやすい側面があります。
参考:なぜlatestタグでの運用は危険なのか|バージョン固定の重要性
インストールした瞬間、裏側でこっそり外部サーバーに接続し、パソコンの中にマルウェアを仕込みます。しかもインストール後には証拠を自動で消すため、後から見ても「何もなかった」ように見えます。
感染したまま開発を続けると、パスワードやAPIキーなどの機密情報が盗まれる可能性があります。「自分は大丈夫」と判断する前に、インストール履歴を確認してください。
改ざんされたaxiosのバージョンと公開時間
2026年3月31日、npmに公開された axios 1.14.1 と 0.30.4 に、実行時依存として不正パッケージが追加されました。
公開から約2時間〜3時間で削除されていますが、インストール済み環境では影響が残ります。安全な直前バージョンは 1.14.0 と 0.30.3 です。
※一般的な市場データに基づくaxiosは、週1億回以上ダウンロードされるHTTPクライアントです。
アカウント乗っ取りによる手動publish
攻撃者はaxiosの主要メンテナー(jasonsaayman)のnpmアカウントに登録されたメールアドレスを攻撃者管理のProtonMailアドレスに書き換え、長期有効なクラシックトークンを使って悪意あるバージョンを手動でpublishしました。
正規のaxiosリリースはGitHub ActionsのOIDCトークンで発行されるため、npmレジストリのメタデータに trustedPublisher フィールドが存在します。
axios@1.14.1 にはこのフィールドがなく、対応するGitHubコミットもタグも存在しません。
パッケージ名と公開者名が正規と同一でも、OIDC署名の有無で侵害リリースを識別できます。
ソースコードに不審点が無い理由
改ざんはaxiosのソースコード内部では発生していません。
package.jsonに未使用の依存パッケージが1行追加されただけです。axiosのコード内部を読んでも異常は発見できませんが、package.jsonの依存差分を確認すれば検出できます。
plain-crypto-jsはaxiosのソースコード86ファイルのどこにも import も require() もされておらず、依存に追加されているにもかかわらずコード内で一切使われていないことが高確度の異常シグナルです。
npmの依存解決とpostinstallの自動実行が悪用されました。
攻撃の仕組み

使われた偽依存パッケージplain-crypto-js
依存に追加された plain-crypto-js@4.2.1 は、axiosのコード内で一切読み込まれません。
存在目的は postinstall スクリプトの実行のみです。インストール直後に setup.js が起動します。
postinstallでRATが実行される流れ
npm install 実行時、依存解決により plain-crypto-js が取得されます。
postinstall により setup.js が自動実行され、外部C2サーバーへ接続し、OS別の2段階目ペイロードを取得します。
macOS・Windows・Linuxで異なるファイルが作成され、バックグラウンドで起動します。
実行後に証拠が消える仕組み
setup.js は実行後に自分自身と package.json を削除し、事前に用意されたクリーンな package.json に置き換えます。
node_modules/plain-crypto-js を後から確認しても、不審なpostinstallは見つかりません。
ディレクトリの存在自体が実行済みの証拠になります。
自分の環境が該当するかの判定手順
axiosバージョンの確認コマンド
npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"grep -A1 '"axios"' package-lock.json | grep -E "1\.14\.1|0\.30\.4"
node_modules内のディレクトリ確認
ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENTIALLY AFFECTED"
OS別の感染痕跡ファイル確認
- macOS:
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null && echo "COMPROMISED" - Linux:
ls -la /tmp/ld.py 2>/dev/null && echo "COMPROMISED" - Windows:
dir "%PROGRAMDATA%\wt.exe" 2>nul && echo COMPROMISED
CI/CDと開発端末で確認するポイント
CIログの確認観点
該当時間帯に npm install を実行しているジョブが存在する場合、影響対象になります。
インストールログに axios 1.14.1 または 0.30.4 が含まれているかを確認します。該当するジョブでは、投入されたシークレットの漏洩を前提に扱います。
開発端末で確認する理由
postinstallはローカル端末でも実行されます。CIのみ安全でも、開発者がローカルで npm install を実行している場合は影響対象になります。
SSH鍵、クラウド資格情報、.env の内容が取得対象になります。
該当した場合の復旧条件
クリーンなバージョンへの固定
npm install axios@1.14.0npm install axios@0.30.3
資格情報ローテーション対象
npmトークン、AWS/GCP/Azureキー、SSH秘密鍵、CIシークレット、.envに含まれる値をすべてローテーションします。
該当環境はクリーン再構築を前提に扱います。
再発防止としての--ignore-scripts
npm ci --ignore-scripts
CI環境ではpostinstallを実行させない運用に切り替えます。
同日発生の関連セキュリティ事案
同日Claude Codeソース流出も起きているので合わせて注意が必要です。