セキュリティ

CVSS10.0を記録したCVE-2026-40175がAxios利用企業に迫る深刻リスク

目次

CVSS10.0を記録したCVE-2026-40175がAxios利用企業に迫る深刻リスク

2026年4月10日、JavaScriptの代表的なHTTPクライアントライブラリであるAxiosに、CVSS基本スコア10.0という最高評価の脆弱性CVE-2026-40175が公開されました。この脆弱性は、Node.jsやブラウザ向けに広く利用されているAxiosのヘッダ処理に根本的な欠陥があり、リモートコード実行やクラウド環境の完全掌握につながる深刻なものです。npmの週間ダウンロード数で常に上位に位置するAxiosだけに、企業のWebアプリケーションやAPI基盤に与える影響は計り知れません。ここではまず、CVE-2026-40175の基本情報と深刻度を正しく理解するために必要な背景を整理していきましょう。

2026年4月公開のAxios脆弱性がCVSS最高値10.0を獲得した背景

CVE-2026-40175は2026年4月9日に予約され、翌4月10日にNVD(National Vulnerability Database)およびGitHub Security Advisoryで正式公開されました。CVSS v3.1の基本スコアは10.0で、CVSSスケールにおける最高値に該当します。この最高評価が付いた理由は、攻撃ベクトルがネットワーク経由であること、攻撃の複雑性が低いこと、特権が不要であること、ユーザ操作が不要であること、そしてスコープ変更が発生することという5つの条件をすべて満たしている点にあるのです。さらに、機密性・完全性・可用性のすべてにおいて影響度が「高」と判定されている点も見逃せません。この脆弱性が特に注目された理由は、Axios自体がPrototype Pollutionの直接的な起点ではなく、他のライブラリで発生した汚染を「増幅」するガジェットとして機能することにあります。つまり、自社のコードに問題がなくても、依存関係のどこかに汚染源があるだけで、Axiosを介して壊滅的な被害が発生する構造となっているのです。

CWE-113とCWE-444の2分類に該当するヘッダ不正処理の危険性

CVE-2026-40175には、複数のCWE(Common Weakness Enumeration)分類が紐付けられています。まずCWE-113は「HTTPヘッダにおけるCRLFシーケンスの不適切な無害化」を指す分類です。Axiosのヘッダ設定処理では、パッチ適用前の段階で、ヘッダ値に含まれる改行コード(\r\n)を検証していませんでした。そのため、汚染されたプロパティが改行を含んでいた場合、HTTPリクエストが意図しない形で分裂してしまうのです。次にCWE-444は「HTTPリクエストの不整合な解釈」を指すもので、HTTPリクエストスマグリングと呼ばれる攻撃手法に該当します。さらにCWE-918(サーバサイドリクエストフォージェリ)も関連CWEとして登録されており、クラウドメタデータサービスへの不正アクセスに直結する分類でもあります。1つの脆弱性が3つの異なるCWEに該当すること自体が異例であり、攻撃の多面性と深刻度を如実に表しているといえるでしょう。

認証不要・ユーザ操作不要で攻撃が成立するゼロインタラクション条件

CVE-2026-40175の特筆すべき点は、攻撃の成立に「ゼロ直接ユーザ入力」で足りるという条件です。通常の脆弱性攻撃では、ユーザがフォームに悪意ある入力を送信したり、攻撃者が認証を突破したりする過程を必要とします。しかし、この脆弱性ではAxios自体に対する直接的な入力は一切不要となっています。攻撃者が必要とするのは、アプリケーションの依存関係のどこかでObject.prototypeを汚染できる別の脆弱性が存在することだけです。汚染が発生すると、Axiosはその後の通常のリクエスト実行時に、configマージ処理を通じて汚染済みプロパティを自動的に取り込んでしまいます。開発者が記述したまったく正常なコード、たとえば外部APIへの定型的なGETリクエストが、知らないうちに攻撃ペイロードを運ぶ媒介になるのです。この「正常なコードが攻撃に加担する」という構造が、発見を困難にし、対応の緊急度をさらに引き上げています。

全バージョン0.x〜1.14.xが影響を受ける異例の対象範囲

CVE-2026-40175の影響を受けるバージョンは、Axiosの1.15.0未満のすべてのバージョンです。初期のv0.x系列から最新リリース直前のv1.14.x系列まで、Axiosの全歴史にわたる広範な対象範囲を意味しています。通常のCVEでは特定のバージョン範囲が影響対象となることが多い中、今回の「全バージョン」という判定は異例といえるでしょう。この広範な影響範囲は、ヘッダ値のCRLF検証が最初から実装されていなかったことに起因するものです。つまり、これまでの長い期間、Axiosを使用するすべてのアプリケーションがこの攻撃経路を潜在的に内包していたことになります。企業が過去にデプロイしたレガシーシステムにおいても、Axiosが含まれている限りリスクは残っており、単に最新プロジェクトだけを確認すれば済む問題ではありません。バージョン固定で運用しているプロジェクトほど、この脆弱性の影響を受けやすい状況に置かれています。

PoCエクスプロイト公開済みという企業対応の緊急度を高める現状

CVE-2026-40175の公開と同時に、GitHub Security Advisory(GHSA-fvcv-3m26-pcqx)にはPoC(Proof of Concept)エクスプロイトの技術詳細が掲載されました。PoCには、Prototype Pollutionを利用してObject.prototype['x-amz-target']にCRLFシーケンスを注入し、AWS IMDSv2のトークン取得リクエストをスマグリングする具体的なコードが含まれています。このPoCが公開済みであることは、攻撃者がゼロから手法を開発する必要がないことを意味しており、実際の悪用までの障壁が極めて低い状態といえるでしょう。セキュリティ情報サイトの報告によれば、公開からわずか数日で複数のセキュリティスキャナがこのCVEを検知対象に追加しています。企業のセキュリティ担当者は、パッチ適用までの時間が直接的にリスク露出時間に等しいことを認識し、可能な限り即座にAxios 1.15.0以降へのアップデートを実施すべき状況に置かれているのです。

