<1.13.2/修正版: ≥1.15.0人気のノードパッケージ「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は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)である。以下の要素が組み合わさることで「ガジェットアタックチェーン」を形成する:
ステップ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/
| 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;
}
Axiosバージョン1.13.2未満のすべてのバージョンが脆弱性の影響下にある。以下のバージョンが具体的に確認されている:
| バージョン範囲 | ステータス | 対応 |
|---|---|---|
| 1.13.2未満 | 脆弱(Advisoryで明示) | 即座にアップグレード必須 |
| 1.13.2〜1.14.x | Advisoryで修正版として未記載 | 安全を取るなら1.15.0以上へ |
| 1.15.0以降 | 修正版 | 推奨 |
プロトタイプポルーション脆弱性を持つ依存パッケージ:
これらが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
脆弱な設定(修正前)
{
"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"
}
}
# 脆弱性スキャン実行
npm audit
# 自動修復を試みる
npm audit fix
# 強制的に脆弱性を修復(互換性リスク有)
npm audit fix --force
# Snyk等の外部ツール連携
npm install -g snyk
snyk test
優先度:P0(最高緊急度) — 本番環境で動作するすべてのAxios依存プロジェクトにおいて、24〜48時間以内のアップグレードが強く推奨される。
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
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つのコネクション上で送信可能になる。
類似の脆弱性リスクを避けるため、セキュリティ意識の高い組織は以下の代替ライブラリへの移行を検討している:
| ライブラリ | 長所 | 考慮点 | 移行コスト |
|---|---|---|---|
| undici(Node.js公式) | 最高速、HTTP/1.1のRFC厳守。fetch の内部実装 |
ブラウザ非対応 | 中 |
| node-fetch | Fetch APIに最も近い。コード移植しやすい | メンテ更新頻度はundiciに劣る | 低 |
| got | リトライ・ストリーム・互換性が優秀 | 学習コストあり | 中 |
| native fetch(Node 18+) | 追加依存なし、標準仕様 | 細かい挙動制御が弱い | 低 |
本記事について 本記事は最新セキュリティ脅威に基づいています。パッチ情報は公式ドキュメントに基づき随時更新されます。組織内のセキュリティチームに本情報を共有し、緊急対応を進めることを強く推奨します。
この記事はAI業界の最新動向を速報でお届けする「AI Heartland ニュース」です。