【緊急】axios がサプライチェーン攻撃 2026.03.31
TL;DR
2026年3月31日、npm で最も利用されているHTTPクライアントライブラリの一つである axios がサプライチェーン攻撃を受けました。攻撃者はリードメンテナーのアカウントを乗っ取り、マルウェアを含む2つのバージョンを公開しています。
| 項目 | 内容 |
|---|---|
| 侵害バージョン |
axios@1.14.1、axios@0.30.4
|
| 安全なバージョン |
axios@1.14.0(1.x系)、axios@0.30.3(0.x系) |
| 悪意あるパッケージ | plain-crypto-js@4.2.1 |
| マルウェア種別 | クロスプラットフォームRAT(Remote Access Trojan)ドロッパー |
| 影響規模 | npm 週間ダウンロード数 1億超 |
| 検知 | StepSecurity、Socket AI |
何が起きたのか
攻撃の経緯
StepSecurity の報告によると、攻撃者は axios のリードメンテナーである jasonsaayman の npm アカウント認証情報を窃取しました。通常の GitHub Actions CI/CD パイプラインを完全にバイパスし、以下の手順で攻撃を実行しています。
-
アカウント乗っ取り — メンテナーのnpmアカウントのメールアドレスを攻撃者管理のProtonMailアドレス(
ifstap@proton.me)に変更 -
悪意ある依存の事前配置 —
plain-crypto-js@4.2.1を攻撃の 18時間前 に公開 -
両ブランチ同時攻撃 —
axios@1.14.1(1.x系)とaxios@0.30.4(0.x系)を 39分以内 にnpm CLIから手動パブリッシュ - 証拠隠滅 — GitHub Issues の削除を含む、現在も進行中のアカウント悪用
依存関係の差分
# axios@1.14.0(正規)
dependencies:
follow-redirects
form-data
proxy-from-env
# axios@1.14.1(侵害済み)
dependencies:
follow-redirects
form-data
proxy-from-env
plain-crypto-js ← 本日新規作成された不正パッケージ
axios のソースコード自体には悪意あるコードは一切含まれていません。plain-crypto-js はaxiosのどこからも import / require されておらず、postinstall スクリプトを実行するためだけに存在しています。
マルウェアの技術的詳細
plain-crypto-js@4.2.1 の postinstall スクリプトは、クロスプラットフォーム対応の RAT ドロッパーとして機能します。
実行フロー
- 難読化解除 — 実行時に埋め込みペイロードと操作文字列をデコード
-
動的ロード —
fs、os、execSyncを動的にロードし、静的解析ツールによる検知を回避 - C2通信 — コマンド&コントロールサーバーに接続し、プラットフォーム固有の第2段階ペイロードを取得
- ペイロード配置 — OS ごとに異なるパスにペイロードを配置・実行
-
自己消去 — 実行後に
package.jsonをクリーンバージョンに差し替え、痕跡を削除
プラットフォーム別のペイロード配置先
| OS | ファイルパス |
|---|---|
| macOS | /Library/Caches/com.apple.act.mond |
| Windows | %PROGRAMDATA%\wt.exe |
| Linux | /tmp/ld.py |
3つのOSそれぞれに対応したペイロードが事前にビルドされていたことから、計画的かつ高度に組織化された攻撃であることがわかります。
IoC(Indicators of Compromise)
悪意あるパッケージ
axios@1.14.1axios@0.30.4plain-crypto-js@4.2.1
ネットワーク
| 種別 | 値 |
|---|---|
| C2ドメイン | sfrclak.com |
| C2 IP | 142.11.206.73 |
| C2 URL | http://sfrclak.com:8000/6202033 |
攻撃者関連アカウント
| アカウント | メール |
|---|---|
jasonsaayman(侵害済み) |
ifstap@proton.me(攻撃者が変更) |
nrwise |
nrwise@proton.me |
今すぐやること
Step 1 — 影響確認
まず、自分のプロジェクトが影響を受けているか確認してください。
# npm
npm list axios
npm list plain-crypto-js
# yarn
yarn why axios
# pnpm
pnpm list axios
# bun
bun pm ls | grep axios
bun pm ls | grep plain-crypto-js
# Vite+ (vp)
vp why axios
vp pm list plain-crypto-js
また、ファイルシステム上のIoCも確認します。
# macOS
ls -la /Library/Caches/com.apple.act.mond
# Linux
ls -la /tmp/ld.py
# Windows (PowerShell)
Test-Path "$env:PROGRAMDATA\wt.exe"
ネットワークログで sfrclak.com または 142.11.206.73 への通信がないかも確認してください。
Step 2 — 感染していた場合
- そのマシン/コンテナを侵害済みとして扱い、隔離する
-
npm installやnpm run、bun install、vp install等を絶対に実行しない(マルウェアが再実行される) - すべてのシークレット、APIキー、認証情報をローテーションする
- ネットワークログで C2 通信の痕跡を確認する
-
node_modulesと lockfile(package-lock.json/yarn.lock/pnpm-lock.yaml/bun.lock)を削除し、Step 3 でクリーンインストール
Step 3 — バージョン固定
package.json を修正して安全なバージョンに固定します。
{
"dependencies": {
"axios": "1.14.0"
}
}
クリーンインストール:
# npm
rm -rf node_modules package-lock.json
npm install
# yarn
rm -rf node_modules yarn.lock
yarn install
# pnpm
rm -rf node_modules pnpm-lock.yaml
pnpm install
# bun
rm -rf node_modules bun.lock
bun install
# Vite+ (vp) — 内部のパッケージマネージャに委譲
rm -rf node_modules
vp install
pin 解除の防止策として overrides を設定しておくと安全です。
{
"overrides": {
"axios": "1.14.0"
}
}
| パッケージマネージャ | 設定キー | 設定場所 |
|---|---|---|
| npm | overrides |
package.json |
| yarn | resolutions |
package.json |
| pnpm | pnpm.overrides |
package.json |
| bun | overrides |
package.json |
| Vite+ (vp) | 内部PMに準拠(デフォルト pnpm) | package.json |
Step 4 — CI/CD の防御策
# postinstall スクリプトの実行を無効化(追加の保護)
npm install --ignore-scripts
yarn install --ignore-scripts
pnpm install --ignore-scripts
bun install --ignore-scripts
vp install --ignore-scripts
- デプロイ/CI では既存の lockfile を使用し、最新取得を避ける
- npm:
npm ci - yarn:
yarn install --frozen-lockfile - pnpm:
pnpm install --frozen-lockfile - bun:
bun install --frozen-lockfile - Vite+:
vp install --frozen-lockfile
- npm:
- lockfile を変更する PR は必ず差分をレビューする
-
npm auditを実行する(検知が追いついていない可能性はあるが、基本の衛生管理として)
axios を直接使っていなくても要注意
axios は npm エコシステムで最も依存されているパッケージの一つです。自分の package.json に書いていなくても、以下のような経路で推移的依存(transitive dependency)として含まれている可能性が高いです。
- フロントエンドフレームワークの HTTP モジュール
- バックエンドの SDK やクライアントライブラリ
- テストツールやビルドツールのプラグイン
- サードパーティの npm パッケージ内部
必ず自分の環境に合ったコマンドで確認してください。
npm list axios # npm
yarn why axios # yarn
pnpm list axios # pnpm
bun pm ls | grep axios # bun
vp why axios # Vite+
タイムライン
| 日時 (UTC) | イベント |
|---|---|
| 2026/03/30 23:59 |
plain-crypto-js@4.2.1 が npm に公開 |
| 2026/03/31 00:05 | Socket AI が自動検知・フラグ |
| 2026/03/31 ~00:38 |
axios@1.14.1 + axios@0.30.4 が公開(39分以内に両方) |
| 2026/03/31 数時間内 | StepSecurity が緊急警告を公開 |
| 現在進行中 | メンテナーアカウントは依然として侵害状態、Issue の削除等が発生中 |
教訓と今後の対策
今回の攻撃は、npm エコシステムにおけるいくつかの構造的な問題を浮き彫りにしています。
メンテナーアカウントの保護が最重要防衛線であるということ。どれだけ CI/CD パイプラインを堅牢にしても、npm のアカウント認証情報が漏洩すれば CLI から直接パブリッシュできてしまいます。npm の OIDC Trusted Publisher 機能はこのリスクを軽減しますが、アカウント自体が乗っ取られた場合の防御にはなりません。
lockfile は防御の最後の砦です。 lockfile を使ったインストール(npm ci / yarn install --frozen-lockfile / pnpm install --frozen-lockfile / bun install --frozen-lockfile / vp install --frozen-lockfile)を徹底していれば、たとえ上流が侵害されても即座には影響を受けません。逆に npm install / bun install 等で常に最新を取得する運用は、こうした攻撃の直撃を受けます。
依存関係の変更を監視する仕組みを入れましょう。 Socket、Snyk、Dependabot などのツールで、新しい依存の追加や postinstall スクリプトの変更を自動検知できます。
参考リンク
- StepSecurity — axios Compromised on npm
- Socket — axios npm Package Compromised
- GitHub Issue #10590
- GitHub Issue #10604
- Hacker News Discussion
【更新】 続き:事件の時系列とNixによるセキュアなインストール環境の構築
今回の事件を受けて、「じゃあ具体的にどうやって今後安全に対策できるのか」
InstallTrust Score やNix のサンドボックスがどう動くかを書きました。
👇
→ https://x.com/gunta85/status/2039024666363490550
Discussion
bun why/pnpm why コマンドあります!
緊急性の高い情報を迅速にまとめて共有していただき、本当にありがとうございます。
今回のサプライチェーン攻撃に関して、特に「lockfileの重要性」や「CI/CDだけでは防げない現実」といった指摘には強く共感しました。現場でも見落とされがちなポイントを、具体的な手順とともに整理されていて非常に実用的だと感じました。
Full-Stack & AI Engineerとして日々開発に関わる立場から見ても、このような実践的かつ即応性のある情報発信はとても価値があります。注意喚起だけでなく、具体的な対処方法まで網羅されている点も素晴らしいです。
有益な記事の投稿、ありがとうございました!