Prototype PollutionからRCEに至るガジェット攻撃チェーンの全容

CVE-2026-40175を理解する上で最も重要なのは、Axiosが攻撃の「起点」ではなく「増幅器」として機能するという構造です。この脆弱性はPrototype Pollutionという別の攻撃手法を前提条件とし、それをAxiosのヘッダ処理の欠陥を経由してリモートコード実行やクラウド侵害にまで発展させます。ここでは、攻撃チェーン全体を段階ごとに分解し、なぜ安全に見えるコードが危険な経路になるのかを技術的に解説していきましょう。

攻撃起点となるPrototype Pollutionのqs・minimist等での発生例

攻撃の第一段階であるPrototype Pollutionとは、JavaScriptのObject.prototypeに意図しないプロパティを注入する攻撃手法です。JavaScriptではすべてのオブジェクトがObject.prototypeを継承するため、ここに注入されたプロパティはアプリケーション全体のオブジェクトに波及してしまいます。この汚染を引き起こす典型的なライブラリとして、クエリ文字列パーサのqs、コマンドライン引数パーサのminimist、設定ファイルパーサのini、Express.jsのミドルウェアであるbody-parserが挙げられるでしょう。たとえば、攻撃者がHTTPリクエストのクエリパラメータやJSONボディに__proto__プロパティを含む値を送信することで、サーバ側のオブジェクトプロトタイプを汚染できるのです。これらのライブラリ単体での影響は限定的に見えますが、Axiosというガジェットと組み合わさることで致命的な被害に発展する危険性を秘めています。

Axiosのconfigマージ処理が汚染プロパティを自動取得する脆弱な設計

攻撃の第二段階で注目すべきは、Axiosが内部で実行するconfigマージ処理の挙動です。Axiosではリクエスト実行時に、デフォルト設定・インスタンス設定・リクエスト固有の設定を深くマージして最終的な設定オブジェクトを生成する仕組みとなっています。この処理過程で、Object.prototypeに注入されたプロパティが設定オブジェクトのヘッダ情報として取り込まれてしまうのです。たとえば攻撃者がObject.prototype['x-amz-target']に悪意ある文字列を設定した場合、Axiosは明示的にそのヘッダを指定していないにもかかわらず、すべてのリクエストのヘッダにその値を自動的に含めてしまいます。根本原因は、AxiosのconfigマージロジックがhasOwnPropertyによるチェックを十分に行っておらず、プロトタイプチェーン上のプロパティまで収集してしまう設計にありました。この「意図しないプロパティの自動取得」こそが、ガジェット攻撃の核心といえるでしょう。

CRLFインジェクションでHTTPリクエストが分裂する技術的メカニズム

攻撃の第三段階がCRLFインジェクションです。HTTPプロトコルでは、ヘッダの区切りにCR(キャリッジリターン: \r)とLF(ラインフィード: \n)の組み合わせを使用しています。ヘッダセクションの終端は空行(\r\n\r\n)で示される仕組みです。攻撃者がPrototype Pollution経由でヘッダ値に\r\n\r\nを含む文字列を注入すると、HTTPパーサはそこで最初のリクエストが終了したと解釈してしまいます。その後に続く文字列は、まったく別の新しいHTTPリクエストとして処理されるのです。たとえば、ヘッダ値にdummy\r\n\r\nPUT /latest/api/token HTTP/1.1\r\nHost: 169.254.169.254という文字列が注入された場合、1つのTCP接続上で本来意図されたリクエストに加えて、AWSメタデータサービスへのPUTリクエストが不正に生成される結果となります。パッチ適用前のAxiosでは、AxiosHeaders.setメソッドにヘッダ値のCRLF検証が存在しなかったため、この分裂をまったく検知できない状態でした。

開発者が安全と誤認する通常のaxios.get呼び出しが攻撃経路になる実態

CVE-2026-40175で特に注意すべきは、攻撃のトリガーとなるコードが完全に正常なAPI呼び出しであるという事実です。GitHub Security Advisoryに掲載されたPoCでは、攻撃を実行するAxios側のコードはわずか1行で、await axios.get('https://analytics.internal/pings')のような自社内部サービスへの定型的なリクエストにすぎません。このコードを見た開発者は、外部入力を受け付けていないため安全だと判断するでしょう。しかし、Prototype Pollutionがすでに発生している環境では、この何の変哲もないリクエストが攻撃ペイロードを運搬する経路に変わってしまうのです。セキュリティレビューで「外部入力を受け付けていないから安全」と判断する従来のアプローチでは、この種のガジェット攻撃を検出できません。攻撃は入力レベルではなく、ランタイムのプロトタイプ汚染という目に見えない層で発生するため、ソースコードの静的解析だけでは発見が困難な性質を持っています。

正規通信に悪意あるリクエストが混入するHTTPスマグリングの流れ

攻撃チェーンの最終段階であるHTTPリクエストスマグリングでは、正規のHTTPリクエストの中に不正なリクエストが密かに埋め込まれます。具体的な攻撃フローは以下の順序で進行するものです。まず、攻撃者がアプリケーションの依存ライブラリ経由でObject.prototypeにCRLFシーケンスを含む値を注入します。次に、Axiosが通常のリクエストを組み立てる際にその汚染されたプロパティをヘッダに取り込む段階が続きます。そして、Axiosがソケットにヘッダ値を書き込む際に、CRLFシーケンスにより1つのHTTPリクエストが複数に分裂するのです。結果として、正規リクエストの後に攻撃者が意図した不正リクエストがサーバへ送信されることになります。この手法の厄介な点は、フロントエンドのプロキシやWAF(Web Application Firewall)から見ると1つの正規接続に見える場合があることです。バックエンドのサーバだけが2つ目の不正リクエストを処理するため、ネットワーク監視ツールでの検出は非常に困難なものとなっています。

AWSクラウド全体が危険にさらされるIMDSv2バイパスの仕組み

