Next.jsの「ImageResponse」に重大な欠陥、悪意あるSVG入力でリモートコード実行の恐れ

Next.jsに重大なセキュリティ脆弱性が見つかりました。next/ogのImageResponseをNode.js実装で使用するアプリケーションが、攻撃者の制御するデータをSVGのコンテンツ、属性、スタイルに埋め込んでいる場合、リモートコード実行を招く可能性があります。

この問題はGHSA-vcvr-r3jv-pc5jとして追跡されており、Next.js 16.2.0から16.3.5までのバージョンが影響を受けます。バージョン16.3.6で修正されました。原因は、ImageResponseの画像レンダリング処理で使われているVercelのSVG生成ライブラリ「Satori」の上流の問題にあります。

Satoriは、特定の値を生成するSVG出力に組み込む際に正しくエスケープしていませんでした。そのため、巧妙に細工された入力が無害なテキストではなく、有効なSVGマークアップとして解釈されるおそれがあります。

上流の問題はCVE-2026-94545として追跡されています。影響を受けるのはSatori 0.0.27から0.33.4までのバージョンで、0.33.5で修正されました。

Next.jsアプリケーションが脆弱となるのは、next/ogの画像生成にNode.jsランタイムを使用し、ユーザーが指定した値をSVG要素内に直接配置している場合です。

典型的な脆弱な実装としては、動的なOpen Graph画像を作成する際に、クエリ文字列のパラメータを読み取ってSVGの<title>要素に埋め込むケースが挙げられます。

この手法はSNS向けのプレビュー画像でよく使われます。しかし、攻撃者が制御する入力がSVGレンダリングの内部処理を通過し、画像生成サーバー上でのコード実行につながる可能性があります。

セキュリティアドバイザリは、この脆弱性にCVSS v4で「重大(Critical)」の評価を付けています。ネットワーク経由でリモートから悪用でき、攻撃の複雑さは低く、特権やユーザー操作は必要ありません。

ただし、攻撃が成立するには、信頼できないデータをSVG出力に渡す画像生成エンドポイントを、脆弱なアプリケーションが公開している必要があります。

特にリスクが高いのは、URLパラメータやAPIで制御される値から、Open Graphカードを動的に生成しているケースです。プロフィール画像、キャンペーンバナー、ドキュメントのプレビュー、ブランド化されたSNS用グラフィックなども該当します。

認証されていない攻撃者が、リクエストパラメータを通じて悪意あるSVG関連コンテンツを送り込める可能性があります。これはエンドポイントの入力処理や、デプロイされているランタイムによって異なります。

ImageResponseのすべての利用が影響を受けるわけではありません。ImageResponseのEdge実装を使用するアプリケーションは、影響範囲外です。同様に、Node.jsベースでも、攻撃者が制御する値をSVGのコンテンツ、属性、インラインスタイルに渡していなければ、この攻撃経路で脆弱になることはありません。

各組織は、直ちにNext.jsをバージョン16.3.6へ更新してください。この更新には上流の修正が取り込まれており、SVG画像生成の過程で信頼できない値が不適切に処理されることを防ぎます。

すぐにパッチを適用できない場合、開発者はNode.jsのImageResponse実装がレンダリングするSVGのコンテンツ、属性、スタイルから、攻撃者が制御可能なデータを排除する必要があります。

ただし、これはあくまで一時的な緩和策です。上流のSatoriのアドバイザリによると、アップグレード以外に完全な回避策はありません。影響を受けるライブラリで信頼できないコンテンツをレンダリングすることは避けるべきだとしています。

セキュリティチームは、インターネットに公開されているNext.jsのデプロイ環境を優先的に確認してください。あわせてログを調べ、動的なOG画像エンドポイントを狙った不審なリクエストがないか点検することも重要です。特に、SVGタグ、XML形式のペイロード、エンコードされたマークアップ、不審なスタイル式を含むリクエストに注意が必要です。

1万6,000以上のSOCチームがANY.RUNを活用し、脅威調査を効率化して手作業を削減しています。チームで試してみる

翻訳元: https://cyberpress.org/critical-next-js-imageresponse-flaw/

本記事は cyberpress.org の記事を翻訳・要約したものです。