
このラボ環境をゼロから自分で構築しました。Next.jsアプリケーション内にログイン、ホームページ、管理ページを用意しました。ミドルウェアで認可メカニズムを設定した後、Burp Suiteを使用してCVE-2025-29927の脆弱性を管理された環境で実証しました。
Next.js アプリケーションでは、ミドルウェアがリクエストがアプリケーションに到達する前に実行され、認証や認可などのチェックを実行します。
CVE-2025-29927 の脆弱性では、特別に追加された x-middleware-subrequest HTTP ヘッダーにより、ミドルウェアが特定の状況下でリクエストを検証済みとして扱う可能性があります。これにより、権限のないユーザーが保護されたページにアクセスできる可能性があります。
このプロジェクトでは、Docker を使用して構築したラボ環境で、Next.js アプリケーションに影響を与える CVE-2025-29927 の脆弱性を実演しました。
ラボ環境はゼロから自作しました。Next.js で login、index、admin の各ページを作成しました。その後、ミドルウェアを使用して admin ページに権限チェックを追加しました。
Burp Suite で HTTP リクエストをキャプチャして x-middleware-subrequest ヘッダーを追加し、ミドルウェアのチェックをバイパスして権限なしで admin ページにアクセスできることを実演しました。
.
├── pages
│ ├── admin.js
│ ├── index.js
│ └── login.js
├── middleware.js
├── Dockerfile
├── package.json
└── README.md
プロジェクトを実行する前に、以下がインストールされている必要があります。
リポジトリをコンピューターにダウンロードします。
git clone https://github.com/berraesen/nextjs-middleware-auth-bypass-lab.git
フォルダーに移動します。
cd nextjs-middleware-auth-bypass-lab
Docker イメージを作成します。
docker build -t nextjs-auth-bypass .
コンテナを起動します。
docker run -d -p 3000:3000 --name nextjs-lab nextjs-auth-bypass
ブラウザで次のアドレスにアクセスします。
http://localhost:3000
プロジェクトには以下のページがあります。
admin ページへのアクセスはミドルウェアを介して制御されています。
まず、ブラウザから /admin ページへのアクセスを試みます。
権限がないため、login ページにリダイレクトされます。
Burp Suite でリクエストをキャプチャします。
リクエストに次の HTTP ヘッダーを追加します。
x-middleware-subrequest: middleware
リクエストを再送信します。
ミドルウェアのチェックがバイパスされると、admin ページにアクセスできることが確認できます。
セットアップ完了後:
İstemci
│
▼
HTTP Request
│
▼
Next.js Middleware
│
├──────────────► Normal İstek
│ │
│ ▼
│ Yetki Kontrolü
│ │
│ ▼
│ Login Sayfasına Yönlendirme
│
▼
x-middleware-subrequest
Header Eklendi
│
▼
Middleware Kontrolü Atlandı
│
▼
Admin Sayfasına Erişim
この脆弱性を解消するには、影響を受ける Next.js のバージョンを最新版に更新することをお勧めします。
また、ミドルウェアだけで認可を行うのではなく、サーバー側でも追加の権限チェックを実施する必要があります。