CVE-2026-40175がCVSS最高スコアを獲得した最大の理由は、この脆弱性がAWS IMDSv2(Instance Metadata Service version 2)のセキュリティ機構を迂回できる点にあります。IMDSv2はAWSが導入したメタデータサービスの保護機能ですが、ヘッダインジェクションとHTTPスマグリングを組み合わせることで、このセキュリティ対策が無力化されてしまうのです。ここでは、クラウド環境における具体的な被害シナリオとその対策を詳しく解説していきましょう。

AWS IMDSv2のトークン認証を無効化するヘッダインジェクション手法

AWS IMDSv2は、EC2インスタンスのメタデータサービスにアクセスする際にセッショントークンを要求する仕組みです。従来のIMDSv1ではGETリクエストだけでメタデータを取得できたのに対し、IMDSv2ではまずPUTリクエストでX-aws-ec2-metadata-token-ttl-secondsヘッダを付与してトークンを取得し、そのトークンを後続リクエストに含めなければなりません。CVE-2026-40175の攻撃では、Prototype Pollution経由でAxiosのヘッダに注入されたCRLFシーケンスが、このPUTリクエストをスマグリングする役割を果たします。具体的には、正規リクエストのヘッダ内にPUT /latest/api/token HTTP/1.1というリクエスト行とIMDSv2に必要なヘッダを埋め込むことで、メタデータサービスから正規のセッショントークンを不正に取得するのです。IMDSv2がPUTメソッドを要求するのはHTTPメソッドの制限による保護ですが、スマグリングではHTTPメソッドも自由に指定できるため、この保護は完全に無効化されてしまいます。

IAM認証情報の窃取からAWSアカウント全体掌握に至る3段階の経路

IMDSv2バイパスによるAWSアカウント侵害は、3つの段階を経て完了します。第1段階は、前述のトークン取得です。スマグリングされたPUTリクエストにより、IMDSv2のセッショントークンが攻撃者の手に渡ることになります。第2段階は、取得したトークンを使用してメタデータサービスの/latest/meta-data/iam/security-credentials/エンドポイントにアクセスし、EC2インスタンスに紐付けられたIAMロールの一時的な認証情報(AccessKeyId・SecretAccessKey・Token)を窃取するプロセスです。第3段階では、窃取した認証情報を使って外部からAWSの各種サービスに正規ユーザとしてアクセスを行います。IAMロールの権限範囲によっては、S3バケットのデータ読み取り、RDSデータベースへのアクセス、他のEC2インスタンスの操作、さらにはIAMポリシーの変更によるアカウント全体の永続的な掌握まで到達する危険性があるのです。この一連の流れは、最初のPrototype Pollutionからわずか数秒で完了する可能性を持っています。

EC2・Lambda・ECS環境ごとに異なるメタデータサービス悪用の影響度

AWSのコンピューティングサービスには複数の形態がありますが、CVE-2026-40175の影響度はサービス形態ごとに異なる様相を呈しており、個別の評価が欠かせません。EC2インスタンスでは、デフォルトでIMDSが有効になっており、インスタンスプロファイルにIAMロールが割り当てられている場合は直接的な認証情報窃取のリスクを抱えています。AWS Lambdaでは、実行環境内からメタデータ相当の情報に環境変数経由でアクセスできるため、攻撃経路は若干異なるものの、関数に付与されたIAMロールの認証情報が露出する可能性は同様に存在するでしょう。ECS(Elastic Container Service)環境では、タスクメタデータエンドポイント経由でタスクロールの認証情報にアクセスできるため、コンテナ単位でのリスク評価が欠かせません。いずれの環境でも、Axiosを使用するNode.jsアプリケーションが稼働しており、かつ依存関係にPrototype Pollution脆弱性を持つライブラリが含まれている場合に被害が発生する構造は共通しています。

キャッシュポイズニングやセッション乗っ取りに発展する二次被害の実例

CVE-2026-40175の被害はAWSメタデータの窃取にとどまりません。HTTPリクエストスマグリングの技術は、ターゲットに応じてさまざまな二次被害を引き起こす可能性を秘めています。たとえば、リバースプロキシやCDNの背後にあるアプリケーションでは、スマグリングされたリクエストが共有キャッシュを汚染するキャッシュポイズニング攻撃に利用されるケースが想定されます。この場合、正規ユーザが汚染されたキャッシュからマルウェアや偽のコンテンツを受け取る事態に発展しかねません。また、CookieやAuthorizationヘッダをインジェクションすることで、管理者パネルへの不正アクセスやセッションハイジャックも技術的に実行可能です。Hostヘッダの改ざんによるパスワードリセットリンクの詐取、内部APIへのSSRFによる情報漏洩なども、この脆弱性を起点として発生しうる攻撃といえるでしょう。HTTPスマグリングは一度成立すると攻撃の自由度が非常に高いため、被害範囲の特定が困難になるという運用上の課題も伴います。

クラウド環境を運用する企業が最優先で確認すべき5つのチェック項目

CVE-2026-40175への緊急対応として、クラウド環境を運用する企業は以下の5つの項目を優先的に確認する必要があります。

  1. 自社のNode.jsアプリケーションが使用しているAxiosのバージョンを、直接依存・間接依存の両方で確認する
  2. EC2インスタンスのメタデータサービス設定で、IMDSv2を強制モード(HttpTokens: required)にしているか確認する
  3. IAMロールに付与している権限を最小権限の原則に基づいて見直し、不要な権限を削除する
  4. CloudTrailのログを確認し、メタデータサービスへの異常なアクセスパターンがないか調査する
  5. 依存ライブラリにPrototype Pollution脆弱性が存在しないか、npm auditやSnykで包括的にスキャンする

これらの項目のうち、Axiosのバージョン確認と1.15.0へのアップデートは最も即効性の高い対策です。IMDSv2の強制モード化はAxios以外の経路からの攻撃にも有効な多層防御であり、並行して実施することが推奨されるでしょう。

影響対象バージョンの特定と自社Node.jsプロジェクトの緊急確認方法

CVE-2026-40175の対応において、最初のステップは自社環境で使用しているAxiosのバージョンを正確に特定することです。直接依存だけでなく、他のライブラリを経由した間接依存としてAxiosが含まれているケースも多く、見落としが発生しやすいポイントといえます。ここでは、バージョン確認から脆弱性スキャンまでの実務的な手順を解説していきましょう。

