2026年3月31日、npmのaxiosメンテナーアカウントが乗っ取られ、悪意あるバージョン(1.14.1 / 0.30.4)が公開されました。postinstallスクリプト経由でクロスプラットフォームRATが配布された、典型的なサプライチェーン攻撃の全容と対策まとめ。
概要
2026年3月31日、週1億ダウンロードを超える超人気npmパッケージ axios が、メンテナーアカウント乗っ取りによるサプライチェーン攻撃を受けました。
悪意あるバージョンは約2〜3時間でnpmから削除されましたが、影響範囲は甚大です。
TL;DR:axios@1.14.1またはaxios@0.30.4をインストールした環境は侵害済みとして扱い、すべての秘密情報をローテーションしてください。
攻撃の流れ
1. メンテナーアカウントの乗っ取り
- axiosの主要メンテナー jasonsaayman のnpmアカウントが侵害された
- 攻撃者はアカウントのメールアドレスを自分のProton Mail(
ifstap@proton.me)に変更し、npm publish権限を完全掌握 - GitHubのCI/CD・2FAをバイパスしてnpmへ直接publish(長期有効なnpmアクセストークンを悪用)
- 正規のaxiosリリースに含まれるはずのOIDCプロベナンスメタデータ・SLSAビルド証明書がなく、これが「直接publish」の証拠
2. 悪意あるバージョンの公開
攻撃者は以下の2バージョンを39分以内に公開:
axios本体のコードは完全にクリーン。変更点は package.json に偽の依存関係 plain-crypto-js@^4.2.1 を追加しただけ。
3. 悪意ある依存パッケージの準備(事前ステージング)
攻撃は約18時間前から準備されていた:
2026-03-30 05:57 UTC— クリーンなplain-crypto-js@4.2.0を公開(正規のcrypto-jsを装ったtypoquatパッケージ)2026-03-30 23:59 UTC— ペイロードを仕込んだplain-crypto-js@4.2.1を公開2026-03-31 00:05 UTC— Socket社の自動検出が6分以内にフラグを立てる2026-03-31 00:21 UTC—axios@1.14.1公開2026-03-31 01:00 UTC—axios@0.30.4公開
4. 感染の仕組み
plain-crypto-js@4.2.1 の postinstallスクリプト(setup.js)が本体:
npm install実行と同時に自動起動(2秒以内にC2接続開始)- C&Cサーバー(
sfrclak.com:8000/142.11.206.73)に接続 - Windows/macOS/Linux向けにプラットフォーム別のRATペイロードをダウンロード・実行
- 実行後、
setup.jsを自己削除し、package.jsonをクリーンなものに置き換えて痕跡を隠蔽
インストール開始から完全な侵害まで約15秒。事後に node_modules/plain-crypto-js/ を検査してもマルウェアの痕跡はなし。なぜ検知されにくかったか
- axios本体のコードは一切変更なし(
npm auditやコードレビューでは検知不可) - 悪意は「隠し依存 + postinstall」に閉じている
- セキュリティスキャナーの「新規パッケージ警戒」を回避するため、クリーン版を18時間前に公開してから攻撃
- GitHubのリリースタグには一切存在しない(npmのみに直接publish)
影響範囲
axiosは約80%のクラウド・コード環境に存在- 影響を受けた環境の 3%で実際にRAT実行が確認
^1.14.0や^0.30.0などキャレット範囲指定のプロジェクトが自動的に感染バージョンを引き込む- Axiosを直接インストールしていなくても、間接依存(transitive dependency)で感染するケースあり
対処法(今すぐやること)
① 感染確認
# lockfileで高速確認(推奨)
grep -r "axios" package-lock.json | grep "1\.14\.1\|0\.30\.4"
grep -r "plain-crypto-js" package-lock.json
# またはnpm ls
npm ls axios確認対象期間: 2026-03-31 00:21〜03:15 UTC の間に npm install を実行した環境
② 安全なバージョンへ戻す
npm install axios@1.14.0 # 1.x系
npm install axios@0.30.3 # 0.x系③ クリーンアップ
rm -rf node_modules package-lock.json
npm cache clean --force
npm install④ 侵害済み環境の対応
感染バージョンをインストールしていた場合、以下をすべてローテーション:
- npmトークン
- AWS / GCP / Azure クレデンシャル
- SSH秘密鍵
- CI/CDシークレット
.envファイル内のすべての値
⑤ ネットワーク遮断
以下への通信をブロック:
sfrclak.com:8000142.11.206.73
今後の予防策
- バージョンを厳密にピン留め:
^や~を避け、"axios": "1.14.0"のように固定 npm ciをCI/CDで使用:package-lock.jsonを厳密に参照--ignore-scriptsフラグ:CI/CDでpostinstallを無効化- npmアカウントに強力な2FA(ハードウェアキー推奨)+ 長期トークンを廃止
- パッケージリリース後のクールダウン期間を設ける(公開直後バージョンの自動ブロック)
- OIDC Provenance / SLSA を活用し、プロベナンスなしのパッケージはアラート
- Snyk / StepSecurity / Socket などのツールで定期チェック