この記事ではセキュリティに特化して解説します。AIセキュリティ全般は サプライチェーンセキュリティ完全ガイド2026|攻撃手法・防御ツール・実践チェックリスト をご覧ください。

何が起きたか

🚨 CVE-2026-40175 — Axios HTTP Request Smuggling
CVSS: 10.0 Critical(AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)
影響: axios <1.13.2修正版: ≥1.15.0
CWE: CWE-113(CRLF注入)・CWE-444(リクエストスマグリング)・CWE-918(SSRF)
報告: Raulvdv /公開: Jasonsaayman /日時: 2026-04-09

人気のノードパッケージ「Axios」にCVSS 3.1スコア10.0のクリティカル脆弱性(CVE-2026-40175)が発見された。セキュリティ研究者 Raulvdv が報告し、メンテナ Jasonsaayman から公開された。公開PoC(Proof of Concept)も既にリリース済み。この脆弱性はAxiosのヘッダ処理ロジックの不備に起因し、プロトタイプポルーション(JavaScript Prototype Pollution)を経由したHTTPリクエストスマグリング攻撃を実現する。攻撃者は無制限のリクエスト送出なしにAWS IMDSv2保護をバイパスし、IAMセッショントークンなどの機密認証情報を窃取できる可能性がある。GitHub Security Advisory(GHSA-fvcv-3m26-pcqx)は影響範囲を <1.13.2、修正版を ≥1.15.0 と明記している。

Axios repository

axios weekly downloads axios GitHub stars CVSS 10.0 Patched in 1.15.0

あなたは影響を受けるか — 30秒判定

