資安與權限設計

等不及例行發版的緊急補丁:Next.js 16.4.1/15.5.28 一次修掉兩個遠端執行漏洞和一個 DoS

Next.js 於 2026/10/14 發布非例行安全更新 16.4.1(Active LTS)與 15.5.28(Maintenance LTS),修正三個問題:Cache Components 的 use cache 函式回傳多個 typed array 時可能遭未驗證遠端執行程式碼(無替代緩解方案);Image Optimization 透過 sharp/librsvg 處理 SVG 時,在 glibc Linux 上可能被遠端執行程式碼(CVE-2026-96889);以及 App Router 只要有一個 Server Action,就可能被特製請求打到 CPU 滿載。The Hacker News 指出,截至 10/15 其中兩個公告沒有 CVE、也不在 npm audit 使用的資料來源中。本文整理影響範圍、升級步驟與給客戶網站的檢查清單。

扁平插畫:貼著 OK 繃的可愛伺服器角色,旁邊有打勾的紅色盾牌、拿掃帚趕走的綠色小蟲、裂開的圖片卡與冒熱氣的 CPU 晶片,藍紫色調,無文字。
等不及例行發版的緊急補丁:Next.js 16.4.1/15.5.28 一次修掉兩個遠端執行漏洞和一個 DoS

Next.js 在 10 月 14 日發布臨時安全更新:use cache 回傳多個 typed array、SVG 經 sharp 處理,都可能讓未登入的攻擊者遠端執行程式碼;Server Actions 還能被打到 CPU 滿載。其中兩個漏洞截至 10/15 還沒有 CVE,npm audit 可能不會提醒你。

工程師最怕的通知有三種:「客戶說網站打不開」、「信用卡被刷爆」,以及「框架發布了非例行(out-of-band)安全更新」。第三種最可怕,因為它代表事情急到等不及下一次例行發版。

2026 年 10 月 14 日,Next.js 正式推出 16.4.1(Active LTS)與 15.5.28(Maintenance LTS)。官方部落格說,這次更新包含兩個原本預定在九月例行安全發布中處理、但因為上游依賴延誤而延後的修正。隔天,The Hacker News 的 Swati Khandelwal 把影響範圍整理成一張表。今天我們把它翻成「工作室要做什麼」的版本。

三個漏洞,一張表看懂

Vercel(Next.js 的開發團隊)把兩個遠端執行程式碼(RCE)漏洞都評為 Critical,CVSS 各 9.5 分。

問題 受影響版本 修正版本 誰會中
use cache 遠端執行(GHSA-673q-mjm6-r5xr) 16.0.0–16.4.0 16.4.1 啟用 Cache Components 的 App Router,且 use cache 函式回傳多個 typed array
SVG 圖片遠端執行(CVE-2026-96889) 10.0.0–15.5.27、16.0.0–16.4.0 16.4.1,或 15.5.28 搭配 sharp 0.35.5 以上 把攻擊者提供的 SVG 交給 sharp 處理、跑在 glibc Linux 上的應用
Server Actions 阻斷服務(GHSA-p3m5-59mp-jv5r) 13.0.0–15.5.27、16.0.0–16.4.0 15.5.28、16.4.1 至少有一個 Server Action 的 App Router 應用

第一個:use cache 與 typed array

這個問題其實出在 React Server Components。React 的公告涵蓋 react-server-dom-webpack、react-server-dom-parcel、react-server-dom-turbopack 三個套件的 19.0.0 到 19.3.0,描述是「回應中同時傳送多個 typed array 與攻擊者可控值的極少數情況」。

在 Next.js 裡,觸發條件是 use cache 函式回傳超過一個 typed array,所以只有開啟 Cache Components 的 16 版應用會受影響。聽起來很冷門?官方的回答很乾脆:沒有替代緩解方案,就算你的程式沒有這種函式,也請立刻升級。

第二個:SVG、sharp 與 librsvg

第二個漏洞是 librsvg(負責繪製 SVG 的開源函式庫)的記憶體錯誤,Next.js 透過內建的 sharp 套件間接用到它。

