先关注,不迷路
免责声明
请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。
漏洞介绍
Next.js 是一个用于构建全栈 Web 应用程序的 React 框架。在 14.2.25 和 15.2.3 之前,该漏洞允许攻击者通过操纵 x-middleware-subrequest 请求头绕过基于中间件的安全控制,导致未经授权访问受保护资源和敏感数据。如果修补到安全版本不可行,建议您阻止包含 x-middleware-subrequest 标头的外部用户请求到达您的 Next.js 应用程序。此漏洞已在 14.2.25 和 15.2.3 中修复。
影响范围
11.1.4 < Next.js ≤ 13.5.614.0 < Next.js < 14.2.2515.0 < Next.js < 15.2.3
漏洞复现
环境搭建(提前安装npm)
git clone https://github.com/azu/nextjs-cve-2025-29927-poc
npm install next@15.2.2
npm run dev
POC:
(这微信页面直接复制代码格式会乱,可以浏览器打开复制)
使用 CVE-2025-29927 绕过中间件
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
漏洞分析
旧版本的框架 (v12.0.7) 时,存在以下代码:
当 next.js 应用程序使用中间件时,会使用 runMiddleware
函数,后者 - 除了其主要实用程序之外 - 检索 x-middleware-subrequest
标头的值,并使用它来了解是否应该应用中间件 。拆分标题值以使用列字符 (:
) 作为分隔符创建列表,然后检查此列表是否包含 middlewareInfo.name
值。
这意味着,如果我们将具有正确值的 x-middleware-subrequest
标头添加到我们的请求中,中间件 - 无论其目的如何 - 都将被完全忽略 ,请求将通过 NextResponse.next()
转发,并将完成其到原始目的地的旅程 ,而不会受到中间件的任何影响 。
在较新的版本中,逻辑又发生了轻微的变化
常量深度的值必须大于或等于常量 MAX_RECURSION_DEPTH
的值(即 5
),分配后,每当列表 -subrequests
- 的值之一(是标头值的结果,以 :
分隔)等于值 params.name
时,常量深度就会增加 1,该值只是中间件的路径 。如前所述, 只有两种可能性 :middleware
或 src/middleware
。
因此,我们只需要将以下 header添加到我们的请求中,以绕过中间件:
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
or
x-middleware-subrequest: src/middleware:src/middleware:src/middleware:src/middleware:src/middleware
修复意见
目前厂商已发布可更新版本15.2.3,建议用户尽快更新至 Next.js 的修复版本或更高的版本:
官方补丁下载:
https://github.com/vercel/next.js/releases
原文始发于微信公众号(PokerSec):【漏洞复现】Next.js 中间件身份认证绕过漏洞(CVE-2025-29927)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论