flowchart TD A["package.json を開く"] --> B{"axios を利用?"} B -->|なし| Z["影響なし"] B -->|あり| C{"バージョンは?"} C -->|"< 1.13.2"| R["即時対応必須
1.15.0以上へ更新"] C -->|1.13.2 〜 1.14.x| Y["安全側に倒し
1.15.0以上へ更新推奨"] C -->|"≥ 1.15.0"| S["パッチ済み"] R --> D["AWS環境なら
IAMトークンローテーション"] Y --> E["CI/CD で npm audit 実施"]

背景と経緯

AxiosはNode.jsおよびブラウザ環境で広く使用されるHTTPクライアントライブラリであり、数百万のプロジェクトに統合されている。本脆弱性は1.13.2未満のすべてのAxiosに影響し、修正版は1.15.0以降。公式Advisoryで明示された修正バージョンは1.15.0であり、1.13.2〜1.14.x系の中間バージョンではなく ≥1.15.0 が明確な安全ラインとなる。ヘッダの厳密な検証とCRLF(Carriage Return/Line Feed)文字の排除が実装されている。PoC公開により、実装難度が低下し、ワイルドな悪用リスクが急増している状況となった。

脆弱性の仕組みと技術詳細

根本原因:ヘッダ処理とプロトタイプポルーション

この脆弱性の核は、lib/adapters/http.jsファイルにおける無制限のヘッダ処理とCRLF文字への入力検証不足(CWE-113)である。以下の要素が組み合わさることで「ガジェットアタックチェーン」を形成する:

  • プロトタイプポルーション(CWE-1321) :依存パッケージ(body-parser、qs、minimist等)がObject.prototypeを汚染
  • SSRF(Server-Side Request Forgery、CWE-918) :内部メタデータサービスへのリクエスト送出
  • HTTPリクエストスマグリング(CWE-444) :CRLF文字を用いた改行注入
flowchart LR A["依存パッケージが
Object.prototypeを汚染"] --> B["Axiosがプロパティをマージ"] B --> C["汚染されたプロパティが
ヘッダに変換"] C --> D["CRLF文字の検証なしで
ソケットに書き込み"] D --> E["HTTPリクエスト
スマグリング実行"] E --> F["AWS IMDSv2バイパス
IAMトークン窃取"]

攻撃フローの実例

ステップ1:プロトタイプポルーション

以下のようなマリシャスなプロパティがObject.prototypeを汚染する場合を想定:

// 汚染されたプロパティ例
Object.prototype['x-amz-target'] = 'AmazonEC2\r\nHost: attacker.com';

ステップ2:Axiosによる自動マージ

Axiosが通常のリクエスト作成時に設定をマージする際、汚染されたプロパティが自動的に含まれる:

const config = {
  method: 'GET',
  url: 'https://example.com/api/data',
  headers: {}
  // Object.prototypeから汚染プロパティが継承される
};

axios(config);
// マージ後: headers: { 'x-amz-target': 'AmazonEC2\r\nHost: attacker.com' }

ステップ3:AWS IMDSv2バイパス

PoC実装により、改行注入を通じたIMDSv2トークン要件の回避が実証される:

# 攻撃が成功すると、以下のようなリクエストがAWSメタデータサービスに送信される
PUT http://169.254.169.254/latest/api/token
X-aws-ec2-metadata-token-ttl-seconds: 21600

# 続く改行により、別のリクエストが注入される
GET /latest/meta-data/iam/security-credentials/

攻撃シーケンス図

sequenceDiagram participant Dep as 依存パッケージ participant App as アプリ participant Axios as Axios participant IMDS as AWS IMDSv2 Dep->>App: Object.prototype を汚染 App->>Axios: axios(config) 呼び出し Axios->>Axios: 汚染プロパティをマージ Axios->>Axios: CRLF を検証せず送信 Axios->>IMDS: 改ざんされた HTTP リクエスト IMDS-->>Axios: IAM認証情報トークン Axios-->>App: 結果を返却 Note over App,IMDS: 攻撃者が
認証情報を窃取

CWE 3要素のマッピング

CWE 概要 本件での位置付け
CWE-113 HTTPヘッダへのCRLF注入 ヘッダ値に \r\n が混入しても拒否されない
CWE-444 HTTPリクエストスマグリング CRLFを使い複数リクエストを1ソケットに詰め込む
CWE-918 SSRF(Server-Side Request Forgery) 169.254.169.254 等の内部サービスへ到達

検証なしのヘッダ処理

脆弱なバージョンのAxiosは、ヘッダ値にCRLF文字(\r\n)が含まれていても検証しない:

// 脆弱なコード
function setHeader(name, value) {
  // CRLF文字の検証がない
  headers[name] = value;  // "value\r\nInjected-Header: malicious"が直接書き込まれる
}

// パッチ後
function setHeader(name, value) {
  if (/[\r\n]/.test(value)) {
    throw new Error('Invalid header value: contains CRLF');
  }
  headers[name] = value;
}
リクエストスマグリングの危険性
CRLF注入により、攻撃者は本来のリクエストに追加のHTTPヘッダやメソッドを注入できる。特にAWS EC2 Metadata Service(169.254.169.254)への改ざんされたリクエストは、IMDSv2のトークンベース認証をバイパスし、IAM認証情報を直接盗聴する危険性がある。

影響範囲

対象バージョン

Axiosバージョン1.13.2未満のすべてのバージョンが脆弱性の影響下にある。以下のバージョンが具体的に確認されている:

バージョン範囲 ステータス 対応
1.13.2未満 脆弱(Advisoryで明示) 即座にアップグレード必須
1.13.2〜1.14.x Advisoryで修正版として未記載 安全を取るなら1.15.0以上へ
1.15.0以降 修正版 推奨

対象環境

  • Node.js標準環境 :Express、Next.js、Nuxt.js等のフレームワーク統合プロジェクト
  • AWS環境 :EC2インスタンス、Lambda関数、ECS/EKS上のコンテナ
  • GCP環境 :Compute Engine、Cloud Run、GKE上のワークロード
  • Azure環境 :App Service、Container Instances、AKSクラスタ
  • オンプレミス環境 :内部メタデータサービスを備えたクラウド統合システム
npm統計による影響度推定
Axiosは毎週約2,000万ダウンロードの人気パッケージ。本脆弱性により、セキュリティ管理が不十分なプロジェクトでは数百万ユーザーが間接的に影響を受ける可能性がある。

依存関係の連鎖的影響

プロトタイプポルーション脆弱性を持つ依存パッケージ:

  • body-parser :Express.js用フォームデータパーサー
  • qs :クエリストリング解析ライブラリ
  • minimist :コマンドラインオプション解析

これらが1つプロジェクトに含まれるだけで、Axiosを通じた攻撃チェーンが成立する。

タイムライン

日付 イベント
検出 セキュリティ研究者により脆弱性が発見
検証・発表 詳細が公開
PoC公開 実用的なプルーフオブコンセプト実装がオンライン公開
パッチリリース Axiosのセキュリティフィックスが統合
現在 全依存プロジェクトへの緊急アップグレード推奨段階

修復方法と推奨手順

即時対応:アップグレード

NPMを使用している場合

# 現在のAxiosバージョン確認
npm list axios

# package.jsonで直接指定している場合
npm install axios@^1.15.0

# または最新版に更新
npm install axios@latest

Yarn使用環境

yarn upgrade axios@^1.15.0

pnpm使用環境

pnpm update axios@^1.15.0

package.jsonの確認例

脆弱な設定(修正前)

{
  "dependencies": {
    "axios": "^1.13.0",
    "body-parser": "^1.20.0",
    "express": "^4.18.0"
  }
}

安全な設定(修正後)

{
  "dependencies": {
    "axios": "^1.15.0",
    "body-parser": "^1.20.0",
    "express": "^4.18.0"
  }
}

単純なAxiosアップグレードだけでは不十分な場合
依存パッケージ(body-parser、qs、minimist等)もプロトタイプポルーション脆弱性を持つ可能性がある。npm audit コマンドで全体的な脆弱性スキャンを実施し、複数の脆弱性に対応する必要がある。HackerAIのようなAIセキュリティ監査ツールを組み合わせることで、検出精度をさらに高められる。

セキュリティ監査コマンド

# 脆弱性スキャン実行
npm audit

# 自動修復を試みる
npm audit fix

# 強制的に脆弱性を修復(互換性リスク有)
npm audit fix --force

# Snyk等の外部ツール連携
npm install -g snyk
snyk test

本番環境への展開方針

  1. ステージング環境での事前検証:アップグレード後の動作確認
  2. 段階的なロールアウト:カナリアデプロイメント等で段階的に展開
  3. ロールバック計画:万一の互換性問題に対応する準備
  4. 監視の強化:本番環境でのエラー率・レイテンシ監視

業界への影響と推奨対応

ホットラインと対応優先度

優先度:P0(最高緊急度) — 本番環境で動作するすべてのAxios依存プロジェクトにおいて、24〜48時間以内のアップグレードが強く推奨される。

開発チーム向けチェックリスト

  • 全プロジェクトのAxiosバージョンをリスト化
  • npm auditの実行とレポート生成
  • ステージング環境でアップグレード検証
  • 互換性テストスイートの実行
  • 本番環境への段階的デプロイメント計画
  • 依存パッケージ(body-parser、qs等)のセキュリティ監査
  • CloudTrail等でIAM認証情報の異常なアクセス有無確認
  • AWS IMDSへの不正なリクエストパターンをセキュリティグループで監視

インフラストラクチャへの影響

AWS環境での追加対策

# IMDSv2の強制化(IAM ロールベースのセッション機能)
# EC2 メタデータサービスのバージョン確認
aws ec2 describe-instances --query 'Reservations[*].Instances[*].MetadataOptions' \
  --region us-east-1

# IMDSv2強制設定(新規インスタンス起動時)
aws ec2 run-instances \
  --image-id ami-0c55b159cbfafe1f0 \
  --metadata-options HttpTokens=required,HttpPutResponseHopLimit=1

セキュリティグループによるメタデータサービスアクセス制限

# IMDSへのアクセスを特定VPC内のみに限定(既存インスタンス)
aws ec2 authorize-security-group-ingress \
  --group-id sg-xxxxxxxxx \
  --protocol tcp \
  --port 80 \
  --cidr 169.254.169.254/32 \
  --region us-east-1

セキュリティ研究者・ISACs向けの技術詳細

CWE-113とCRLF注入の拡張説明

CWE-113(不適切なHTTPレスポンスヘッダの無効化)は、HTTPヘッダにおけるCRLFシーケンスの検証不備を指す。本脆弱性では、これが「リクエスト」ヘッダの処理にも適用される点が独特である。

// CRLF注入の具体例
const maliciousValue = "AmazonEC2\r\nHost: attacker.com\r\nX-Evil: true";

// 以下のコードで、複数行のHTTPヘッダが生成される
const header = `X-Custom: ${maliciousValue}`;
// 結果
// X-Custom: AmazonEC2
// Host: attacker.com
// X-Evil: true

この形式により、攻撃者はHTTPパイプライニングおよびリクエストスマグリングを実現。複数の独立したリクエストを1つのコネクション上で送信可能になる。

今後の展望

Node.jsエコシステムのセキュリティ強化

  1. npm・パッケージマネージャー統合の脆弱性スキャン :デフォルトで全プロジェクトをスキャン対象に。Composer CVE-2026-40261の事例でも同様のサプライチェーン脆弱性が報告されている
  2. プロトタイプポルーション対策の標準化 :言語仕様レベルでのセキュア設計
  3. ヘッダバリデーションの業界標準化 :RFC 7230の厳密な実装強制

その他の代替HTTPライブラリへの移行検討

類似の脆弱性リスクを避けるため、セキュリティ意識の高い組織は以下の代替ライブラリへの移行を検討している:

ライブラリ 長所 考慮点 移行コスト
undici(Node.js公式) 最高速、HTTP/1.1のRFC厳守。fetch の内部実装 ブラウザ非対応
node-fetch Fetch APIに最も近い。コード移植しやすい メンテ更新頻度はundiciに劣る
got リトライ・ストリーム・互換性が優秀 学習コストあり
native fetch(Node 18+) 追加依存なし、標準仕様 細かい挙動制御が弱い
flowchart LR A["Axios <1.13.2"] -->|最短 5分| B["[email protected]+ へ更新"] A -->|数日〜| C["undici へ移行"] A -->|即時| D["native fetch へ移行"] B --> E["継続運用"] C --> F["HTTP/1.1 の厳密さを獲得"] D --> G["依存ゼロ化"]
代替ライブラリ検討時の注意点
代替ライブラリへの移行は、既存コードの大規模リファクタリングを伴う。アップグレードでセキュリティが確保される場合は、まずAxios 1.15.0以上への段階的移行を優先し、長期的には設計見直しを検討すべき。

関連記事: サプライチェーンセキュリティ完全ガイド2026|攻撃手法・防御ツール・実践チェックリスト

参照ソース


本記事について 本記事は最新セキュリティ脅威に基づいています。パッチ情報は公式ドキュメントに基づき随時更新されます。組織内のセキュリティチームに本情報を共有し、緊急対応を進めることを強く推奨します。

参考リンク


この記事はAI業界の最新動向を速報でお届けする「AI Heartland ニュース」です。