好消息是 Next.js 預設不會最佳化 SVG,要開 dangerouslyAllowSVG 才會走圖片最佳化流程。壞消息是:產生社群分享圖的 next/og,在 Node.js runtime 下也會用到同一個函式庫。換句話說,「我們沒開那個危險選項」不等於安全。

The Hacker News 還點出一個趨勢:這是自八月以來,Next.js 的圖片處理第三次出現可執行程式碼的漏洞。八月是 libheif 處理特製 AVIF 圖片,九月是 next/og 讓攻擊者控制的文字改變產生出的 SVG。這次 Next.js 本身的圖片程式碼沒改,16.4.1 是把內建 sharp 拉到 0.35.5,裡面帶有修補過的 librsvg 2.63.2。

第三個:Server Actions 被打到 CPU 滿載

只要 App Router 應用定義了至少一個 Server Action,特製請求就能讓單一伺服器程序的 CPU 衝到滿載,並擋住同一程序後面的請求。使用 Pages Router、或完全沒有 Server Actions 的應用不受影響。

為什麼圖片處理老是出事?

圖片格式看起來只是「一張圖」,背後卻是極其複雜的檔案結構。SVG 甚至是一份 XML 文件,裡面可以有路徑、濾鏡、字型與各種巢狀元素。負責解析這些格式的函式庫多半是為了效能而寫的原生程式碼,一旦在記憶體處理上出錯,攻擊者精心製作的檔案就可能變成執行程式碼的入口。

這次的時間軸也很有參考價值:librsvg 的漏洞在 9 月 23 日公開,sharp 在 9 月 27 日修正,Next.js 則在 10 月 14 日才把修正版 sharp 綁進正式版本。回報漏洞的研究員 Rafael B. Dias 表示,這個弱點正是九月 next/og 漏洞背後的原因,而針對那個舊漏洞、為特定伺服器環境打造的可用攻擊程式已經公開。從上游修好到下游真正出貨,中間有好幾週的空窗,這就是供應鏈的現實。

實務上,我們建議客戶網站:

  • 能不收使用者上傳的 SVG 就不要收,Logo、頭像改用 PNG 或 WebP;
  • 真的要收,就在後台先清理或轉成點陣圖,再交給前台顯示;
  • next/og 的輸入只接受白名單欄位,例如文章標題,不要把整段使用者輸入直接塞進去;
  • 圖片處理盡量放在獨立的服務或函式裡,出事時影響範圍比較小。

最容易踩的坑:npm audit 可能不會叫

The Hacker News 特別提醒:截至 10 月 15 日,use cache 與 Server Actions 這兩個公告沒有 CVE 編號,也不在 npm audit 使用的 npm 公告資料來源裡,所以依賴掃描工具可能完全不會警告你。SVG 那個倒是會透過 sharp 自己的公告浮出來。

如果你的資安流程是「CI 跑 npm audit,沒紅字就收工」,這週請手動處理。

升級步驟:照抄就好

# 16.x 專案
npm install [email protected]

# 15.5 專案
npm install [email protected]

# 確認 sharp 版本(15.x 特別重要)
npm ls sharp

細節在這裡:16.4.1 要求 sharp 0.35.5,所以升級 Next.js 就會一併拿到修正版;但 15.5.28 仍然接受舊的、受影響的 sharp 0.34.x,在既有安裝上升級,舊版 sharp 可能原封不動留著。看到 npm ls sharp 低於 0.35.5,請另外升級。

升完記得重新建置、重新部署。只改 lockfile 不部署,等於買了新鎖卻沒裝到門上。

如果暫時無法升級 Next.js,SVG 漏洞有過渡方案:確認 sharp 在 0.35.5 以上,或依 sharp 公告用 sharp.block({ operation: ["VipsForeignLoadSvg"] }) 封鎖 SVG 解析。另外兩個漏洞沒有替代方案,只能升級。

主機商之間的差異

