2026年3月30-31日に発生したaxiosライブラリのサプライチェーン攻撃事件。メンテナアカウント乗っ取りから依存パッケージ注入まで、手口と対策を詳細解説。
開発者の皆さん、こんな不安を感じていませんか?
「npm installするだけで、もしかしたらマルウェアが入るかもしれない」「オープンソースライブラリは本当に安全なのか」「自分のプロジェクトが知らないうちに侵害されているかもしれない」
2026年3月30-31日、まさにこの不安が現実のものとなりました。人気のHTTPクライアントライブラリ「axios」がサプライチェーン攻撃の標的となり、悪意のあるコードが仕込まれた問題が発生したのです。
本記事では、この事件の詳細と、開発者が今すぐ取るべき対策について速報としてお伝えします。サプライチェーン攻撃の脅威と実践的な防御策を解説します。
何が起きたのか — axiosサプライチェーン攻撃の全貌
被害の概要
2026年3月30日23:59 UTC、npmレジストリに悪意のあるaxiosパッケージが公開されました。影響を受けたバージョンは以下の通りです:
幸い、セキュリティ企業のSocketが約6分後(3月31日00:05 UTC)にこの攻撃を検出し、迅速な対応により被害の拡大は最小限に抑えられました。しかし、この短時間でも多くの開発者が影響を受けた可能性があります。
攻撃の特徴
今回の攻撃で特に注目すべき点は、axios本体のコードには一切手が加えられていないことです。攻撃者は巧妙にも、依存パッケージを経由した間接的な手法を用いました。
flowchart TD
A[攻撃者] --> B[メンテナアカウント乗っ取り]
B --> C[悪意のあるaxiosバージョン公開]
C --> D[[email protected]を依存に追加]
D --> E[npm installで自動実行]
E --> F[RAT(リモートアクセス型トロイの木馬)展開]攻撃の手口 — メンテナアカウント乗っ取りからRAT展開まで
ステップ1: メンテナアカウントの乗っ取り
攻撃者はまず、axiosのリードメンテナのnpmアカウントを標的としました。調査により、以下の不審な変更が確認されています:
- メンテナアカウントのメールアドレスがProtonMailに変更された
- 通常のGitHub Actions CI/CDプロセスを迂回
- npm CLIから直接手動で悪意のあるバージョンを公開
この手口は、アカウント乗っ取り後の痕跡隠しとして巧妙です。ProtonMailへの変更により、元のメンテナが異常に気づくのを遅らせる効果があります。
ステップ2: 悪意のある依存パッケージの注入
攻撃者は新しく作成した[email protected]というパッケージを、侵害されたaxiosバージョンの依存関係に追加しました。このパッケージ名は、正規の暗号化ライブラリのように見せかける巧妙な偽装です。
{
"name": "axios",
"version": "1.14.1",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0",
"plain-crypto-js": "^4.2.1" // 悪意のあるパッケージ
}
}
ステップ3: postinstallスクリプトによるRAT展開
plain-crypto-jsパッケージには、postinstallスクリプトが仕込まれていました。このスクリプトはnpm install実行時に自動的に実行され、以下の動作を行います:
// postinstallスクリプトの概念的な動作
// 実際のコードは高度に難読化されていました
const fs = require('fs');
const os = require('os');
const { execSync } = require('child_process');
// プラットフォーム検出
const platform = os.platform();
// RAT(リモートアクセス型トロイの木馬)のダウンロードと実行
if (platform === 'win32') {
// Windows用ペイロードの展開
} else if (platform === 'darwin') {
// macOS用ペイロードの展開
} else {
// Linux用ペイロードの展開
}
攻撃者は、クロスプラットフォーム対応のRATを展開することで、Windows、macOS、Linuxのすべての環境を標的としました。さらに、ランタイムで難読化を解除する高度な手法を用いており、静的解析による検出を困難にしていました。
自分のプロジェクトの確認方法
影響確認の手順
以下の手順で、あなたのプロジェクトが影響を受けているかを確認できます:
1. package-lock.jsonの確認
# プロジェクトルートで実行
grep -r "plain-crypto-js" package-lock.json
grep -r "axios.*1\.14\.1" package-lock.json
grep -r "axios.*0\.30\.4" package-lock.json
2. インストール済みパッケージの確認
# axiosのバージョン確認
npm ls axios
# 依存関係ツリーの詳細表示
npm ls axios --depth=0
3. node_modulesディレクトリの直接確認
# plain-crypto-jsパッケージの存在確認
find node_modules -name "plain-crypto-js" -type d
# axiosディレクトリの確認
ls -la node_modules/axios/
cat node_modules/axios/package.json | grep version
安全なバージョンへの対処
影響を受けている場合は、直ちに以下の対処を行ってください:
# 1. node_modulesとpackage-lock.jsonの削除
rm -rf node_modules package-lock.json
# 2. package.jsonでaxiosバージョンを安全なものに固定
# [email protected]以下、または [email protected]以下
npm install [email protected] --save-exact
# 3. 依存関係の再インストール
npm install
# 4. 確認
npm ls axios
lock fileの重要性 — なぜpackage-lock.jsonが防御の要なのか
package-lock.jsonが攻撃を防ぐ仕組み
今回の事件で、多くの開発者が被害を免れた理由の一つがpackage-lock.jsonの存在です。lock fileがあるプロジェクトでは、既に解決済みの安全なバージョンが固定されているため、攻撃期間中にnpm installを実行しても侵害バージョンが降ってくることはありません。
{
"name": "example-project",
"lockfileVersion": 2,
"requires": true,
"packages": {
"node_modules/axios": {
"version": "1.14.0", // 固定されたバージョン
"resolved": "https://registry.npmjs.org/axios/-/axios-1.14.0.tgz",
"integrity": "sha512-...", // 整合性ハッシュ
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
// plain-crypto-jsは含まれない
}
}
}
}
lock fileがない場合のリスク
package-lock.jsonがない環境では、以下のような危険があります:
- セマンティックバージョニングの罠:
^1.14.0の指定で最新の1.14.1が自動取得 - CI/CDでの一貫性欠如: ビルドごとに異なるバージョンが使用される可能性
- 攻撃タイミングの運: たまたま攻撃期間中にnpm installを実行するリスク
lock fileの正しい運用
# 推奨: 依存関係の更新を意図的に行う
npm update # lock fileを更新
npm audit # セキュリティ監査
npm ci # 本番環境ではciを使用(lock fileから厳密にインストール)
# 非推奨: lock fileを無視する
npm install --no-package-lock
サプライチェーン攻撃から身を守るために
多層防御戦略
単一の防御策では不十分です。以下の多層防御を構築することが重要です:
レイヤー1: 依存関係の管理
# 1. 定期的なセキュリティ監査
npm audit
npm audit fix
# 2. 依存関係の可視化
npm ls --all
# 3. 古いパッケージの確認
npm outdated
レイヤー2: 自動化されたセキュリティチェック
# .github/workflows/security-check.yml
name: Security Check
on: [push, pull_request]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run security audit
run: npm audit --audit-level high
- name: Check for malicious packages
run: npx @socketsecurity/cli ci
レイヤー3: ランタイム監視
// package.json - postinstallスクリプトの監視
{
"scripts": {
"preinstall": "echo 'Installing dependencies...' && npm audit",
"postinstall": "echo 'Dependencies installed. Running security check...' && npm audit"
}
}
組織レベルでの対策
.npmrcによるレジストリ制御
# .npmrc - 信頼できるレジストリのみを使用
registry=https://registry.npmjs.org/
@company:registry=https://npm.company.com/
audit-level=moderate
fund=false
依存関係の定期レビュー
月次で実施すべき確認項目:
よくある失敗パターンと対処法
失敗パターン1: 「有名なパッケージだから安全」という思い込み
今回の事件が証明した通り、「有名 ≠ 安全」です。axiosはnpmで週間数千万ダウンロードされるパッケージですが、それでも攻撃対象になりました。
対処法:
# パッケージの健全性確認
npm info axios
npm info axios maintainers
npm info axios repository
失敗パターン2: lock fileを.gitignoreに入れる
問題: チーム間でのバージョン不整合、本番環境での予期しない動作
対処法:
# ❌ 間違い
package-lock.json
# ✅ 正しい - lock fileはコミットする
node_modules/
.env
失敗パターン3: CI/CDでnpm installを使用
問題: lock fileを無視して最新バージョンを取得してしまう
対処法:
# ❌ 本番環境で危険
- run: npm install
# ✅ lock fileから厳密にインストール
- run: npm ci
次世代のセキュリティツール
1. Socket Security(今回の検出に活躍)
npm install -g @socketsecurity/cli
socket ci # CI/CDに組み込み
2. Snyk
npm install -g snyk
snyk test # 脆弱性検出
snyk monitor # 継続監視
3. npm audit の高度な活用
# 重要度別の確認
npm audit --audit-level high
# JSON形式での詳細出力
npm audit --json > security-report.json
# 特定の脆弱性の詳細
npm audit --audit-level moderate --json | jq '.vulnerabilities'
参考リンク
- Socket.dev - axios npm package compromised
- GitHub Issue #10590 - [email protected] contains malicious dependency
- StepSecurity - axios Compromised on npm
セキュリティ対策、後回しにしていませんか?
セキュリティ対策
脆弱性診断からSSL設定・サーバー強化まで対応します
※ 通常1営業日以内にご返信します
まとめと次のステップ
今回のaxiosサプライチェーン攻撃は、現代のソフトウェア開発における重要な教訓を与えてくれました。わずか6分間という短時間での検出・対応により最悪の事態は回避されましたが、この事件は氷山の一角に過ぎません。
重要なポイント
- 有名なパッケージも攻撃対象になる: axiosクラスの人気パッケージでも例外ではない
- 間接的な攻撃手法の巧妙化: 本体を改変せず、依存パッケージ経由で攻撃
- package-lock.jsonの重要性: ロックファイルが多くの被害を防いだ
- 迅速な検出・対応の価値: 6分間での検出が被害を最小化
今すぐ実行すべきアクション
長期的な対策
サプライチェーン攻撃は今後も増加すると予想されます。技術的な対策だけでなく、組織としてのセキュリティ文化を醸成することが重要です。
今回の事件を教訓に、より安全で持続可能な開発環境を構築していきましょう。セキュリティは一度対策すれば終わりではなく、継続的な取り組みが必要です。