返回 文章 apply CMS 文章

Next.js 图像优化中的 libheif RCE 漏洞:从复现到上游修复的完整过程

一次跨依赖链的漏洞复现、披露与修复的完整案例复盘。

Next.jslibheifRCE漏洞披露
成长分 / 100 76 综合收获、行动、留存与影响

Next.js 图像优化中的 libheif RCE 漏洞:从复现到上游修复的完整过程
为什么值得读了解一个真实 RCE 漏洞如何从 Next.js 图像优化追溯到上游 libheif,并理解依赖链的复杂性。

学习 Vercel 与 Hacktron 如何协调披露、平台缓解与上游修复,以及时间线管理。

关键洞察
  1. 漏洞代码不在 Next.js 本身,而在上游 libheif,但可通过 Next.js 图像优化触达。
  2. 依赖链为:<Image> → /_next/image → sharp → libvips → libheif。
  3. Vercel 通过中央图像优化服务禁用 AVIF 优化和缩放,实现平台范围缓解。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:7089

2026年8月,Hacktron 报告了 Next.js 图像优化中一个看似远程代码执行(RCE)的漏洞。他们的调查发现,存在漏洞的代码并不在 Next.js 本身,而是在上游的 libheif 中,这是一个被 Next.js、ImageMagickWordPresssharp 以及网络上大量软件所使用的 AVIF 图像解码器。

在 Hacktron 通知我们后不久,我们与他们合作,针对当前的 Next.js 构建复现了该 RCE,并将其披露给 sharp、libvips 和 libheif 的维护者。随后,我们在 Vercel 上部署了平台范围的缓解措施,并开始与维护者合作进行修复。

复制标题链接依赖链

Next.js 图像优化允许应用程序通过 <Image>

组件(next/image

)调整和优化图像。对于 AVIF 图像,图像处理依赖链如下:

<Image>

调用/_next/image

/_next/image

调用 sharpsharp 调用 libvips

libvips 使用 libheif 解码图像

Next.js 中 libheif 漏洞的完整依赖链。

Next.js 中 libheif 漏洞的完整依赖链。

这意味着存在漏洞的代码不在 Next.js 中,但仍可通过 Next.js 图像优化触达。发送到图像优化端点的恶意 AVIF 图像会通过 sharp 和 libvips 调用 libheif。

因此,一个明显的缓解措施是在 Next.js 中禁用 AVIF 优化。恶意 AVIF 图像随后会在图像优化端点处停止,而不会被传递通过 sharp 和 libvips 到 libheif。该漏洞利用将不会向上游传播。

然而,仅缓解 Next.js 而没有上游修复,会带来披露问题。

复制标题链接披露漏洞并协调上游修复

在我们与 Hacktron 合作成功复现该问题后,我们在 Vercel 上推出了平台范围的缓解措施,并联系了 sharp、libvips 和 libheif 的维护者,披露该漏洞并开始着手修复。

以下是时间线:

8月11-12日:Hacktron 向 Vercel 报告了该问题;Hacktron 和 Vercel 通过可用的概念验证复现了 RCE。8月13日:Vercel 通过其图像优化服务应用了平台缓解措施。8月19日:Next.js 团队与 libvips 维护者会面,并开始在 sharp、libvips 和 libheif 之间进行协调。8月24日:Next.js 通知了其安全合作伙伴。8月25日:Next.js 发布了一个安全版本,禁用了 AVIF 优化。

Vercel 安全团队通过电子邮件联系了 sharp 和 libvips 的维护者,并通过 GitHub Security Advisory 与 libheif 展开了协调。Hacktron 也已向 libheif 提交了漏洞和利用细节。8 月 19 日,Next.js 团队与 libvips 维护者会面,并就 sharp、libvips 和 libheif 的后续处理路径达成一致。libheif 维护者继续通过 Hacktron 的 GitHub Security Advisory 进行修复。

8 月 24 日,Next.js 将其 libheif 漏洞及其对 Next.js 的影响告知了其安全合作伙伴(合作伙伴通知是 Next.js 安全发布流程中的常规环节)。

8 月 25 日,即 8 月 19 日会议六天后,libheif 维护者发布了 v1.23.2,修复了该 RCE。

复制标题链接Vercel 和 Next.js 的缓解措施

保护 Vercel 及其客户很直接:Vercel 上所有 Next.js 图片优化请求都经过一个中央 Image Optimization Service。因此,我们在该中央服务中禁用了 AVIF 优化和缩放。任何传入的 AVIF 图片都不会被传递给 libheif 进行解码,因此在 Vercel 上不可能发生 RCE。

保护自托管应用程序则需要发布一个 Next.js 版本。8 月 25 日,Next.js 发布了一个安全版本,该版本原本计划用于处理另一个单独的问题。在协调上游修复后,我们将 AVIF 缓解措施捆绑到该版本中,并比计划提前一天发布。该版本在 Next.js 中禁用了 AVIF 优化和缩放;鉴于已修补的 libheif 版本仍在向下游传播,这是最及时的选项。我们还发布了一份安全公告,以说明该问题的严重性。

复制标题链接我们致力于让 Web 更安全

发现的 OSS 漏洞数量持续增加,数字令人震惊:

2026 年,CVE 计划已发布超过 35,000 个 CVE。GitHub 上的私密漏洞报告

从 1 月的每周 500 份增长到 5 月的每周 3,000 份。GitHub 还报告称

2026 年 5 月审查了 1,560 份公告,这是公告数据库历史上最高的月度数量。

随着 LLM 加速漏洞研究,我们预计会看到更多像 libheif RCE 这样的上游漏洞在 OSS 生态系统中出现。近几个月来,Next.js 安全版本的数量有所增加,随着我们缓解自己和研究社区发现的新漏洞,我们预计这一趋势将持续下去。

我们致力于在攻击者之前主动发现漏洞,负责任地披露我们发现的一切,并与研究人员和维护者合作进行修复。

复制标题链接致谢

感谢 Hacktron 负责任地披露了 AVIF 漏洞,与我们合作复现该问题,并与上游维护者协调完成修复。

我们还要感谢 sharp、libvips 和 libheif 的维护者。他们在上游修复方面的工作,使得跨图像处理依赖链的协同修复成为可能。

我们与一批才华横溢的研究人员合作,通过 Vercel 开源漏洞赏金计划 来保障 Next.js 及其他开源框架的安全。欢迎任何有兴趣为符合条件的框架安全做出贡献的人参与其中。