影響を受けるAxios 1.15.0未満の全バージョンと修正対象コンポーネント

CVE-2026-40175の影響を受けるバージョンは、Axiosの1.15.0未満のすべてのリリースです。NVDおよび各種セキュリティデータベースでは影響範囲を「< 1.15.0」としている一方、GitHub Security Advisory(GHSA)のメタデータ上では脆弱なバージョンが「< 1.13.2」と表記されており、両者の間に差異が見られます。ただし、GHSAの脆弱性説明本文では「All versions (v0.x - v1.x)」と明記されているため、実務上は1.15.0未満の全バージョンを影響対象として扱うべきでしょう。修正対象の中核コンポーネントはlib/core/AxiosHeaders.jsとなっており、パッチでは、ヘッダ値を設定するAxiosHeaders.setメソッドに新しい検証関数assertValidHeaderValueが追加されました。この関数は、ヘッダに設定されるすべての値に対してCRLF文字の有無をチェックし、不正な文字が含まれている場合にはエラーをスローする仕組みです。修正コミットのハッシュは363185461b90b1b78845dc8a99a1f103d9b122a1で、GitHub上で差分を確認できます。なお、ヘッダ値の正規化処理を担うnormalizeValue関数も修正されていますが、主たる防御はassertValidHeaderValueによる事前検証が担っています。

npm lsコマンドで直接・間接依存のAxiosバージョンを一括確認する方法

自社プロジェクトでAxiosがどのバージョンで使用されているかを確認する最も基本的な方法は、npm ls axiosコマンドの実行です。このコマンドは、プロジェクトの依存ツリー全体からaxiosパッケージを検索し、直接依存と間接依存の両方を一覧表示してくれます。出力にはパッケージのバージョン番号と依存経路が含まれるため、どのライブラリ経由でAxiosが導入されているかを一目で把握可能です。たとえば、自社のコードではAxiosを直接使用していなくても、Firebase SDKやStripeライブラリなどの人気パッケージが内部でAxiosを利用しているケースは珍しくありません。複数のプロジェクトを管理している場合は、各プロジェクトディレクトリで個別にコマンドを実行しなければならない点に注意が必要です。モノレポ構成のプロジェクトでは、ワークスペースルートでnpm ls axios --allを実行することで、全ワークスペースの依存を横断的に確認できるでしょう。

npm auditとSnykで脆弱性スキャンを実行する際の3つの注意点

脆弱性スキャンツールを使用する際には、3つの注意点を意識することで精度を大幅に高められます。1点目は、npm auditの実行タイミングに関するものです。CVE公開直後はnpmのアドバイザリデータベースへの反映にタイムラグが発生する場合があり、CVE-2026-40175は2026年4月10日に公開されましたが、npm auditでの検出が可能になるまでに数時間のラグが生じていました。2点目は、devDependenciesの扱いに関する注意となります。npm audit --productionを使用すると本番環境のみの依存をスキャンできますが、ビルドプロセスでAxiosを使用するツールがある場合は開発依存にも脆弱なバージョンが残る可能性があるのです。3点目は、ツール間の検出差異についてです。npm auditとSnykではデータソースや重要度判定のロジックが異なるため、一方では検出されてもう一方では見逃されるケースが存在します。両方のツールで並行してスキャンを実施し、結果を突き合わせることが確実な対応策といえるでしょう。

package-lock.jsonの依存ツリーから間接Axiosを特定する実務手順

npm lsコマンドの結果だけでは、固定された依存関係の正確なバージョンを把握しきれないケースがあります。そのような場合は、package-lock.jsonを直接確認する方法が有効です。package-lock.jsonには、プロジェクトの全依存パッケージのバージョンが再現可能な形で記録されており、このファイル内で「axios」を検索し、「version」フィールドの値を確認することで、実際にインストールされているバージョンの正確な特定が可能となります。複数のバージョンがツリー内に共存している場合は、それぞれの依存経路を個別に追跡しなければなりません。たとえば、プロジェクトの直接依存ではAxios 1.15.0を指定していても、別のライブラリがAxios 1.7.2を間接依存として要求しており、node_modulesの深い階層に古いバージョンが残存しているケースがあるのです。grep -n "axios" package-lock.jsonによる検索で、該当箇所をすべて洗い出すことが実務上の確認手順として効果的でしょう。

CI/CDパイプラインに脆弱性チェックを組み込む際の判断基準

CVE-2026-40175のような緊急度の高い脆弱性への対応を迅速に行うためには、CI/CDパイプラインに脆弱性チェックを事前に組み込んでおくことが重要です。判断すべき主要な基準は3つに整理できます。まず、チェックのタイミングとして、プルリクエスト作成時・マージ時・デプロイ時のどの段階で検査を行うかの決定が必要です。コストとリスクのバランスを考慮すると、プルリクエスト段階での検査が最も推奨されるでしょう。次に、検査結果に対する閾値設定の問題があります。CVSSスコア9.0以上の脆弱性が検出された場合にビルドを失敗させるなど、明確なポリシーを定義しておくべきです。CVE-2026-40175のようなCVSS 10.0の場合は即座にデプロイをブロックする設定が適切といえます。最後に、ツール選定の基準として、npm auditの組み込みコマンド、GitHub Dependabot、Snyk CLI、Trivyなどの中から、自社のCI/CD環境と統合しやすいものを選択する判断が求められます。重要なのは、検査を導入するだけでなく、検出時のエスカレーションフローを事前に定義しておくことなのです。

npm間接依存の見落としが招くPrototype Pollution経由の連鎖被害

CVE-2026-40175が示す最も重要な教訓の一つは、直接依存だけを管理していても安全とはいえないという現実です。npmエコシステムではパッケージ同士の依存関係が複雑に絡み合っており、自社が意識していないライブラリが攻撃経路の一部になることがあります。ここでは、間接依存に潜むリスクと連鎖被害のメカニズムを掘り下げていきましょう。

直接依存していないAxiosが間接依存で混入する典型的な5パターン

