觀點 · 資訊分享

Next.js 動態分享圖功能有重大漏洞:把使用者輸入塞進 SVG 就可能被遠端執行程式,16.3.6 已修補

Next.js 公布 CVE-2026-94545:Node.js 版的 next/og ImageResponse 受上游套件漏洞影響,如果把網址參數等外部輸入放進 SVG 的內容、屬性或樣式,可能導致遠端執行程式。影響 16.2.0 到 16.3.5,請升級到 16.3.6。

發布
2026-09-23
篇幅
約 3 分鐘 · 1,556 字
結構
7 節 + 3 題常見問題
標籤
#Next.js#CVE-2026-94545#網站安全#Node.js#Vercel
Next.js 動態分享圖功能有重大漏洞:把使用者輸入塞進 SVG 就可能被遠端執行程式,16.3.6 已修補

一句話看懂:Next.js 用來自動產生分享圖的 ImageResponse 有重大漏洞,只要把使用者輸入塞進 SVG,就可能被遠端執行程式;請升級到 16.3.6。

Next.js ImageResponse 重大漏洞資訊圖卡:把外部輸入放進 SVG 產生圖片,可能被遠端執行程式

先用白話講:OG 分享圖是什麼?

你把一篇文章連結貼到 LINE 或 Facebook 時,會跳出一張預覽小圖,上面常常有文章標題。這張圖叫 OG 圖(Open Graph image)。

很多 Next.js 網站不會每篇文章都手動做圖,而是用 next/og 的 ImageResponse 自動產生:程式把標題文字塞進一個圖片模板,即時畫出一張圖。

問題就出在「把文字塞進模板」這一步。如果那段文字來自網址參數(例如 ?title=...),任何人都能隨意改它。這次的漏洞讓特製的內容可以在伺服器上執行程式,就像有人在你的影印機裡塞了一張紙,結果影印機開始照著紙上的指令做事。

發生什麼事

Next.js 在 GitHub 公布安全公告 GHSA-vcvr-r3jv-pc5j(CVE-2026-94545),發布時間是美國 9 月 22 日、台灣 9 月 23 日凌晨:

  • 等級:重大(critical),CVSS 4.0 評分 9.5
  • 原因:Node.js 版的 next/og ImageResponse 受到一個上游套件漏洞影響,可能導致遠端執行程式;公告沒有說明是哪一個上游套件
  • 觸發條件:應用程式在產生圖片時,把攻擊者可以控制的值放進 SVG 的內容、屬性或樣式
  • 受影響版本:next 16.2.0 以上、16.3.6 以前
  • 修補版本:16.3.6

誰會受影響?

情況 是否受影響
Node.js 版 ImageResponse,且把外部輸入放進 SVG 受影響
Edge 版 ImageResponse 不受影響
沒有把外部輸入放進 SVG 的內容、屬性或樣式 不受影響
已升級到 16.3.6 已修補

公告裡舉的危險寫法,就是直接把網址參數放進 SVG 的 <title>:

import { ImageResponse } from 'next/og'

export async function GET(request: Request) {
  const value = new URL(request.url).searchParams.get('value') ?? ''
  return new ImageResponse(
    <svg width="1200" height="630">
      <title>{value}</title>
    </svg>
  )
}

給開發者的技術細節

  • 先確認版本:
npm ls next
  • 升級:npm install [email protected](或用專案的套件管理器,例如 pnpm add [email protected]),升級後重新建置部署
  • 暫時做法:還不能升級時,不要把攻擊者可控制的值放進 Node.js 版 ImageResponse 的 SVG 內容、屬性或樣式
  • 順手檢查:分享圖的文字盡量從資料庫依 ID 查出來,不要直接吃網址參數;需要參數時,也只接受固定格式(例如文章 ID)

我的看法

動態 OG 圖是很多網站「看起來很專業」的小細節,也正因為是小細節,最常被寫成「標題直接從網址拿」的懶人寫法。這次的漏洞剛好打在這個習慣上,而且等級是 9.5,接案者手上有 Next.js 專案的,建議今天就檢查版本。

用 Nuxt 或其他框架做分享圖的人也一樣,這件事點出一個通用原則:任何會「把文字畫成圖」的功能,都要把輸入當成不可信任的資料。不管用什麼框架,分享圖的內容最好來自自己的資料庫,而不是網址上任何人都能改的參數。

名詞小辭典

  • OG 圖(Open Graph image):分享連結到社群平台時顯示的預覽圖片。
  • SVG:用文字描述圖形的向量圖格式,可以包含屬性、樣式等內容。
  • 上游套件(Upstream):你使用的工具本身所依賴的其他套件。
  • Edge 執行環境:在 CDN 節點上執行的輕量環境,與一般 Node.js 伺服器的執行方式不同。

資料來源

常見問題

我的網站有用 next/og 做分享圖,要怎麼判斷有沒有中?
看三件事:Next.js 版本是否在 16.2.0 到 16.3.5 之間;ImageResponse 是不是在 Node.js 執行環境(不是 Edge);產生圖片時,有沒有把網址參數、使用者資料等外部輸入放進 SVG 的內容、屬性或樣式。三者都符合就有風險,請優先升級。
暫時不能升級怎麼辦?
官方的暫時做法是:不要把攻擊者可控制的值放進 Node.js 版 ImageResponse 所產生的 SVG 內容、屬性或樣式。但這只是權宜之計,還是要盡快升級到 16.3.6。
部署在 Vercel 上就不用處理嗎?
官方公告沒有說明特定託管平台是否已經另外防護。判斷依據是你使用的版本與執行環境,建議不管部署在哪裡都升級。
LINE