← News 一覧に戻る

npm axiosサプライチェーン攻撃(2026年3月31日)

2026年3月31日

2026年3月31日、npmのaxiosメンテナーアカウントが乗っ取られ、悪意あるバージョン(1.14.1 / 0.30.4)が公開されました。postinstallスクリプト経由でクロスプラットフォームRATが配布された、典型的なサプライチェーン攻撃の全容と対策まとめ。

Release
X でシェア

概要

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 UTCaxios@1.14.1 公開
  • 2026-03-31 01:00 UTCaxios@0.30.4 公開

4. 感染の仕組み

plain-crypto-js@4.2.1postinstallスクリプトsetup.js)が本体:

  1. npm install 実行と同時に自動起動(2秒以内にC2接続開始
  2. C&Cサーバー(sfrclak.com:8000 / 142.11.206.73)に接続
  3. Windows/macOS/Linux向けにプラットフォーム別のRATペイロードをダウンロード・実行
  4. 実行後、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:8000
  • 142.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 などのツールで定期チェック

参考リンク