【高危漏洞预警】Next.js ImageResponseRCE漏洞CVE-2026-94545
飓风网络安全
2026年9月30日 18:25
新疆
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
一、漏洞概述
Next.js 16.2.0 ~ 16.3.5版本内置next/og模块用于动态生成Open Graph社交预览图,底层依赖Satori库渲染SVG转PNG。
当开发者直接把URL参数、用户提交内容未经转义写入SVG元素时,攻击者可以注入恶意SVG节点。Satori上游依赖链存在缺陷,恶意SVG可触发Node.js服务端远程代码执行。
风险场景:网站分享预览图接口、OG图片API,接收?title=xxx这类参数并直接渲染到ImageResponse中,是重灾区。
修复版本:Next.js 16.3.6,升级后修复依赖链中的安全问题。
二、影响范围
✅ 受影响版本
16.2.0 ≤ Next.js < 16.3.6,仅Node.js运行时的ImageResponse,Edge Runtime不受此漏洞影响。
✅ 易受攻击业务特征
-
使用ImageResponse写OG图片接口;
-
query参数、用户输入直接嵌入SVG,没有HTML/SVG转义;
-
接口公网可访问,无鉴权。
❌ 不受影响
• Next.js <16.2.0;Next.js >=16.3.6
• Edge runtime的ImageResponse
• 用户输入做了完整SVG转义
三、漏洞原理
-
业务代码接收攻击者可控的query参数,直接放入SVG的
、文本节点、style属性; -
缺少转义,攻击者注入恶意SVG标签;
-
Satori渲染SVG时,上游依赖解析恶意节点,触发Node.js代码执行原语;
-
攻击者拿到服务端执行权限,读取环境变量、源码、服务器横向移动。
关键点:漏洞触发前提是开发者错误地把用户可控内容直接塞进SVG;如果做了字符转义,即便版本是受影响版本也无法利用。
四、检测方案
- 代码审计
检索项目内ImageResponse,检查是否直接使用searchParams、request参数,未做转义:
// ❌ 危险代码(容易中招)
export async function GET(req) {
const { searchParams } = new URL(req.url);
const title = searchParams.get(\"title\");
return new ImageResponse(
{width:1200,height:600}
)
}
- 黑盒简易探测
访问OG图片接口,传入payload:?title=%3Cscript%3Ealert(1)%3C/script%3E
如果返回图片内渲染了标签文本,说明没有转义,存在可利用入口。
五、应急处置方案
-
优先升级Next.js至16.3.6或更高版本(推荐方案);
-
临时缓解:所有用户输入渲染到SVG前,强制做HTML转义,过滤< > & \" ';
-
最小权限:Node进程使用低权限账号运行,限制文件读写;
-
WAF:对OG图片接口增加规则,拦截包含\"
payload = urllib.parse.quote(cmd\_payload)
params = {
\"title\": payload
}
resp = requests.get(target\_url, params=params, timeout=15)
print(f\"Status Code: {resp.status\_code}\")
print(f\"Response Length: {len(resp.content)}\")
说明:成功利用会在服务端执行id命令;如果WAF/转义生效则攻击失败。
七、安全建议总结
-
尽快批量扫描Next.js项目版本,16.2~16.3.5优先升级;
-
开发规范:渲染SVG/HTML,永远不信任外部输入;
-
动态OG图片接口属于攻击面,尽量增加鉴权或限制来源。
-
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论