news 2026/4/15 14:55:43

深入解析Next.js中间件授权绕过漏洞CVE-2025–29927

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入解析Next.js中间件授权绕过漏洞CVE-2025–29927

Next.js: CVE-2025–29927 Tryhackme Write-up

探索Next.js中的一个授权绕过漏洞。

作者: 0verlo0ked
阅读时间: 6分钟 · 2025年3月26日

引言

Next.js是由Vercel开发的Web开发框架,旨在简化高性能Web应用程序的创建。它构建于React之上,通过添加静态站点生成和服务端渲染等功能扩展了React的能力。SSG在构建时预生成页面,实现更快的内容交付;SSR则在请求时渲染页面,减少加载时间。简言之,Next.js通过添加功能来提升性能和用户体验。

CVE-2025–29927是最近由Rachid和Yasser Allami在Next.js中发现的一个漏洞。该漏洞表明,如果授权检查发生在中间件中,攻击者有可能绕过这些检查。中间件是开发者控制传入请求的部分,它充当传入请求和路由系统之间的桥梁。路由系统是基于文件的,即通过组织文件和目录来创建和管理路由。此漏洞允许攻击者绕过基于中间件的授权,14.2.25之前的所有版本以及15.2.3之前的版本均受此漏洞影响。

Next.js广泛应用于各类应用程序,包括电子商务平台、新闻应用、文档站点和交互式Web应用。因此,该漏洞可能造成严重后果,需要管理员将其安装升级到已修复的版本。

漏洞利用

概念验证可利用应用和利用代码已由Yunus Aydin在GitHub上发布。我们已适配该应用并将其托管在附带的虚拟机中。您可以通过在AttackBox上访问http://10.10.149.25:3000来查看示例Web应用。但是,如果您尝试访问受保护的路由http://10.10.149.25:3000/protected,您将被重定向到主页。

Curl

利用CVE-2025–29927漏洞非常简单;攻击者只需在其请求中添加额外的HTTP头部x-middleware-subrequest: middleware。正如披露此漏洞的原始文章所解释的,添加x-middleware-subrequest头部会导致请求在没有中间件处理的情况下被转发到其目的地。因此,只需使用带有适当头部参数的curl即可访问受保护的路由(即页面)。

利用此漏洞可以让我们访问受保护的页面。一个简单的方法是在AttackBox的终端中执行以下命令:

curl-H"x-middleware-subrequest: middleware"http://10.10.149.25:3000/protected

该命令类似于通常的curl命令,只有一个例外:它使用-H(等同于--header)向HTTP GET请求添加一个额外的头部。因此,上述curl命令允许攻击者绕过所有安全控制并获取受保护的页面。

Burp Suite

如果您更喜欢图形用户界面,使用Burp Suite利用此漏洞同样容易。一种简单的方法是使用Burp Suite的浏览器,并在访问http://10.10.149.25:3000/protected时修改请求。

如果您不熟悉Burp Suite,可以在启动Burp Suite后按照以下步骤操作:

  1. 导航到Proxy标签页并确保Intercept处于开启状态。这将确保Burp Suite拦截所有HTTP请求,并让您在请求发送到Web服务器之前有机会修改它们。
  2. 点击Open browser按钮并导航到http://10.10.149.25:3000/protected
  3. HTTP请求被拦截;它将保持冻结状态,直到您点击Forward按钮。

在按下Forward按钮之前,您必须在HTTP头部添加x-middleware-subrequest: middleware。下图显示了一个被操纵的头部示例。您可以在浏览器中看到结果。

THM{NEXT_MDLE_JS}

检测

从前面的任务中回顾一下,针对Next.js的CVE-2025–29927是一个中间件授权绕过漏洞,导致能够访问先前需要此类授权的页面和路由。

本任务将介绍一些可用于检测此攻击发生的技术和规则,包括通过日志和网络流量。

手动检测

Web服务器日志可能用于发现此漏洞利用发生的证据。然而,这取决于Web服务器是否配置为记录HTTP头部。例如,NodeJS允许通过request.headers['x-middleware-subrequest']记录此特定HTTP头部。

如果Web应用被代理,则需要修改Nginx或Apache2等Web服务器上的日志配置以记录此特定头部。例如,可以在Apache2中使用LogFormat

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{x-middleware-subrequest}i\"" custom

正确设置此HTTP头部的日志记录后,就可以使用Grep、Yara等常用工具。

Snort (v2)

以下Snort规则在用作IDS时,可用于检测CVE-2025–29927的发生:

alert tcp any any -> any any (msg:"HTTP 'x-middleware-request' header detected, possible CVE-2025-29927 explotation";content:"x-middleware-subrequest"; rawbytes; sid:10000001; rev:1)

此规则检查数据包时不考虑任何协议,例如http_headers模块。这是因为在撰写本文时,HTTP头部 “x-middleware-request” 在Snort中不是被识别的头部

首先,我们将Snort规则添加到本地规则中。在Ubuntu上,默认位于/etc/snort/rules/local.rules。现在我们将粘贴上面的代码片段并保存。请注意,如果您已有现有规则,则需要将sid值更改为另一个值。

编辑Snort的local.rules

ubuntu@tryhackme-2404:~$sudonano/etc/snort/rules/local.rules# $Id: local.rules,v 1.11 2004/07/23 20:14:44 bmc Exp $# ----------------# LOCAL RULES# ----------------# This file intentionally does not come with signatures. Put your local# additions here.alert tcp any any ->anyany(msg:"HTTP 'x-middleware-request' header detected";content:"x-middleware-subrequest";rawbytes;sid:10000001;rev:1)

