
CVE-2025-29927(Next.jsのミドルウェアバイパスの脆弱性)の概念実証エクスプロイトです。バージョン固有のペイロードと、保護されたルートへの不正アクセスをテストするためのDockerベースのラボが含まれています。

Next.js のバージョン 11.1.4 から 13.5.6、14.x の 14.2.25 未満、15.x の 15.2.3 未満のすべてのバージョンがこの脆弱性の影響を受けます。特に、アクセス制御を実装するためにミドルウェアに依存しているアプリケーションでは影響が大きく、攻撃者は認証なしで保護されたリソースに不正にアクセスできる可能性があります。
CVE-2025-29927 の脆弱性は、Next.js が x-middleware-subrequest ヘッダーを処理する方法における設計上の欠陥に起因します。このヘッダーは、本来 Next.js フレームワーク内でミドルウェアの無限実行ループを防ぐための内部利用を目的としていました。
Next.js アプリケーションがミドルウェアを使用する場合、runMiddleware 関数が呼び出されて受信リクエストを処理します。この関数の機能の一環として、x-middleware-subrequest ヘッダーの存在がチェックされます。このヘッダーが存在し、特定の値を含んでいる場合、ミドルウェアの実行は完全にスキップされ、リクエストは NextResponse.next() を介して元の宛先に直接転送されます。
脆弱性は、このヘッダーチェックが外部ユーザーによって悪用される可能性があるという点にあります。攻撃者は、正しい値を持つ x-middleware-subrequest ヘッダーをリクエストに追加することで、任意のミドルウェアベースの保護メカニズムを完全にバイパスできます。
リポジトリをクローンします:
git clone <repository_url>
プロジェクトディレクトリに移動します:
cd nextjs-docker-app
Docker イメージをビルドします:
docker build -t nextjs-app .
Docker コンテナを実行します:
docker run -p 3000:3000 nextjs-app
ブラウザで http://localhost:3000 にアクセスします。
悪用方法は Next.js のバージョンによって若干異なります:
これらのバージョンでは、ミドルウェアファイルは _middleware.ts という名前で pages フォルダ内に配置する必要がありました。middlewareInfo.name の値は、ディレクトリ名とファイル名から構成されていました:
x-middleware-subrequest: pages/_middleware
ネストされたルートの場合、異なるレベルに複数のミドルウェアファイルが存在する可能性があり、ヘッダーに対して複数の可能な値が生じます:
x-middleware-subrequest: pages/dashboard/_middleware
または
x-middleware-subrequest: pages/dashboard/panel/_middleware
バージョン 12.2 以降、Next.js はミドルウェアの規則を変更しました。ファイル名は middleware.ts(アンダースコアなし)とし、pages フォルダ内に配置する必要はなくなりました。これらのバージョンでは、ペイロードはよりシンプルです:
x-middleware-subrequest: middleware
さらに、Next.js では /src ディレクトリを使用した代替プロジェクト構成も可能です。その場合、ペイロードは次のようになります:
x-middleware-subrequest: src/middleware
バージョン 13.2.0 以降、Next.js はミドルウェア実行の最大再帰深度を導入しました。これは無限ループを防ぐために実装されましたが、脆弱性には影響しません。悪用方法は同じであり、ヘッダーチェックは再帰深度チェックの前に行われるためです。
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
または、/src ディレクトリ構成を使用するプロジェクトの場合:
x-middleware-subrequest: src/middleware:src/middleware:src/middleware:sr
=======
# cve-2025-29927
>>>>>>> 56c7b2dcd548caf771750519107bf7c57749a864