2026年3月31日、npm パッケージ「axios」がサプライチェーン攻撃の被害に遭った。
単なる「脆弱性が見つかった」ではなく、axios のメンテナアカウントが侵害されて、悪意あるバージョンが npm に直接公開された。つまり、ダウンロードして npm install しただけで、マルウェアが仕込まれる可能性がある。
この記事は、「うちの環境で使ってるけど、どうしたらいい?」という判断フローを書いておく。
事件の概要
何が起きたのか
axios のメンテナアカウント(複数疑い)が侵害され、以下の 2 つのバージョンが悪意あるコードを含んで npm に公開された:
- axios@1.14.1(最新安定版)
- axios@0.30.4(レガシー版)
どちらも、同じ手口でマルウェアが混入していた。
どのくらい危険か
めっちゃ危険。理由:
- axios は超ポピュラー - JavaScript/Node.js 開発で最も使われている HTTP クライアントライブラリ
- 直接実行される - npm install 時に postinstall フック で自動実行
- 複数プラットフォーム対応 - Windows/Mac/Linux すべてに対応したマルウェア
実際に axios のダウンロード数は週 2000 万超。2~3 時間の公開期間でも、数千~数万の開発者が被害に遭った可能性がある。
技術的な詳細
マルウェアの動作
npm install 時に postinstall フック が実行され、以下の処理が起きる:
- プラットフォーム判定 - OS(Windows/Mac/Linux)を自動判定
- マルウェア配置 - 各 OS の隠蔽しやすい場所に RAT(リモートアクセストロージャン)を配置
- C2 サーバーへの接続 -
sfrclak[.]com:8000へ接続 - トレース消去 -
node_modulesから証拠を削除
各 OS でのマルウェア配置先
| OS | 配置先 | 特徴 |
|---|---|---|
| macOS | /Library/Caches/com.apple.act.mond |
キャッシュフォルダに偽装 |
| Windows | %PROGRAMDATA%\wt.exe, %TEMP%\6202033.vbs |
システムフォルダに混在 |
| Linux | /tmp/ld.py |
/tmp に配置(起動時消滅する可能性) |
含まれていた悪意あるパッケージ
公式記述では「plain-crypto-js」という偽パッケージ。これが dependencies に追加されて、npm install 時に自動ダウンロード・実行される。
うちは大丈夫?:判断フロー
ステップ 1:package.json / package-lock.json を確認
# 正確な確認方法 grep -E "axios.*1\.14\.1|axios.*0\.30\.4" package-lock.json
もし上記コマンドで何か出たら要注意。
ステップ 2:実際にインストールされているバージョンを確認
npm list axios
出力例:
└── axios@1.14.0
1.14.0 以下、または 0.30.3 以下なら OK。1.14.1 または 0.30.4 なら危険。
ステップ 3:「うちのチームはいつこれをインストールしたのか?」を確認
npm install したのが 3月31日の 2~3 時間の間 だったかどうかで、被害の可能性が変わる。
- ✅ 3月31日より前にインストール: 被害なし
- ⚠️ 3月31日 12:00~15:00 GMT 付近でインストール: 被害の可能性あり
- ✅ 3月31日 15:00 以降でインストール: 被害なし(既にパッチ済み)
リスク評価:うちは被害に遭ったのか?
ケース 1:インストールしたけど実行環境が本番ではない(社内 PC のみ)
リスク度: 中~高
対応:
- 該当の PC のマルウェアをスキャン(下記参照)
- API キー・パスワードをすべてローテーション
- git commit / push のログをチェック(悪意あるコードがコミットされていないか)
ケース 2:本番環境で実行中
リスク度: 超高
すぐに以下を実行:
- サーバー再起動
- 認証情報のすべてをローテーション(API キー、DB パスワード、SSH キーなど)
- アクセスログ確認(
sfrclak[.]comへの外部通信がなかったか) - セキュリティ監査(外部セキュリティ企業に委託検討)
ケース 3:Docker / CI/CD パイプラインで npm install を実行
リスク度: 超高
- Docker イメージが作成されて、本番環境にデプロイされている場合
- GitHub Actions などの CI パイプラインで実行してた場合
- → 該当期間の全デプロイを疑う
対応:
- 該当期間の全デプロイを一覧化
- 本番環境から当該バージョン削除
- 全認証情報ローテーション
すぐにやるべきこと:修復手順
ステップ 1:axios をダウンロードグレード
npm install axios@1.14.0 --ignore-scripts
なぜ --ignore-scripts が必要か:
- もし 1.14.1 がまだキャッシュに残ってたり、中途半端な状態だと危険
- グレードダウン時も postinstall フック を無視して安全にする
ステップ 2:node_modules の手動確認
# 疑わしいファイルを探す find node_modules -name "plain-crypto-js" -type d find node_modules -name "*.vbs" -o -name "*.exe" -o -name "*.py"
見つかったら、即座に削除:
rm -rf node_modules/plain-crypto-js
npm ci # package-lock.json から再インストール
ステップ 3:マルウェアスキャン(PC にインストールされている場合)
Windows:
Start-MpScan -ScanType FullScan
macOS:
# マルウェアバイトスキャン推奨 # https://www.malwarebytes.com/mac から Malwarebytes ダウンロード・実行
Linux:
sudo freshclam # パターンアップデート
sudo clamscan -r /tmp /home /root --remove
ステップ 4:全認証情報のローテーション
感染可能性がある環境では、以下をすべてローテーション:
本番環境への影響判定
チェックリスト
すべて「Yes」に近いなら、セキュリティ監査推奨。
実装側の判断:パッケージアップデートはいつする?
axios の対応タイムライン:
| バージョン | リリース | 判定 |
|---|---|---|
| 0.30.3 以下 | 2026/3/31 18:00 | ✅ 安全 |
| 1.14.0 以下 | 2026/3/31 18:00 | ✅ 安全 |
| 1.14.1 | 2026/3/31 12:00-15:00 | ❌ 危険 |
| 0.30.4 | 2026/3/31 12:00-15:00 | ❌ 危険 |
| 1.14.2 以上 | 2026/3/31 15:00 | ✅ パッチ済み |
| 0.30.5 以上 | 2026/3/31 15:00 | ✅ パッチ済み |
推奨:
- 本番環境: 1.14.2 以上 または 0.30.5 以上 に即座にアップデート
- 開発環境: 余裕があれば同じく最新版へ
今後のためのセキュリティ対策
npm パッケージ監視ツールの導入
# npm audit で定期チェック npm audit # dependabot で自動 PR 生成(GitHub) # Settings → Code security and analysis → Enable Dependabot
CI パイプラインでのセキュリティスキャン
# npm audit を CI に組み込む
npm audit --audit-level=moderate
package-lock.json の厳密管理
# 本番環境では必ず --frozen-lockfile を使う npm ci --frozen-lockfile # 決して npm install を使わない
最後に:この事件が教えてくれること
サプライチェーン攻撃は「あり得ない」ではなく「あり得る」。
axios は信頼性の高いパッケージだが、それでも被害に遭った。理由は、人気が高いがゆえに、攻撃者にとって「おいしいターゲット」だったから。
対策:
- すべてのパッケージを信用しない - npm audit を常態化
- 本番環境を隔離 - 必ず
--frozen-lockfileを使う - credentials の定期ローテーション - 3~6ヶ月ごと
- ネットワークログの監視 - 不審な外部接続を検出
2026 年も、サプライチェーン攻撃の脅威は続く。