现在,我们可以运行Snort并测试检测。下面的终端以控制台模式运行Snort,用于演示警报触发。

Snort检测CVE-2025–29927

ubuntu@tryhackme-2404:/var/log/snort$sudosnort-q-l/var/log/snort-iens5-Aconsole-c/etc/snort/snort.conf 03/24-20:16:13.424299[**][1:10000001:1]HTTP'x-middleware-request'header detected[**][Priority:0]{TCP}10.10.142.69:49432->10.10.219.251:3000

Zeek

Zeek为网络流量中的威胁检测提供了更全面的机会。对于CVE-2025–29927,可以使用以下Zeek规则:

module CVE_2025_29927; export { redef enum Log::ID += { LOG }; global log_policy: Log::PolicyHook = Log::IGNORE; event http_header(c: connection, is_orig: bool, name: string, value: string) { if (name == "x-middleware-subrequest" && value == "middleware") Log::write(HTTP::LOG, [$timestamp=c$start_time, $uid=c$uid, $id=c$id, $note="CVE_2025_29927_Exploit", $msg="Detected HTTP header associated with CVE-2025-29927", $header=name, $value=value]); notice_info(c, "CVE-2025-29927 Exploit", fmt("The HTTP header '%s' associated with CVE-2025-29927 was detected", value)); } }

确保将此文件以.zeek扩展名保存在Zeek脚本的配置目录中。您需要通过添加@load ./cve_2025_29927.zeek来修改您的local.zeek以包含此脚本。

最后,通过sudo zeekctl deploy重启Zeek以应用配置更改。如果成功,Zeek现在会在检测到CVE-2025-29927时发出警报:

[Connnection_ID] The HTTP header "x-middleware-subrequest" associated with CVE-2025-29927 was detected

结论

在本房间中,我们介绍了此漏洞存在的原因以及如何利用它。查阅关于发现此漏洞的原始文章,重要地提醒了我们,在许多流行应用程序的源代码中仍然潜伏着许多漏洞。对于已打补丁的版本,用户需要升级到以下版本:

  • Next.js 15.x 应升级到 15.2.3
  • Next.js 14.x 应升级到 14.2.25
  • Next.js 13.x 应升级到 13.5.9
  • Next.js 12.x 应升级到 12.3.5

如果无法打补丁,唯一的缓解措施是阻止包含x-middleware-subrequest的HTTP请求到达您的Web应用程序。
CSD0tFqvECLokhw9aBeRql9ywWnUrGrT72TdyN/gd6yOTLM3clGQjgD9J9Lx1TF8YNgmlAHUWHEmpgBYjdfmIVyFo6uEgdc/Ets+tmuLaFFqg3xQ/BFAz4rnVGyFjGTe
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 1:44:40

Litera One精细化控制功能上线

对于现代律师事务所的首席信息官和 IT主管而言,在引入创新的同时保持稳定是一种不断的平衡之举。尽管新的法律科技功能有望带来切实的收益,但在全公司范围内一次性推出可能会造成混乱,扰乱既定的工作流程,并使支持团队不堪重负。在…

作者头像 李华
网站建设 2026/4/14 15:59:18

markdown语法与TensorFlow代码块结合输出高质量AI技术文档

构建可执行的AI技术文档:当Markdown遇见TensorFlow 在深度学习项目中,你是否曾遇到这样的尴尬场景?——新同事拿着一份“完整”的模型训练文档,却因为环境不一致、依赖缺失或代码片段无法运行而卡在第一步;又或者你自己…

作者头像 李华
网站建设 2026/4/14 17:12:58

从GitHub获取TensorFlow-v2.9镜像并部署GPU训练环境

从GitHub获取TensorFlow-v2.9镜像并部署GPU训练环境 在深度学习项目开发中,最令人头疼的往往不是模型设计本身,而是环境搭建过程中的各种“依赖地狱”:CUDA版本不匹配、cuDNN安装失败、Python包冲突……这些问题不仅耗费大量时间&#xff0c…

作者头像 李华
网站建设 2026/4/14 18:00:01

SSH Multiplexing提升TensorFlow高频命令响应速度

SSH Multiplexing提升TensorFlow高频命令响应速度 在深度学习项目开发中,我们常常面对这样的场景:本地编写代码、远程服务器上训练模型。尤其是当使用云平台提供的 TensorFlow-v2.9 GPU 镜像 时,虽然环境开箱即用,但频繁的 rsync …

作者头像 李华
网站建设 2026/4/14 15:08:11

程序员必看!飞算JavaAI如何颠覆传统编码模式(AI编程新纪元)

第一章:程序员必看!飞算JavaAI如何颠覆传统编码模式(AI编程新纪元)在人工智能技术迅猛发展的今天,飞算JavaAI正以前所未有的方式重塑开发者的编码体验。它不再依赖传统的手动编写与调试流程,而是通过深度学…

作者头像 李华
网站建设 2026/4/15 4:40:25

GitHub Gist分享小型TensorFlow代码片段技巧

GitHub Gist 与 TensorFlow-v2.9 镜像:轻量级深度学习协作新范式 在日常的深度学习开发中,你是否遇到过这样的场景?同事发来一段“能跑”的模型代码,你兴冲冲地复制进本地环境,结果却卡在 ModuleNotFoundError 上&…

作者头像 李华