Reproducing, disclosing, and fixing the libheif vulnerability with Hacktron and the maintainers
TL;DR · AI 摘要
Vercel与Hacktron合作发现并修复libheif库的RCE漏洞,通过依赖链分析和跨维护者协调完成漏洞修复。
核心要点
- libheif漏洞通过sharp和libvips传播至Next.js图像优化组件
- Vercel于2026年8月13日部署平台级缓解措施
- 修复过程涉及3个维护者团队的跨库协作
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- libheif漏洞修复过程
- 漏洞发现
- Hacktron报告
- Vercel复现
- 依赖链分析
- sharp
- libvips
- libheif
- 修复协调
- 平台缓解
- 跨库协作
金句 / Highlights
值得收藏与分享的关键句。
恶意AVIF图像通过sharp和libvips传递至libheif触发RCE
Vercel在漏洞确认后48小时内部署平台级缓解措施
修复过程涉及跨三个维护者团队的协作与GitHub安全通告
与 Hacktron 及维护者共同复现、披露并修复 libheif 漏洞 - Vercel
2026 年 8 月,Hacktron 报告了一个看似存在于 Next.js 图像优化中的远程代码执行(RCE)漏洞。他们的调查发现,漏洞代码并非位于 Next.js 本身,而是位于上游的 libheif 中——这是一个被 Next.js、ImageMagick、WordPress、sharp 以及大量网站使用的 AVIF 图像解码器。
在 Hacktron 向我们发出通知后不久,我们便与他们合作复现了针对当前 Next.js 构建的 RCE,并将该漏洞披露给 sharp、libvips 和 libheif 的维护者。随后我们在 Vercel 上部署了全平台的缓解措施,并开始与维护者共同推进修复工作。
依赖链
Next.js 图像优化允许应用程序通过 <Image> 组件(next/image)调整和优化图像。对于 AVIF 图像,图像处理的依赖链如下:
- <Image> 调用 /_next/image
- /_next/image 调用 sharp
- sharp 调用 libvips
- libvips 使用 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 使用可行的 PoC 复现了 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 图像优化请求均通过中央图像优化服务处理。因此,我们在该中央服务中禁用了 AVIF 优化和缩放功能。任何传入的 AVIF 图像均不会传递给 libheif 进行解码,从而在 Vercel 上完全消除了远程代码执行(RCE)的可能。
保护自托管应用需要 Next.js 的版本更新。8月25日,Next.js 发布了一个安全更新,该版本原本计划用于修复其他问题。在协调上游修复方案后,我们将 AVIF 防御措施整合到该版本中,并比原计划提前一天发布。此版本在 Next.js 中禁用了 AVIF 优化和缩放功能;由于修补后的 libheif 版本仍在向下游传播,这是最及时的解决方案。我们还发布了安全公告,以说明该问题的严重性。
复制链接到标题 我们对构建更安全网络的承诺
开源软件(OSS)漏洞的发现数量持续增长,数据规模令人震惊:
- 到2026年,CVE 计划已发布超过35,000个CVE。
- GitHub 上的私有漏洞报告数量从1月每周500个增长到5月每周3,000个。
- GitHub 在2026年5月报告了1,560个已审查的漏洞公告,创下了漏洞数据库历史上最高的月度记录。
随着大语言模型(LLMs)加速漏洞研究,我们预计未来将在整个开源生态系统中发现更多类似 libheif RCE 的上游漏洞。最近几个月 Next.js 的安全更新频率显著增加,随着我们与研究社区共同发现并修复新漏洞,这一趋势预计将持续下去。
我们承诺在攻击者之前主动发现漏洞,负责任地披露所有发现内容,并与研究人员和维护者合作推进修复方案。
复制链接到标题 致谢
感谢 Hacktron 负责披露 AVIF 漏洞,协助我们复现问题,并通过修复方案与上游维护者协调。
我们也要感谢 sharp、libvips 和 libheif 的维护者。他们在上游修复方案上的工作,使得图像处理依赖链上的协同修复成为可能。
通过 Vercel 的开源漏洞赏金计划,我们与一群才华横溢的研究人员合作,共同保障 Next.js 及其他开源框架的安全。任何有兴趣为符合条件的框架安全做贡献的人,都欢迎参与该计划。
复制链接到标题 参考资料
- Next.js 2026年8月安全更新
- 上游 libheif 安全公告
- Vercel 安全更新变更日志
- 一个关于漏洞的传闻就足以发现安全利用方式