文章总结: 该文档分析Next.jsnext/og组件存在的CVE-2026-94545未认证远程代码执行漏洞。漏洞源于Satori渲染SVG时未转义用户输入,结合非PIE的Node.js二进制文件,攻击者可利用固定ROP链执行任意命令。建议升级至Next.js16.3.6或Satori0.33.5,或改用edgeruntime并加强访问控制。
综合评分: 88
文章分类: 漏洞分析,WEB安全,应用安全,安全工具
CVE-2026-94545 Next.js next/og 未经身份验证的远程代码执行
威胁情报Z分析
2026年10月2日 14:21
广东
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
next/og它通过 Satori 将 JSX 渲染成 SVG,然后栅格化该 SVG 来构建 Open Graph 图像。Satori 会将用户提供的文本写入 SVG 而不进行转义(CWE-116),因此请求可以关闭外层元素并注入自身的 SVG 标记。当路由在sharp安装了相关库的 Node.js 运行时运行时,该 SVG 会由原生库(libvips、librsvg、libxml2)而非沙盒化的 wasm 渲染器进行栅格化。由 XInclude 引用和嵌套 DTD 实体构建的有效负载会破坏原生解析器内部的内存。官方的 Node.js 二进制文件并非 PIE 版本,因此其代码和 GOT 未随机化,并且固定的 ROP 链可以到达而execve不会发生地址泄漏。只需向 OG 图像路由发送一个未经身份验证的请求,就足以以服务器进程的身份运行命令。
影响
- 未经身份验证的代码将作为 Next.js 服务器进程执行。任何将请求数据传递到该进程的路由ImageResponse都是一个接收器。
- 该漏洞利用是盲目的。成功后execve,工作进程会被替换,因此 HTTP 请求会直接关闭,结果必须通过其他方式返回,例如反向 shell 或向服务器发送回传命令。
- 有效载荷稳定。由于 Node 二进制文件不是 PIE 加密的,因此对于给定的 Node 版本,每个主机和重启后的 gadget 地址都相同,所以不需要针对特定目标进行泄漏或暴力破解。
- 一次成功的攻击会导致工作进程崩溃。节点进程会被注入的命令替换,因此服务器会停止响应,直到重启为止。
概念验证
存在漏洞的路由是POST /api/og。它获取请求体并将其放入 SVG 中,
最简单的运行方式是打开一个反向 shell。给它目标地址和监听地址;它会自动启动nc ,发出请求,并将 shell 交给你。
修复建议
- 升级到 Next.js 16.3.6 / Satori 0.33.5 或更高版本,该版本会在序列化 SVG 文本时对其进行转义,从而关闭注入。
- 如果暂时无法升级,请将next/og路由移至export const runtime = ‘edge’使用沙盒 wasm 渲染器的位置,或者移除路由sharp以避免访问原生路径,并将未经清理的用户输入排除在ImageResponse子进程之外。
- 将 OG 镜像路由置于身份验证或允许列表之后,并限制服务器的出站流量,以增加盲泄露的难度。
- 打完补丁后,将可通过互联网访问的实例视为已入侵:轮换应用程序进程可以读取的任何密钥,并检查其持久性。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:威胁情报Z分析 《CVE-2026-94545 Next.js next/og 未经身份验证的远程代码执行》