同一個漏洞,在不同平台上的嚴重程度不一樣。Netlify 在自家 changelog 說明:

  • next/image 的圖片最佳化在 Netlify 是由 Netlify Image CDN 處理,不在你的函式裡執行,所以那條路徑不會被觸發;
  • 但 next/og 的 ImageResponse 會在你的函式裡執行,處理不受信任輸入的應用仍受影響,只是影響限於該次函式呼叫崩潰;
  • Server Actions 的 DoS 因為自動擴展架構影響很小,但被惡意利用時可能讓函式費用上升;
  • 公開的 deploy preview 與 branch deploy 在自動刪除前可能仍有漏洞,建議手動刪除。

最後這點很多人會忘:正式站升級了,但半年前那個「給客戶看一下」的預覽網址還掛在網路上。

給工作室與客戶網站的檢查清單

  1. 盤點:列出所有 Next.js 專案和版本,包括交付後由客戶自行維護的。
  2. 分級:開了 Cache Components 的 16.x、有 Server Actions、有用 next/og 或允許上傳 SVG 的,優先處理。
  3. 升級並驗證:升級後跑 npm ls sharp,並在預備環境測試圖片與表單功能。
  4. 清理預覽:刪掉不再需要的預覽部署。
  5. 補強流程:npm audit 之外,訂閱框架的官方安全公告;這次就是 audit 抓不到的案例。
  6. 通知客戶:用白話寫一封說明「影響什麼、我們做了什麼、需要你配合什麼」。

一封給客戶的白話通知範本

很多客戶不需要知道 typed array 是什麼,但需要知道「網站安不安全」。可以參考這樣寫:

您好,Next.js 於 10/14 發布緊急安全更新,修正可能讓外部攻擊者在伺服器上執行程式的漏洞。我們已於今日將貴公司網站升級至修正版本並重新部署,也清除了舊的預覽網址。目前沒有公開資料顯示這些漏洞已遭利用,貴公司不需要另外操作;若近期網站有異常,請隨時與我們聯繫。

短、清楚、有交代時間點與後續,比一長串 CVE 編號更讓人安心。

你可能會問

Q:這跟去年 12 月的 React2Shell 是同一件事嗎?
A:不是。這次的 React Server Components 漏洞和 React2Shell 出現在同樣三個套件,但條件窄得多。截至 10 月 15 日,三個漏洞都沒有遭實際利用的公開報告。

Q:我們用 Pages Router,還需要升級嗎?
A:Server Actions 的 DoS 不影響 Pages Router,但 SVG 漏洞涵蓋 10.0.0 起的版本。只要有 sharp 處理不受信任的 SVG,仍建議升級。

Q:為什麼 Red Hat 給 7.8 分,Vercel 給 9.5?
A:Red Hat 對 librsvg 的評分認為需要使用者互動(例如開啟惡意檔案);Vercel 評估的是 Next.js 情境,判定可透過網路觸發。同一個 bug 放在網站伺服器上,風險就不一樣。

Q:用官方 Node.js 執行檔有差嗎?
A:sharp 維護者提醒,官方 Node.js 執行檔沒有針對這類記憶體攻擊做強化,結果是遠端執行還是只有崩潰,可能取決於伺服器的 Node.js 建置方式。

結語

這次更新的教訓不只是「升級 Next.js」。它提醒我們三件事:圖片處理是反覆出事的高風險區、自動化掃描不是萬能,而交付後的網站也需要有人負責打補丁。

今天就把清單跑一輪:升版、查 sharp、重新部署、刪預覽。十五分鐘的維護,可以省下一整個週末的事故處理。

來源:Next.js Ships Out-of-Band Patch for Two Critical RCE Flaws in Caching and SVG Processing(Swati Khandelwal,The Hacker News,2026/10/15)。

延伸參考:Next.js Security Update for Upstream Vulnerabilities(Next.js Blog,2026/10/14)、Next.js & React security release (Oct 2026): what to know(Netlify Changelog,2026/10/14)。

← 返回技術文章