Next.js ImageResponse 脆弱性 CVE-2026-94545 が FIX:細工された SVG によるコード実行

Critical Next.js ImageResponse Flaw Can Lead to Server Code Execution via Crafted SVG Input

2026/09/23 TheHackerNews — Vercel は、Next.js の ImageResponse に存在する脆弱性 CVE-2026-94545 に関する情報を公表し、攻撃者がサーバ上でコードを実行する可能性があると指摘している。ImageResponse は、Open Graph などのソーシャル・プレビュー用の画像を生成する機能であり、リクエスト URL から取得したテキストなどの、攻撃者が制御する値をアプリが画像へ組み込む場合に、この脆弱性の影響を受ける恐れがある。

この脆弱性は、ImageResponse が Node.js ランタイム上で動作する Next.js 16.2.0 〜 16.3.5 に影響を及ぼす。すでに Vercel は、9月22日に Next.js のバージョン 16.3.6 をリリースし、この脆弱性を修正している。Vercel のアドバイザリでは、この脆弱性の深刻度を Critical、CVSS スコアを 9.5 と評価しているが、ImageResponse の Edge 版/Next.js 15 は影響を受けない。

ImageResponse は、PNG を生成する前に、Vercel のライブラリ Satori を使用して画像レイアウトを SVG コードへ変換する。アドバイザリによると、影響を受けるのは、「画像生成時に、攻撃者が制御する値を SVG のコンテンツ/属性/スタイルへ渡す」アプリである。アドバイザリの例では、リクエスト URL から取得した値を SVG の title 要素内へ配置しているが、div 内の見出しなど、要素に含まれる通常のテキストも対象となるかどうかについては明記されていない。

この機能が使用されているアプリ内の場所を特定するには、ルートハンドラ/opengraph-image ファイルなどで、next/og からインポートされている ImageResponse を確認する。ルートハンドラはリクエストの到着時に画像を生成する一方、opengraph-image ファイルはビルド時/リクエスト時に画像を生成できる。

9月23日の時点で The Hacker News が確認したところ、この脆弱性を悪用した攻撃に関する報告や悪用コードは公開されていない。

修正版として提供されているのは Next.js 16.3.6 のみであり、npm install next\@16.3.6 を実行してインストールできる。9月23日時点で、npm レジストリには 16.2 系の修正版が掲載されていないため、16.2 を使用しているアプリは 16.3.6 へ移行する必要があり、Next.js 15.5.26 では、15.5 系の next/og に追加のセキュリティ強化が施されている。

Next.js は、Node.js ランタイムをデフォルトで使用している。アップグレードを延期する必要がある場合のための、アドバイザリに示されている回避策は、Node.js の ImageResponse がレンダリングする SVG のコンテンツ/属性/スタイルに、攻撃者が制御する値を含めないことである。このアドバイザリは、影響を受けない Edge 版への切り替えを推奨しておらず、Next.js のドキュメントでは Edge ランタイムが非推奨とされている。

The Hacker News が 9月23日に実施した確認では、影響を受ける Next.js 16.3.5 が npm audit により検出されなかった。また、現時点において、このアドバイザリは GitHub Advisory Database に登録されておらず、CVE-2026-94545 の CVE レコードも公開されていないため、Next.js のバージョンを直接確認する必要がある。Satori は Next.js パッケージ内にバンドルされているため、ロックファイルには Next.js の依存関係として記載されない。

Vercel のアドバイザリでは、Vercel 上でホストされているアプリが保護されているかどうかについて説明されていない。8月に修正された 2 件の Next.js の脆弱性については、同社はホストされているアプリが保護されており、アップグレードは不要だとしていた。しかし、影響を受けるルートが、パッチ適用前に悪用されていたことを確認する方法も示されていない。影響を受けるバージョンは、Next.js 16.2 が 3月18日にリリースされて以降、利用可能な状態にあった。

この脆弱性の原因は Satori に存在し、同日に公開された Satori のアドバイザリによると、特定の値が適切にエスケープされない状態で SVG 出力に含まれていた。つまり、細工された値が、プレーンテキストではなく SVG コードとして解釈される可能性がある。Next.js でも、そのような値が Next.js の別のライブラリに存在する脆弱性を経由して、コード実行につながる可能性があるが、Vercel は該当するライブラリ名を公表していない。

Satori のアドバイザリでは、この CVE の深刻度を Moderate、CVSS スコアを 5.3 と評価しており、影響は SVG 出力の利用方法によって異なるとしている。Satori を直接使用している開発者は、修正版のバージョン 0.33.5 へアップデートする必要がある。