一名維護者修好了一個記憶體錯誤,推送了提交,然後就忙別的去了。沒有安全公告,沒有安全標記,也沒有 CVE 編號。就是這個疏漏,讓 Vercel 在八月花了兩個星期協調四個開源專案的修補,最後乾脆為旗下所有託管的應用程式關閉了 AVIF 圖片最佳化。
重點摘要
- Vercel 追查後確認,被回報的 RCE 源頭是 libheif 而非自家程式碼,遂於 8 月 13 日在整個平台停用 AVIF 最佳化,並在 8 月 25 日推出 Next.js 安全性更新。
- 受影響的路徑自 next/image 經 sharp 傳到 libvips,再由 libvips 呼叫 libheif 解碼 AVIF。ImageMagick、WordPress 以及網路上大量服務都共用這條鏈路。
- Vercel 表示,GitHub 上的非公開漏洞通報量從 2026 年 1 月的每週 500 件成長到 5 月的每週 3,000 件,光是 5 月就審閱了 1,560 份安全公告。
真正的失誤在於沒有標記
少了安全標記,下游就什麼都不會啟動。發行版的打包者收不到回溯修補的訊號,相依性掃描工具也沒有可比對的識別碼。Debian 12 與 13 持續發布受影響的版本,Debian 自己的更新遲至 8 月 8 日才出現。修正一直躺在公開的 git 紀錄裡,只要夠仔細讀 diff 的人都看得到,而使用這些套件的每一位使用者卻原封不動地承接了風險。
多年來這種失誤還算可以忍受。要在一套解碼器一整年的上游提交裡翻出一筆沒有標記的記憶體修正,是相當昂貴的專業能力。現在不再昂貴了。三名研究人員針對 Slack、Meta、GitHub Enterprise、Ruby on Rails、Next.js、Astro 與 Gatsby 的曝險調查只花了兩個月,token 成本不到 3,000 美元。
通報為何落到了錯的專案
Hacktron AI 在八月將問題整理成 Next.js 圖片最佳化的 RCE 通報給 Vercel。調查很快就把責任歸屬往上游推。使用 Image 元件的 Next.js 應用程式可以縮放與最佳化 AVIF 檔案,過程中會呼叫 sharp,sharp 再呼叫 libvips,libvips 則交給 libheif 解碼。
這代表只要把惡意的 AVIF 圖片送進最佳化端點,就能在完全不碰 Next.js 任何一行程式碼的情況下抵達有問題的解碼器。框架是通道,不是缺陷所在,但在當下它也是 Vercel 唯一能直接掌控的一層。
揭露時間軸
Vercel 的工程紀錄逐一標註了日期。Hacktron 於 8 月 11 日與 12 日通報,兩支團隊以可運作的概念驗證程式,在最新的 Next.js 版本上重現了 RCE。
8 月 13 日,Vercel 祭出平台層級的緩解措施。Vercel 上所有圖片最佳化請求都會經過同一個中央服務,因此只要在該處停用 AVIF 的最佳化與縮放,就能一次切斷所有託管客戶的攻擊路徑。傳入的 AVIF 檔案不再送到 libheif。
真正棘手的是自架部署,這也是後續流程存在的原因。Vercel 寫信給 sharp 與 libvips 的維護者,並透過 GitHub Security Advisory 與 libheif 展開協作,Hacktron 則另行將漏洞細節提交給 libheif。8 月 19 日,Next.js 團隊與 libvips 維護者開會確認修補方向。8 月 24 日通知了安全合作夥伴。
8 月 25 日全案收尾。Next.js 把 AVIF 的緩解措施併入原本為其他問題排定的安全性版本,提前一天發布,直接停用 AVIF 的最佳化與縮放。libheif 維護者同日釋出修正該 RCE 的 v1.23.2,距離那場協調會議只有六天。
同一套解碼器影響多廣
libheif 是 ImageMagick、WordPress 與 sharp 的相依套件,這也是一個冷門缺陷會有異常廣大波及範圍的原因。這套解碼器前一年就已在上游修好,但因為提交沒有任何安全標示,修正始終沒有以單一事件的形式往下傳開。
波���範圍並非紙上談兵。在 Vercel 收到通報的幾週前,研究人員就把同類的 libheif 溢位與 SSO 弱點串在一起,藉由社群論壇的圖片上傳進入 OpenAI 的內部單一程式庫。產品、入口與修補途徑全然不同,底層卻是同一個未經標記的缺陷。
後續觀察
Vercel 直接點出了數量問題:CVE 計畫在 2026 年已發布超過 35,000 組識別碼,隨著語言模型加速漏洞研究,該公司預期會有更多類似的上游缺陷浮現。它也提醒,近期 Next.js 安全性版本的發布變得更頻繁,這個趨勢還會延續。
對團隊而言,實際的影響比標題來得窄。平台客戶在 8 月 13 日什麼都不必做就受到保護;自行維運圖片流程的一方,則必須確認自己實際出貨的是哪一版 libheif,而這正是一筆未標記的修正最難回答的問題。
常見問題
漏洞是出在 Next.js 本身嗎?
不是。缺陷位於 AVIF 解碼器 libheif,Next.js 最佳化 AVIF 圖片時會經由 sharp 與 libvips 觸及它。Next.js 停用 AVIF 最佳化只是緩解措施,因為那是能最快修補的一層,並非它本身有問題。
部署在 Vercel 上需要做什麼嗎?
不需要。Vercel 已於 8 月 13 日在中央的 Image Optimization Service 停用 AVIF 最佳化與縮放,阻斷了所有託管應用程式的路徑。自架部署則需要 8 月 25 日的 Next.js 安全性版本,或 v1.23.2 以上的 libheif。
上游修正沒有標記為何影響這麼大?
安全工具靠識別碼運作。一筆默默修好記憶體錯誤的提交不會進入安全公告資料庫,發行版因此不會回溯修補,CI 掃描工具也標示不出受影響的版本。修正就擺在公開的程式碼裡,下游每一個使用者卻仍然暴露在風險中。