自社のpackage.jsonにAxiosを記載していなくても、プロジェクト内にAxiosが含まれるケースは決して珍しくありません。典型的な混入パターンとして5つが挙げられます。第1に、Firebase Admin SDKやAWS SDK for JavaScriptなどのクラウドサービスSDKが内部通信にAxiosを使用しているケースです。第2に、StripeやTwilioなどの決済・通信系APIクライアントが依存しているパターンが見られます。第3に、SeleniumやPuppeteerなどのテストフレームワークのヘルパーライブラリがAxiosを間接的に利用している場合があるでしょう。第4に、CMSプラットフォームやヘッドレスCMSのSDK(ContentfulやStrapiなど)がHTTP通信にAxiosを採用しているケースも確認されています。第5に、社内で作成した共有ライブラリやユーティリティパッケージが内部でAxiosを使用しており、複数プロジェクトに横断的に影響するパターンです。いずれのケースでも、npm ls axiosによる網羅的な確認が不可欠といえます。

Prototype Pollution既知のqs・minimist等が依存に潜むリスク

CVE-2026-40175の攻撃チェーンが成立するためには、Axiosの脆弱性に加えてPrototype Pollutionを引き起こす別のライブラリが必要です。過去にPrototype Pollution脆弱性が報告されたライブラリは数多く存在し、その中にはnpmエコシステムで広く利用されるものが含まれているのです。代表例として、クエリ文字列パーサのqsには過去複数回のPrototype Pollution CVEが報告されてきました。コマンドライン引数パーサのminimistにも同様の脆弱性が確認されており、多くのCLIツールがこのライブラリに依存しています。設定ファイルパーサのiniや、オブジェクト操作ユーティリティのlodashの一部メソッドにも汚染リスクが報告済みです。これらのライブラリは、プロジェクトの深い依存階層に存在するため、開発者が直接意識する機会がほとんどありません。問題は、これらの古いバージョンが依存ツリーに残っている限り、Axiosをアップデートしても攻撃チェーンの「入口」が開いたままになってしまう点にあります。

サプライチェーン攻撃の入口になるnpmエコシステム特有の依存地獄

npmエコシステムは、他のパッケージマネージャと比較して依存関係の深さと複雑さが際立っています。一般的なNode.jsプロジェクトでは、package.jsonに記載された直接依存が数十個であっても、node_modulesディレクトリには数百から数千のパッケージがインストールされるのが実情です。この「依存地獄」と呼ばれる状況は、1つの脆弱性が予想外の経路で影響を及ぼすリスクを増大させる要因となっています。CVE-2026-40175のようなガジェット攻撃は、まさにこの構造を悪用した攻撃手法です。攻撃者の視点では、npmの依存ツリーの中にPrototype Pollution脆弱性を持つパッケージとAxiosの両方が含まれているプロジェクトを見つけるだけで十分といえるでしょう。npmの公開パッケージ数は300万を超え、各パッケージの依存関係を人手で追跡することは事実上不可能です。自動化されたサプライチェーン監視ツールの導入が、現代のNode.js開発において選択肢ではなく必須要件となっている現実を、今回のCVEは改めて突き付けています。

1つの汚染ライブラリがAxiosを経由して被害を増幅する連鎖の構造

CVE-2026-40175における「脆弱性増幅」のメカニズムを正確に理解することは、対策の優先順位を正しく判断するために不可欠です。通常、Prototype Pollution単体の脆弱性はCVSSスコアが中〜高程度に分類され、多くの場合は限定的な影響にとどまります。たとえば、Object.prototypeに予期しないプロパティが追加されるだけでは、直接的なリモートコード実行にはつながりにくいのが一般的でしょう。しかし、Axiosのようなガジェットが同じアプリケーションに存在する場合、低〜中程度のPrototype Pollutionが一気にCVSS 10.0のクリティカルな脆弱性に変貌するのです。これは、Axiosのconfigマージとヘッダ書き込み処理が、汚染されたプロパティを疑いなくHTTPリクエストに反映してしまうことが原因となっています。この増幅構造は「ガジェットチェーン」と呼ばれ、個々のライブラリの脆弱性評価だけでは全体のリスクを正しく見積もれない問題を浮き彫りにしています。依存関係を横断的に評価する視点が、今後ますます求められるでしょう。

依存関係の可視化を怠った企業が直面するインシデント対応の遅延事例

依存関係の管理を怠った場合に発生するインシデント対応の遅延は、CVE-2026-40175のような緊急度の高い脆弱性で特に深刻な問題となります。典型的な遅延パターンとして、まず「自社がAxiosを使用しているかどうかがすぐに判断できない」という初動の遅れが挙げられるでしょう。依存関係の棚卸しが行われていない企業では、セキュリティアラートを受け取ってから影響範囲の特定までに数日を要する事態が発生しています。次に、間接依存のAxiosを発見しても「どのライブラリ経由で導入されているか」が分からず、アップデート方法の判断に時間がかかるという問題があるのです。さらに、複数のプロジェクトに横断的にAxiosが含まれている場合、対応の優先順位付けに混乱が生じることも珍しくありません。これらの遅延はすべて、SBOM(Software Bill of Materials)の作成と継続的な更新を日常的に行っていれば回避可能なものです。CVE対応における時間はリスク露出と直結するため、事前準備の有無が被害規模を大きく左右することを忘れてはならないでしょう。

過去のAxios脆弱性CVE-2023-45857との比較で見る攻撃手法の進化

Axiosはこれまでにも複数の脆弱性が報告されてきましたが、CVE-2026-40175はその深刻度と攻撃手法の高度さにおいて過去の事例とは一線を画すものです。ここでは、過去の代表的なAxios脆弱性と今回のCVEを比較し、攻撃手法がどのように進化してきたかを分析していきましょう。

CVE-2023-45857のXSRFトークン漏洩と今回の影響範囲の比較

