【漏洞预警】Next.js爆出新漏洞,不用登录实现命令执行(POC已公开)

admin 2026-09-01 04:30:52 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: Next.js存在CVE-2026-75604严重漏洞,CVSS评分9.9,影响Windows平台特定版本,可未授权远程命令执行。根因是缓存路径穿越未处理反斜杠,攻击者可读取ServerAction加密密钥并伪造请求执行任意命令。建议升级至15.5.24或16.3.3及以上版本,或停用增量静态缓存。 综合评分: 88 文章分类: 漏洞预警,漏洞分析,WEB安全


【漏洞预警】Next.js 爆出新漏洞,不用登录实现命令执行(POC已公开)

YGnight YGnight

night安全

2026年8月31日 08:15 四川

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

一、漏洞描述

收到情报Next存在缓存路径穿越漏洞,编号是CVE-2026-75604,可以在未授权的情况下实现远程命令执行,poc脚本已经公开了,简单分析了一下漏洞形成的原理,导致这个漏洞的问题出在  Next.js 自带的文件缓存上,只在 Windows  上触发。攻击者不用登录,发几个构造好的请求就能在服务器上执行任意命令,直接拿下整台机器。

问题的根本原因是路径穿越导致的。Next.js 在把网址转成缓存文件名时,没有把反斜杠当成需要处理的特字符。而 Windows 上反斜杠就是目录分隔符,攻击者通过在网址里塞 ..\ 就能一层层往上跳,把不该看的文件读出来,最终演变成远程命令执行。

| | | | — | — | | CVE 编号 | CVE-2026-75604 | | 漏洞类型 | 缓存路径穿越 + 信息泄露 + 未授权远程命令执行 | | 影响组件 | Next.js 自带的文件系统缓存(.next 目录),及其中的 Server Action 加密密钥处理 | | 受影响版本 | 13.4 到 15.5.24 之前,以及 16.0 到 16.3.3 之前 | | 修复版本 | 15.5.24 和 16.3.3 | | CVSS 评分 | 9.9,严重 | | 利用条件 | 部署在原生 Windows 上,同时使用了 Pages Router 和 App Router,并且网站还开启了增量静态缓存 |

二、漏洞原理

这个漏洞是两处问题凑到一起才成立的,核心都出在反斜杠没有被当成特殊符号处理。

第一处是路径穿越。Next.js 会给带参数的动态页面开缓存,把访问过的内容写进 .next 目录下的文件里。它转义网址的时候只处理了正斜杠、井号和问号,反斜杠完全没管:

// 漏洞版本:转义范围不含反斜杠 \
segment.replace(
  new RegExp(`([/#?]${escapeEncoded ? '|%(2f|23|3f|5c)' : ''})`, 'gi'),
  (char) => encodeURIComponent(char)
)

// 修复版本:反斜杠 \ 纳入转义范围
segment.replace(
  new RegExp(`([/#?\\]${escapeEncoded ? '|%(2f|23|3f|5c)' : ''})`, 'gi'),
  (char) => encodeURIComponent(char)
)

Windows 中反斜杠为路径分隔符且未被转义,攻击者在 URL 中插入 ..%5C(即 ..\),结合已开启的动态页面,可逐层向上越界直至离开缓存目录。负责拼接路径的函数 getFilePath 未校验拼接结果是否仍位于缓存目录内:

// 修复版本在拼接后增加路径校验
const filePath = path.join(rootDir, key)
if (!(filePath.startsWith(rootDir + path.sep) || filePath === rootDir)) {
  throw new Error('Invalid file path: ' + filePath)
}
return filePath

越界后读取的目标为 server-reference-manifest.json。该文件存放 Server Action 相关信息,其中包含一把加密密钥。结合路径穿越可匿名读取该文件,取得 Server Action 加密密钥。

第二处:以窃取密钥伪造请求,执行命令。Server Action 为 Next.js 处理表单提交的机制,提交参数以密钥加密。在触发页面中选取可接收传入的闭包绑定参数的动作,即可利用密钥自行加密构造参数,将待执行命令注入其中:

# 以窃取密钥加密"构造函数"载荷作为伪装参数
flight = b'1:{}\n0:["$1:constructor:constructor"]\n'
iv = os.urandom(16)
plaintext = action_id.encode() + flight
ciphertext = AESGCM(encryption_key).encrypt(iv, plaintext, None)

# 命令载荷:调用 cmd.exe 执行并回传结果
'const cp=process.mainModule.require("node:child_process");'
'const output=cp.execFileSync("cmd.exe",["/d","/s","/c",<命令>],'
' &nbsp;{encoding:"utf8"});'

整个利用链是1.经反斜杠穿越缓存目录 2.读取 Server Action 加密密钥 3.伪造携带命令的请求 4.在服务器执行任意命令。整个流程是不需登录的。命令执行结果经攻击者自建的回连服务器回传,PoC 默认执行 whoami 验证。

三、修复建议

  1. 升级至 15.5.24 或 16.3.3 及以上版本。
  2. 暂无法升级的情况,可以停用增量静态缓存相关动态页面。

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:night安全 YGnight YGnight《【漏洞预警】Next.js 爆出新漏洞,不用登录实现命令执行(POC已公开)》

评论:0   参与:  0