Next.js 2026 年 8 月安全更新怎麼處理?升級 16.3.3/15.5.24
Next.js 官方在 2026 年 8 月 25 日提前發布安全更新,建議使用 Next.js 16.3.3(Active LTS)或 15.5.24(Maintenance LTS)。這次不是只有一個套件版本號變動,而是同時處理 Windows-hosted server 的遠端程式碼執行風險,以及 Image Optimization API 處理 AVIF 時的另一個 Critical 漏洞。
先做的事很簡單:找出 production 實際解析到的 next 版本,依所在 major 升到對應 patch,重新產生 lockfile 與部署映像,再確認 next/image 的圖片流程。不要只更新本機 package.json,也不要把兩個漏洞誤當成只影響 Windows 的同一個問題。
先分清楚兩個漏洞的條件
兩個官方 GitHub advisory 的受影響面不同,但修補版本相同:
| 風險 | 受影響條件 | 官方修補版本 |
|---|---|---|
| Windows-hosted RCE(CVE-2026-75604) | 使用 Pages 與 App Router、未使用 Cache Components,且伺服器使用 Windows filesystem;受影響範圍包含 >=13.4 <15.5.24 與 >=16.0 <16.3.3 | 15.5.24、16.3.3 |
| AVIF Image Optimization RCE | Image Optimization API 需要處理 AVIF;受影響範圍包含 >=10.0.0 <15.5.24 與 16.x 中低於 16.3.3 的版本 | 15.5.24、16.3.3 |
第一個 advisory 是 Critical、CVSS 9.0,且官方明確表示受影響的 Windows 部署沒有已知 workaround,應直接升級。第二個 advisory 是 Critical、CVSS 9.5,問題來自 Next.js 使用的 sharp/libheif 圖片處理鏈;在修正完整傳遞前,修補版本會停用 AVIF optimization。
因此,Linux 部署不能只因為「不是 Windows」就跳過更新:它可能仍然提供 Image Optimization API,或未來切換圖片格式。反過來,Windows 開發機也不等於 production 一定符合第一個漏洞條件,判斷時要看實際部署主機、路由模式與圖片流程。
先查 production 會用到哪個 Next.js
先在 repository 和建置環境各查一次。package.json 的宣告版本不一定等於 lockfile 或實際安裝版本:
pnpm list next --depth 0pnpm why nextrg -n '"next"\s*:' package.json pnpm-lock.yaml如果使用 npm,對應檢查是:
npm ls next --depth=0接著確認部署映像不是從舊的 lockfile 或快取安裝。CI 至少要保留 pnpm install --frozen-lockfile(可參考 pnpm frozen lockfile 錯誤的排查順序),並把 pnpm list next --depth 0 的結果放進可追蹤的 build log。
依 major 選擇升級指令
如果專案在 Next.js 15,先升到 maintenance patch;如果已在 Next.js 16,升到 active patch:
# Next.js 15
# Next.js 16
pnpm install --frozen-lockfilepnpm buildpnpm list next --depth 0上面兩個升級指令不要同時執行,依專案目前的 major 擇一。react 與 react-dom 不需要因為這次 advisory 就盲目改成其他版本;只有在套件的 peer dependency 或 build 錯誤要求時,才把它們當成另一個可審查的變更。
如果目前版本低於官方 advisory 的最低範圍,或需要跨 major,先讀對應 migration guide,再拆成獨立變更。安全更新的目標是得到一個可驗證的 patch,不是把不相關的 framework migration 一起塞進同一個 deploy。
Windows 風險要在部署主機判斷
第一個漏洞的關鍵是 production server 的 filesystem,不是你在 macOS 或 Linux 上編輯程式碼。可在實際部署映像或主機確認:
node -p "process.platform"pnpm list next --depth 0另外盤點專案是否同時使用 app/ 與 pages/,以及是否有 Cache Components 的設定。若無法在部署環境可靠判斷,應先完成 patch 升級,再依官方 advisory 重新核對,而不是把「本機能 build」當成風險已消失。
AVIF 要另外檢查圖片處理路徑
第二個漏洞的判斷點是 Image Optimization API 是否會處理 AVIF。搜尋圖片設定、next/image、sharp 和明確的 AVIF format:
rg -n 'next/image|images|formats|avif|sharp' \ app pages next.config.* package.json修補後要確認:
- 需要優化的 JPEG、PNG 或 WebP 仍能正常回應。
- 專案若原本依賴 AVIF optimization,前端有可接受的 fallback,而不是默認圖片一定會回傳 AVIF。
next/image的 remote patterns、loader 與 CDN cache 沒有把舊的錯誤輸出繼續保存。- 對實際 production URL 做一次圖片請求,確認 status、
Content-Type、尺寸與快取標頭。
不要自行尋找方式重新啟用被停用的 AVIF optimization。官方 advisory 說明停用是等待底層修正傳遞期間的保護措施;若你的產品必須使用 AVIF,應追蹤 Next.js 與 sharp 的後續 release,再安排另一個有測試的變更。
CI 與部署後驗證清單
把更新拆成可回溯的四段,能避免「本機修好了、production 還是舊版」:
- 依賴解析:檢查
package.json、lockfile 和安裝後的next版本都落在15.5.24或16.3.3。 - 建置:用乾淨的依賴安裝執行
pnpm build,不要只跑 dev server。 - 映像與程序:重新建置並發布 server image,重啟所有 instance;若平台有 dependency manifest,確認它也指向新的 patch。
- 請求抽查:各抽查一條 Pages Router、App Router 和圖片最佳化請求;Windows 部署再確認主機平台與 Cache Components 條件。
若部署平台會快取 Docker layer 或 build artifact,先確認 cache key 包含 lockfile。否則即使 Git diff 已經出現 15.5.24,執行中的程序仍可能載入舊的 next。
常見問題
Q: 我使用 Linux,還需要升級嗎?
A: 需要。Linux 可能不符合 Windows-hosted RCE 的條件,但只要 Image Optimization API 會處理 AVIF,就仍應處理第二個 Critical 漏洞;而且官方針對這次 release 的建議是升到 16.3.3 或 15.5.24。
Q: 只把 next 更新到 package.json 就完成了嗎?
A: 不算。還要更新 lockfile、用 frozen install 重建、確認實際解析版本,並重新部署所有 instance。最可靠的證據是 production build log 與執行環境的套件清單,而不是單一檔案的文字 diff。
Q: AVIF 被停用後,圖片會全部壞掉嗎?
A: 不一定。停用的是 AVIF optimization,不代表所有 next/image 都失效;但依賴 AVIF 輸出的頁面可能改用其他格式或 fallback。請在部署後檢查實際 Content-Type 與圖片顯示,不要只看 build 是否成功。
參考資料:
Next.js Blog:August 2026 Security Release
GitHub Advisory:Windows-hosted servers(GHSA-p293-qw3h-jr36)
GitHub Advisory:Image Optimization API 與 AVIF(GHSA-2xp9-vwfh-vxw4)
回報錯字、失效連結,或告訴我你想看的延伸主題。