CVE-2023-45857は2023年に報告されたAxiosの脆弱性で、クロスサイトリクエスト時にXSRFトークンが意図しないサーバに送信されてしまう問題でした。この脆弱性の影響範囲は、特定の条件下でのトークン漏洩に限定されており、攻撃者が得られる情報もXSRFトークンという単一の値にとどまっていたのです。CVSSスコアは6.5と、中程度の評価にすぎません。一方、CVE-2026-40175は影響範囲がまったく異なる性質を持っています。ヘッダインジェクションを起点として、HTTPリクエストスマグリング、SSRF、クラウドメタデータ窃取、セッション乗っ取りなど、多岐にわたる攻撃に応用可能です。CVE-2023-45857が「特定の情報漏洩」であったのに対し、CVE-2026-40175は「システム全体の制御権限の奪取」につながる点で、被害の質と規模が根本的に異なるといえるでしょう。

比較項目 CVE-2023-45857 CVE-2026-40175
公開時期 2023年11月 2026年4月
CVSSスコア 6.5(中) 10.0(最高)
攻撃種別 XSRFトークン漏洩 ヘッダインジェクション・RCE・クラウド侵害
前提条件 クロスサイトリクエスト 任意のPrototype Pollution
影響範囲 トークン値の漏洩 システム全体・クラウドアカウント全体
ユーザ操作 必要 不要

上記の比較から明らかなように、CVE-2026-40175はあらゆる指標においてCVE-2023-45857を大幅に上回る深刻度を持っているのです。

CVSS6.5からCVSS10.0への深刻度上昇が意味するリスク増大の実態

Axiosの過去の脆弱性を振り返ると、CVSSスコアは概ね6〜8の範囲内に収まっていました。CVE-2023-45857の6.5やCVE-2024-39338の7.5など、いずれも中〜高程度の評価にとどまっていた状況です。それが今回のCVE-2026-40175で一気に10.0に跳ね上がりました。CVSSスコアの上昇は単なる数値の変化ではなく、攻撃の性質が根本的に変化したことを反映しています。過去のAxios脆弱性は、特定の条件やユーザ操作を必要とする「限定的な攻撃」でした。一方、CVE-2026-40175は認証不要・操作不要・直接入力不要という3つの「不要」条件を同時に満たし、影響範囲がアプリケーション単体からクラウドインフラ全体にまで拡大しているのです。この深刻度の上昇は、HTTPクライアントライブラリが内包するリスクが年々高度化していることを示しており、従来の脆弱性管理基準では対応が不十分になっていることへの警鐘といえるでしょう。

単体攻撃から連鎖型ガジェット攻撃へと進化した攻撃複雑性の変化

過去のAxios脆弱性と今回のCVEの最も本質的な違いは、攻撃の構造が「単体攻撃」から「連鎖型ガジェット攻撃」に進化した点にあります。CVE-2023-45857のようなXSRFトークン漏洩は、Axios単体の動作に起因する脆弱性でした。攻撃者はAxiosの特定の挙動を直接利用して情報を窃取するという単純な構図だったのです。一方、CVE-2026-40175ではAxios自体が攻撃の起点ではなく、Prototype Pollutionという別の脆弱性を「増幅」するガジェットとして機能しています。この連鎖構造は、防御の観点で重大な意味を持つでしょう。単体攻撃であれば、脆弱なコンポーネントを特定して修正すれば解決しますが、ガジェット攻撃では「攻撃の入口」と「増幅器」の両方に対策が必要となります。Axiosをアップデートしてもガジェットは塞がりますが、Prototype Pollutionの入口が残っていれば、別のガジェットが発見された際に再び攻撃が成立する可能性を排除できないのです。

Axiosの過去3年間に公開された主要CVE一覧とパッチ対応の傾向

Axiosに対して過去3年間に公開された主要なCVEを振り返ると、脆弱性の発見頻度と深刻度の両面で上昇傾向が見て取れます。2023年にはCVE-2023-45857(XSRFトークン漏洩、CVSS 6.5)が報告され、1.6.0で修正されました。2024年にはCVE-2024-39338(サーバサイドでの相対URLによるSSRF、CVSS 7.5)が報告され、パッチ適用まで一定の期間を要する事態となっています。2025年にはCVE-2025-27152(絶対URLによるSSRFおよび認証情報漏洩、CVSS 7.7)が公開され、1.8.2で修正されました。そして2026年のCVE-2026-40175は、CVSS 10.0という過去最高の深刻度で公開されるに至っているのです。この傾向から読み取れるのは、Axiosの脆弱性がHTTPリクエストの処理全般にわたる構造的な問題を反映しているという事実です。個別パッチの適用だけでは長期的な安全性を保証できないため、HTTPクライアントライブラリの選定と代替手段の検討を含めた包括的なアプローチが求められるでしょう。

今回の脆弱性を教訓にHTTPクライアント選定基準を見直す判断軸

CVE-2026-40175の発生を受け、AxiosからNode.js組み込みのfetch APIや他のHTTPクライアントへの移行を検討する動きが一部で見られます。しかし、HTTPクライアントの選定は単に「脆弱性が出たから乗り換える」という判断で行うべきではありません。評価すべき判断軸は複数存在しています。まず、ライブラリのメンテナンス体制として、セキュリティパッチの公開速度や脆弱性報告への対応姿勢の確認が欠かせません。Axiosの場合、今回のパッチは脆弱性公開と同時にリリースされており、対応速度自体は評価に値するでしょう。次に、機能的な互換性として、インターセプタ機能やリクエスト・レスポンスの変換処理など、Axios固有の機能に依存したコードの移行コストを算定する必要があるのです。さらに、代替候補であるfetch API・undici・got・ky等のライブラリについても、それぞれの脆弱性履歴やPrototype Pollution耐性を比較検討しなければなりません。移行判断は技術的・経済的な合理性に基づいて行うべきであり、単一のCVEへの感情的な反応で決めるべきではないでしょう。

Axios 1.15.0への安全なアップデート手順と修正パッチの技術的変更点

CVE-2026-40175への最も直接的かつ効果的な対策は、Axiosを修正済みのバージョン1.15.0以降にアップデートすることです。しかし、本番環境への影響を最小化するためには、アップデートの手順と修正内容の技術的な理解が欠かせません。ここでは、安全にアップデートを実施するための具体的な手順と、パッチの技術的な中身を解説していきましょう。

