news 2026/5/31 0:34:34

深入解析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/5/27 18:30:07

diskinfo统计模型参数文件大小变化规律

diskinfo统计模型参数文件大小变化规律 在深度学习项目开发中,一个常被忽视但极具工程意义的问题浮出水面:随着训练轮次增加,模型检查点文件是如何“悄然膨胀”的?尤其是在使用 TensorFlow 这类主流框架进行长时间训练时&#xff…

作者头像 李华
网站建设 2026/5/28 2:23:40

GitHub Sponsors支持开源TensorFlow工具开发者

GitHub Sponsors 支持开源 TensorFlow 工具开发者 在人工智能技术飞速演进的今天,一个看似不起眼却至关重要的问题正悄然影响着全球开发者的日常:如何快速、稳定地搭建一个可复用、可协作的深度学习环境?尤其是在高校实验室、初创团队或远程协…

作者头像 李华
网站建设 2026/5/30 22:31:28

diskinfo识别RAID阵列健康状态保障TensorFlow数据安全

diskinfo识别RAID阵列健康状态保障TensorFlow数据安全 在深度学习项目中,一次模型训练动辄持续数天甚至数周。当GPU集群昼夜不息地处理海量数据时,最怕的不是算力瓶颈,而是某块硬盘突然“罢工”——轻则训练中断、检查点丢失,重则…

作者头像 李华
网站建设 2026/5/24 17:03:11

大模型Token重复惩罚:抑制TensorFlow生成重复文本

大模型Token重复惩罚:抑制TensorFlow生成重复文本 在构建智能对话系统或自动写作工具时,你是否曾遇到这样的尴尬场景?模型一本正经地输出:“这个方案非常非常好非常好……”或者“我们很高兴很高兴很高兴地宣布……”。这种机械式…

作者头像 李华
网站建设 2026/5/29 4:25:24

HTML前端可视化+TensorFlow后端计算:基于v2.9镜像的完整方案

HTML前端可视化TensorFlow后端计算:基于v2.9镜像的完整方案 在深度学习项目开发中,一个常见的困境是:明明代码逻辑清晰、模型结构合理,但在训练过程中却难以直观观察中间结果,调试起来如同“盲人摸象”。尤其当团队协作…

作者头像 李华
网站建设 2026/5/22 8:46:09

PyTorch安装教程GPU vs TensorFlow 2.9:哪个更适合你的大模型需求?

PyTorch安装教程GPU vs TensorFlow 2.9:哪个更适合你的大模型需求? 在构建大语言模型、图像生成系统或复杂推荐引擎的今天,开发者面临的第一道坎往往不是算法设计,而是——环境怎么装?GPU 怎么跑?为什么别人…

作者头像 李华