npm updateとnpm installの違いを踏まえた安全なバージョン更新手順

Axiosのアップデートを実施する際、npm update axiosnpm install axios@latestのどちらを使用するかで挙動が異なるため、事前の理解が不可欠です。npm update axiosは、package.jsonに記載されたバージョン範囲(semver range)の範囲内で最新バージョンに更新する動作をします。つまり、package.jsonが"axios": "^1.7.0"と記載されている場合は1.x系の最新版に更新されるため、1.15.0以降に到達できるのです。一方、"axios": "~1.7.0"のようにチルダで固定されている場合は1.7.x系の範囲でしか更新されず、1.15.0には到達しません。この場合はnpm install axios@^1.15.0で明示的にバージョン範囲を指定する必要があるでしょう。間接依存のAxiosについては、親パッケージのアップデートを通じて解消するか、npm overrides(npm 8.3以降)を使用して強制的にバージョンを上書きする方法が用意されています。いずれの手順でも、アップデート前にpackage-lock.jsonのバックアップを取得しておくことを推奨します。

assertValidHeaderValue関数の追加で修正されたヘッダ検証の仕組み

CVE-2026-40175の修正パッチの中核は、lib/core/AxiosHeaders.jsに追加されたassertValidHeaderValue関数です。この関数は、ヘッダ値として設定されるすべての文字列に対して、CR(\r)およびLF(\n)文字の有無を検査する役割を担っています。不正な文字が検出された場合は即座にエラーをスローし、リクエストの送信を中断する仕組みです。この検証はAxiosHeaders.setメソッドの内部から呼び出されるため、リクエストヘッダが設定されるすべての経路で一律に適用されるのです。パッチ以前は、normalizeValue関数が末尾のCRLF文字のみを除去する処理を行っていましたが、ヘッダ値の中間に含まれるCRLFには対応しておらず、不十分な対策にとどまっていました。修正後のコードでは、事前検証による「拒否」と正規化による「除去」の二重防御が実現されています。パッチのコミット差分は、GitHubのPR #10660で公開されており、修正内容の詳細を誰でも確認可能です。

アップデート後に既存APIリクエストの動作を検証するテスト観点

Axios 1.15.0へのアップデート後は、既存のAPIリクエストが正常に動作するかを確認するテストが不可欠です。主要なテスト観点は4つに整理できます。第1に、ヘッダに特殊文字を含むリクエストの動作確認です。正常な用途でヘッダ値に改行を含むケースは通常ありませんが、Base64エンコードされた値やマルチバイト文字を含むヘッダが正しく処理されるかを検証しておくべきでしょう。第2に、リクエストインターセプタやレスポンスインターセプタが従来どおり機能するかの確認が求められます。カスタムヘッダを追加するインターセプタを使用している場合は、新しいバリデーションに抵触しないかを重点的にテストしてください。第3に、エラーハンドリングの挙動変化の確認です。新しいバリデーションにより、これまで送信されていたリクエストがエラーになるケースがないかを調査しなければなりません。第4に、パフォーマンスへの影響です。すべてのヘッダ値に対して検証が追加されるため、大量のカスタムヘッダを付与するリクエストでのレイテンシ変化を計測することが推奨されるでしょう。

複数プロジェクトを一括更新する際に発生しやすい3つの失敗パターン

企業が複数のNode.jsプロジェクトを同時にアップデートする際、よく発生する失敗パターンが3つ存在します。第1の失敗は、直接依存のAxiosのみをアップデートし、間接依存の古いAxiosを見落とすパターンです。npm lsで確認したところ、直接依存は1.15.0に更新されているものの、別のライブラリが内部でAxios 1.7.xを使用しており、node_modulesの深い階層に脆弱なバージョンが残存していたという事例が報告されています。第2の失敗は、アップデート後にpackage-lock.jsonをコミットし忘れ、CI/CD環境では古いバージョンがインストールされるパターンです。ローカル環境では問題なく動作するため、本番環境での脆弱性残存に気づけないリスクがあるでしょう。第3の失敗は、モノレポ構成で特定のワークスペースのみをアップデートし、他のワークスペースの対応を後回しにするパターンです。共有ライブラリを経由して脆弱なAxiosが残っている場合、対応漏れにつながりかねません。これらの失敗を防ぐには、アップデート後に全プロジェクト・全ワークスペースでnpm ls axiosを再実行し、1.15.0未満のバージョンが残っていないことを確認する手順の徹底が不可欠です。

1.15.0で追加されたCRLF検証が破壊的変更に該当しない技術的根拠

Axios 1.15.0へのアップデートに際して、「新しいバリデーションが既存の動作を破壊するのではないか」という懸念を持つ開発者もいるでしょう。結論として、このCRLF検証は破壊的変更(Breaking Change)には該当しません。その技術的根拠は3つ挙げられます。第1に、HTTPの仕様(RFC 7230)において、ヘッダフィールド値にCRLFを含めることは明示的に禁止されているという点です。したがって、CRLFを含むヘッダ値を送信していたコードがあれば、それ自体がHTTPプロトコル違反であり、正常な動作とは見なされません。第2に、主要なHTTPサーバやプロキシの大半は、ヘッダ値にCRLFを含むリクエストを受信した場合にエラーを返すか、リクエストを拒否するのが標準的な動作です。つまり、CRLFを含むリクエストが正常に処理されていた環境は極めて例外的といえるでしょう。第3に、Node.jsのhttp.requestモジュール自体にもヘッダ値のバリデーションが存在しており、Axiosの新しい検証はそれと整合する形で追加されています。以上の理由から、正常なアプリケーションにおいてこのパッチが動作に影響を及ぼす可能性は極めて低いと判断できるのです。

再発防止に向けた依存関係監査とPrototype Pollution対策の実務指針

CVE-2026-40175への個別対応としてAxiosのアップデートを完了した後は、同種の脆弱性が再発した際にも迅速に対応できる体制を構築することが重要です。Prototype Pollutionとガジェット攻撃の組み合わせは今後も発見される可能性が高く、Axiosに限らず幅広いライブラリで類似のリスクが潜んでいます。ここでは、長期的な視点での対策指針を解説していきましょう。

週次npm auditの自動化で脆弱性を早期発見する運用フローの設計例

脆弱性の早期発見には、npm auditの定期実行を自動化する運用フローの構築が有効です。具体的な設計例として、GitHub Actionsのスケジュール実行(cron)を利用し、毎週月曜日の業務開始前にnpm auditを自動実行するワークフローが挙げられるでしょう。このワークフローでは、npm audit --jsonの出力をパースし、CRITICALまたはHIGHの脆弱性が検出された場合にSlackチャンネルへ通知を送信する仕組みとします。通知にはCVE番号・影響パッケージ・推奨バージョン・CVSSスコアを含め、担当者がすぐに対応判断できる情報を提供することが大切です。さらに、npm auditだけでなくSnyk CLIやTrivy等の複数ツールを並行実行し、検出漏れを防ぐ多層スキャンの設計も推奨されます。この運用フローの効果は、CVE-2026-40175のような緊急度の高い脆弱性が公開された際に、最短で翌営業日には検知・対応を開始できる状態を維持できる点にあるのです。

Object.freezeによるプロトタイプ汚染防御の実装方法と限界

Prototype Pollution攻撃そのものを防御するアプローチとして、Object.freeze(Object.prototype)の実行があります。この処理をアプリケーションの起動時に実行すると、Object.prototypeへの新しいプロパティの追加や既存プロパティの変更が禁止されるため、Prototype Pollutionの発生自体をブロック可能です。しかし、この手法にはいくつかの重要な限界が伴います。まず、一部のライブラリがObject.prototypeの拡張に依存している場合、フリーズによりそのライブラリが正常に動作しなくなるリスクがあるのです。次に、Object.prototype以外のプロトタイプ(Array.prototype、Function.prototypeなど)も汚染対象となりうるため、完全な防御にはなりません。さらに、Object.create(null)で生成されたプロトタイプレスオブジェクトはフリーズの影響を受けず、汚染の入口になる可能性を残しています。実務的には、Object.freezeは多層防御の一つとして有効ですが、これだけに依存するのではなく、ライブラリのアップデートや入力検証と併用すべき手法といえるでしょう。

信頼できないJSONのマージ処理を安全に実装するための入力検証基準

Prototype Pollutionの根本原因の多くは、外部からの信頼できないJSONデータをオブジェクトにマージする処理にあります。安全な実装を行うための入力検証基準は3つの階層で考えるべきでしょう。第1階層は、プロパティキーの検証です。__proto__constructorprototypeというキーを含むオブジェクトは、マージ処理の前に明示的に除外しなければなりません。第2階層は、マージ関数の安全な選択に関するものです。Object.assignはプロトタイプチェーンのプロパティをコピーしないため比較的安全ですが、深いマージ(deep merge)を行うカスタム関数やlodashの_.mergeには汚染リスクが存在します。深いマージが必要な場合は、再帰処理の各段階で上記の危険キーをフィルタリングする実装が不可欠です。第3階層は、JSONスキーマによる事前検証となります。受信するJSONの構造をJSON Schemaで定義し、想定外のプロパティを含むリクエストを処理前に拒否する方式が有効でしょう。この3階層の検証を組み合わせることで、Prototype Pollutionの発生リスクを大幅に低減できるのです。

DependabotやRenovateを導入して依存更新を自動化する比較と選定基準

依存関係の更新を手動で管理し続けることは、現代のNode.js開発において現実的ではありません。自動化ツールとして代表的なのはGitHub DependabotとRenovateの2つです。

比較項目 GitHub Dependabot Renovate
対応プラットフォーム GitHubのみ GitHub・GitLab・Bitbucket等
設定の柔軟性 基本的な設定項目 高度なカスタマイズが可能
グループ更新 限定的 パッケージグループ化に対応
自動マージ GitHub設定で対応 ネイティブ対応
モノレポ対応 基本対応 高度なワークスペース対応
導入コスト GitHub利用者は無料・即時 セルフホスト版は無料・SaaS版は有料

選定の基準としては、GitHubのみで運用している小〜中規模チームにはDependabotが導入の容易さで優れています。複数のGitホスティングを併用している場合や、モノレポ構成で細かな更新制御が必要な場合にはRenovateが適しているでしょう。いずれのツールを選択する場合でも、セキュリティアップデートについては自動マージを有効にし、パッチ適用までのリードタイムを最小化する設定を推奨します。CVE-2026-40175のようなCRITICALな脆弱性が報告された際に、自動でプルリクエストが生成され、テストを通過すれば即座にマージされる体制を構築しておくことが、被害を最小限に抑える鍵となるのです。

セキュリティインシデント発生時の社内報告フローと対応期限の設定指針

技術的な対策と並行して、セキュリティインシデントの発生時に組織として迅速に対応するための社内フローを整備することも不可欠です。CVE-2026-40175のようなCVSS 10.0の脆弱性が公開された場合、対応期限の目安として以下の基準が業界のベストプラクティスとして広く参照されています。

  • 検知から影響範囲の特定まで:4時間以内
  • パッチ適用の判断と優先度決定まで:8時間以内
  • 本番環境へのパッチ適用完了まで:24時間以内

報告フローの設計では、最初に脆弱性情報を検知する担当者(セキュリティチームまたはSRE)を明確にし、検知から一次報告までの連絡経路を定義しておく必要があります。一次報告には、CVE番号・CVSSスコア・影響対象サービス・推定被害範囲・対応案を含めるべきでしょう。次に、対応の意思決定者(CTO・VPoEなど)への報告基準を定めておくことが大切です。CVSS 9.0以上は即座に経営層に報告、7.0以上は当日中に報告などの閾値設定が効果的といえます。この社内フローが事前に整備されていれば、CVE-2026-40175のような緊急事態においても冷静かつ迅速な対応が可能となるのです。

資料請求

RELATED POSTS 関連記事