React・Next.js の脆弱性(2026年10月14日):自分のアプリは当たる?上げる版と確かめ方

PR
React・Next.js の脆弱性(2026年10月14日):自分のアプリは当たる?上げる版と確かめ方
この記事は約28分で読めます。

2026年10月14日(米国の日付。日本時間では10月15日)に、React と Next.js の脆弱性の告知が5件出ました。脆弱性とは、悪用されると困ることが起きうる、ソフトウェアの弱点のことです。5件のうち3件は、ログインなしで外からコードを実行されうる「Critical(重大)」と書かれています。

先に答えを書きます。Next.js のアプリは、next の版を見ます。15 系(15.5.27 以下)は 15.5.28、16 系(16.4.0 以下)は 16.4.1 に上げます。Next.js の告知のコマンドは、"for 15.5" "for 16.4" と書いています。Next.js を使わずに React の Server Components(サーバー側で動かす React の部品の仕組み)に対応した道具を使っているアプリは、react-server-dom-webpack・react-server-dom-parcel・react-server-dom-turbopack の版を見ます。React のコードがサーバーを使わないアプリは、当たりません。

この記事は、今ある React や Next.js のアプリが当たるかを急いで知りたい人に向けて、「当たるかの見分け → 上げる版 → 確かめ方」の順に書きました。版や日付は2026年10月19日時点のものです。コマンドの出力例は、macOS 14.4.1(arm64)・Node.js 21.7.1・npm 10.5.0 の手元で取ったものです。脆弱性を突く操作や、サーバーの起動はしていません。

この記事でわかること
  • 10月14日に出た5件は何か(React が2件、Next.js が3件。重大度は告知の言い方のまま)
  • 自分のアプリが当たるかの見分け方(Next.js は next の版、React 単体は react-server-dom-* の版。サーバーを使わない React は当たらない)
  • 上げる版(Next.js は 15 系が 15.5.28、16 系が 16.4.1。React の react-server-dom-* は 19.0.9・19.1.10・19.2.9・19.3.1)
  • npm ls と npx next --version での確かめ方と、npm audit に頼れない理由
  • 15.5 系で画像の件(sharp)が上げても残る場合と、14 系以前について書けること

10月14日に出た5件は何ですか?

Next.js の公式ブログ「Next.js Security Update for Upstream Vulnerabilities」(2026年10月14日)が、直した版として 16.4.1(Active LTS)と 15.5.28(Maintenance LTS)を挙げています。LTS とは、長い期間サポートされる版のことです。「Upstream(上流)」とは、Next.js が中で使っている部品のことで、10月8日の予告では、上流の脆弱性3件(Critical 2・High 1)を直すと書かれていました。そのうち2件は、9月のセキュリティ更新から延びたものです。

表に出てくる RCE(リモートコード実行)は、外から送った細工したデータで、相手のサーバーに好きなプログラムを動かされることです。DoS(サービス停止)は、サーバーを重くしたり止めたりして、使えなくすることです。

React の側の告知は、GitHub の React のリポジトリに2件あります。Next.js の2件は、React の2件を「上流の告知(Related upstream advisory)」として持っています。

件告知の ID重大度(告知の欄)何が起きるか対象のパッケージ
React: Server Components の RCEGHSA-xqc2-xf4c-x3h3critical細工したデータで、リモートからコードを実行されうる。ごくまれな場合だけreact-server-dom-webpack・react-server-dom-parcel・react-server-dom-turbopack
React: server function の DoSGHSA-h3gv-c5rc-p453highserver function(ブラウザーからサーバー側の関数を呼ぶ仕組み)の受け口に、細工した HTTP リクエストを送ると、メモリ不足や CPU の使いすぎが起きうる同じ3つ
Next.js: use cache の RCEGHSA-673q-mjm6-r5xrcriticaluse cache の関数が複数の typed array(数値の並びを入れる JavaScript のデータ形式)を返すと、ログインなしでコードを実行されうるnext
Next.js: 画像の最適化(SVG)の RCEGHSA-2464-fhr4-w9xw(CVE-2026-96889)criticalglibc(多くの Linux が使っている基本の部品)を使う Linux で動かしているとき、リモートからコードを実行されうるnext
Next.js: Server Actions(server function の Next.js での呼び名)の DoSGHSA-p3m5-59mp-jv5rhigh細工したリクエストで CPU を使いすぎ、同じプロセスのほかのリクエストが処理されなくなるnext

CVE 番号が付いているのは、画像の件の CVE-2026-96889 だけです。ほかの4件の欄に CVE 番号はありません(2026年10月19日時点)。

重大度の言い方は、告知ごとに違う件があります。画像の件は、「画像の件(sharp)は、上げるだけで直りますか?」の節の最後で書きます。

出典: Next.js: Security Update for Upstream Vulnerabilities・Next.js: 予告(2026年10月8日)・各告知(上の表のリンク)

自分のアプリは当たる?見分け方

見る所は、アプリの作り方で変わります。先に早見表を置きます。

アプリの作り方見る所当たるか
React のコードがサーバーを使わない──当たらない(React の告知の原文)
Vite のふつうの React のひな形npm ls で react-server-dom-* が出ないこと当たらない(ひな形の依存に無い)
create-vite で「RSC」を選んだreact-server-dom-webpack の版当たりうる側
Next.jsnext の版15.5.27 以下・16.4.0 以下なら上げる(件ごとの条件は下)
Next.js を使わず、react-server-dom-* を使うreact-server-dom-* の版範囲の版なら対象

サーバーを使わない React は、当たらない

React の2件の告知(RCE と DoS)には、同じ2文があります。

  • アプリの React のコードがサーバーを使わないなら、この脆弱性の影響は受けません
  • Server Components に対応したフレームワーク・バンドラー・バンドラーのプラグインを使っていないなら、この脆弱性の影響は受けません

原文は次のとおりです。

If your app’s React code does not use a server, your app is not affected by this vulnerability. If your app does not use a framework, bundler, or bundler plugin that supports React Server Components, your app is not affected by this vulnerability.

出典: GHSA-xqc2-xf4c-x3h3・GHSA-h3gv-c5rc-p453

Vite のふつうのひな形は当たらない。ただし「RSC」を選んだ場合を除く

npm create vite で作る React のひな形(create-vite 9.3.0 の template-react と template-react-ts)の依存は、react と react-dom だけで、react-server-dom-* は入っていません。React 用のプラグイン @vitejs/plugin-react(6.1.2)の依存も、@rolldown/pluginutils だけです。手元で --template react で作って npm ls しても、react-server-dom-* は0件でした(あとの「版の確かめ方は?」に出力を載せます)。Vite の始め方は、Vite と React の始め方の記事で説明しています。

ただし、create-vite には「RSC」という選び方もあります。選ぶと、@vitejs/plugin-rsc の例を取ってきます。@vitejs/plugin-rsc(0.5.38)は、react-server-dom-webpack を peer dependency(使う側が入れておく前提の依存)に求めます。つまり、上の原文の「Server Components に対応したバンドラーのプラグイン」の側です。「Vite で作った React は当たらない」と書けるのは、RSC を選んでいない、ふつうのひな形だけです。

出典: create-vite 9.3.0 のパッケージ・npm: @vitejs/plugin-react・npm: @vitejs/plugin-rsc

Next.js のアプリは、next の版で見る

Next.js のアプリは、react-server-dom-webpack や react-server-dom-turbopack を、next の中に自前で持っています。そのため、手元の Next.js 16.4.0 のアプリで npm ls react-server-dom-webpack を流すと、(empty)(空)と出て、終了コードは 1 でした。空だからといって安全という意味ではありません。見る所は next の版です。

もう1つ、気をつけることがあります。手元で create-next-app を使って作ると、16.4.0 でも 16.4.1 でも、react は 19.3.0 で入りました(19.3.1 ではありません)。Next.js のアプリで npm ls に react@19.3.0 と出ても、react そのものは React の告知の対象のパッケージに入っていません。「react を 19.3.1 に上げる」を、Next.js のアプリの手順として書いた公式の文は、確かめられませんでした。

next の版が範囲に入っていても、件ごとに条件が違います。

件告知に書かれた条件
Server Actions の DoSPages Router のアプリ、または Server Actions を使っていないアプリは当たらない("Applications using Pages Router or not using Server Actions are not vulnerable.")
use cache の RCEApp Router で Cache Components を使うアプリの話。ただし告知は「似た関数が無くても、すぐ上げる」と書き、回避策は無い("There is no known workaround for affected applications.")
画像の最適化(SVG)の RCE書かれている条件は、glibc を使う Linux で動くとき("when Next.js runs on glibc-based Linux")

use cache の件と画像の件の条件の、もう少しくわしい話は、「上げる版は?」のあとの節に書きます。

出典: Next.js: Security Update for Upstream Vulnerabilities・GHSA-673q-mjm6-r5xr・GHSA-2464-fhr4-w9xw・GHSA-p3m5-59mp-jv5r

上げる版は?

Next.js は、15 系(15.5.27 以下)は 15.5.28、16 系(16.4.0 以下)は 16.4.1

Next.js の告知が書いているコマンドは、次の2行です。

npm install next@15.5.28  # for 15.5
npm install next@16.4.1   # for 16.4

3件それぞれの、当たる版と直った版は次のとおりです(告知の右側にある「Affected versions」と「Patched versions」の欄の写しです)。

件当たる版(欄)直った版
use cache の RCE>=16.0.0 <= 16.4.0(行はこの1つだけ)16.4.1
画像の最適化(SVG)の RCE>= 10.0.0 <= 15.5.27 と > 16.0.0 <= 16.4.015.5.28 と 16.4.1
Server Actions の DoS>=13.0.0 <= 15.5.27 と >= 16.0.0 <= 16.4.015.5.28 と 16.4.1

欄の上では、15.0〜15.4 も直った版は 15.5.28、16.0〜16.3 も 16.4.1 です。

読むときの注意が3つあります。

  • use cache の件の欄に、15 系の行はありません。ただし「15 系は当たらない」と書いた文も、見つかりませんでした
  • 画像の件の 16 系は、> 16.0.0 と、> で書かれています。書いてあるまま読むと、16.0.0 そのものだけは範囲から外れます。意図かどうかは分かりません。「16 系は 16.4.1 に上げる」と覚えれば、欄とずれません
  • 2026年10月19日時点の latest は 16.4.2 です(2026年10月15日に公開。米国の日付で、日本時間では16日)。告知のコマンドは 16.4.1 のままです。16.4.2 のリリースノートに security という語はなく、Turbopack や文書の直しが書かれています。16.4.2 に 16.4.1 の直しが入っていると書いた文は確かめていませんが、欄が当たる範囲としているのは 16.4.0 までです

Node.js の条件は、next の engines(動く Node.js の版の指定)によると、16.4.0 と 16.4.1 が Node.js 20.9.0 以上です。15.5.28 は ^18.18.0 || ^19.8.0 || >= 20.0.0 です。

サポートの方針のページでは、16.x が Active LTS、15.x が Maintenance LTS です。メジャー版は、最初に出てから2年のあいだ Maintenance LTS になります。15.x の公開日は2024年10月21日なので、2年は2026年10月21日になります(これはこの記事での計算で、終わる日をそのまま書いた文は方針のページにありません)。

出典: Next.js: Security Update for Upstream Vulnerabilities・Next.js: Support Policy・Next.js v16.4.1 のリリースノート・Next.js v16.4.2 のリリースノート・npm: next

13 系・14 系は、欄の当たる範囲に入っています。直った版は告知にありません。くわしくは「よくある質問」に書きます。

React は、react-server-dom-* を 19.0.9・19.1.10・19.2.9・19.3.1 に

React の対象のパッケージは react-server-dom-webpack・react-server-dom-parcel・react-server-dom-turbopack の3つです。react と react-dom は、告知の欄にも本文にも、対象のパッケージとして書かれていません。

RCE の告知(GHSA-xqc2-xf4c-x3h3)の、当たる版と直った版は次のとおりです。本文は「19.0.0 through 19.0.8, 19.1.0 through 19.1.9, 19.2.0 through 19.2.8 and 19.3.0」と書き、欄も同じです。

系列当たる版直った版
19.019.0.0〜19.0.819.0.9
19.119.1.0〜19.1.919.1.10
19.219.2.0〜19.2.819.2.9
19.319.3.019.3.1

DoS の告知(GHSA-h3gv-c5rc-p453)は、本文と欄で当たる版の範囲が違います。

  • 本文: 19.0.0〜19.0.7・19.1.0〜19.1.8・19.2.0〜19.2.7(19.3.0 は挙げていません)
  • 欄: RCE の告知と同じ範囲(19.0.8・19.1.9・19.2.8・19.3.0 も含みます)

直った版は、どちらも同じ 19.0.9・19.1.10・19.2.9・19.3.1 です。どちらの範囲でも、上げる先は変わりません。

細かい点が2つあります。RCE の告知の本文は直った版を「19.0.09」と書いていますが、欄と DoS の告知の本文は「19.0.9」で、npm にあるのも 19.0.9 です。また、react-server-dom-parcel には 19.0 系の版がそもそもありません(最初の 19 系は 19.1.0 です)。

React の告知は、対象のパッケージを使っているなら、直った版のどれかに「すぐ上げる」ように書いています("upgrade to any of the fixed versions immediately")。コマンドは書かれていません。npm では、2026年10月19日時点で、react・react-dom・react-server-dom-* の latest はどれも 19.3.1 で、backport は 19.1.10 です。

出典: GHSA-xqc2-xf4c-x3h3・GHSA-h3gv-c5rc-p453・npm: react・npm: react-server-dom-parcel

条件がはっきりしない件と、ほかの道具は?

use cache の件と画像の件の条件

use cache は、関数の結果をキャッシュ(使い回し)するための指定です。Cache Components は、Next.js の文書によると、next.config.ts で cacheComponents を true にすると有効になります。

手元で create-next-app の 16.4.0 と 16.4.1 を、保存した設定のない状態で --yes を付けて作ると、App Router の形で、next.config.ts に cacheComponents: true が入りました。つまり、既定の形が use cache の件の「App Router で Cache Components を使うアプリ」にあたります。ただし、ひな形の app/ に use cache や use server の語は0件でした。Next.js の告知は「似た関数が無くても上げる」と書いているので、「ひな形に関数が無いから大丈夫」とは読めません。

画像の件は、macOS・Windows・Alpine などの musl という部品を使う Linux が当たらない、という文は告知にも告知の欄にもありません。書かれているのは「glibc を使う Linux で動くとき」という条件だけです。

use cache の件は、React と Next.js で言い方の強さが違います。React の RCE の告知は「ごくまれな場合だけ(応答が複数の typed array と、攻撃者が操れる値を運ぶとき)」と書き、Next.js の告知は「似た関数が無くても上げる」と書いています。どちらの言い方も、ここに並べておきます。「当たらないから上げなくてよい」とは読まないでください。

出典: GHSA-xqc2-xf4c-x3h3・GHSA-673q-mjm6-r5xr・GHSA-2464-fhr4-w9xw・Next.js 文書: cacheComponents

React Router・Waku・Parcel など、ほかの道具を使っているとき

公式の案内は「直った版に上げる」です。React の2件の告知は、対象の3つのパッケージのどれかを使っているなら、直った版のどれかに「すぐ上げる」ように書いています。コマンドは書かれていません。各フレームワークが出した告知は、この記事では開いていません。まず、次の節の npm ls で、react-server-dom-* の版を見てください。

Next.js 16.4 でこれから作り始める人向けの話は、同じ回に出すNext.js 16.4 の記事で説明します。

版の確かめ方は? npm ls と next --version

Next.js の告知にも React の告知にも、確かめ方(npm ls など)の案内はありません。告知にあるのは、上げるコマンドだけです。この節の出力は、2026年10月19日に手元(macOS 14.4.1・Node.js 21.7.1・npm 10.5.0)で流したものです。コマンドは npm のもので、pnpm・yarn・bun では流していません(3つの違いはこちらの記事で説明しています)。出力の …/ は、置き場のパスを省いた印です。

端末の言語の設定によって、木の線が ├─ や └── の形で出ることがあります(手元でも、設定を変えると変わりました)。見るのは版の数字です。

Next.js のアプリ: next の版を見る

create-next-app 16.4.0 で作ったアプリ(当たる版)で流します。

$ npx next --version
Next.js v16.4.0
$ npm ls next react react-dom react-server-dom-webpack react-server-dom-turbopack sharp
app-1640@0.1.0 …/app-1640
+-- next@16.4.0
| +-- react-dom@19.3.0 deduped
| +-- react@19.3.0 deduped
| +-- sharp@0.35.5
| `-- styled-jsx@5.1.6
|   `-- react@19.3.0 deduped
+-- react-dom@19.3.0
| `-- react@19.3.0 deduped
`-- react@19.3.0

見る所は next@16.4.0 の行です。16.4.0 は、画像の件・use cache の件・Server Actions の件の、どの欄の範囲にも入っています。直った版は 16.4.1 なので、この出力のアプリは上げる側です。

react-server-dom-webpack だけを指定して流すと、空になります(終了コードは 1 でした)。

$ npm ls react-server-dom-webpack
app-1640@0.1.0 …/app-1640
`-- (empty)

Next.js は、react-server-dom-webpack と react-server-dom-turbopack を、node_modules/next/dist/compiled/ の中に自前で持っています。npm ls には出ません。しかも、その中の React の版の文字は、16.4.0 でも 16.4.1 でも同じ「19.3.0-canary-278794d7-20261002」でした(中のファイルは違います)。中の版の文字では、当たるか直ったかを見分けられません。next の版で見てください。

Next.js を使わないとき: react-server-dom-* の版を見る

Vite のふつうのひな形(npm create vite@latest の React、手元では create-vite 9.3.0 の --template react)で作って、npm install してから流した結果です。

$ npm ls react react-dom react-server-dom-webpack react-server-dom-turbopack react-server-dom-parcel
vite-app@0.0.0 …/vite-app
+-- react-dom@19.3.1
| `-- react@19.3.1 deduped
`-- react@19.3.1

react-server-dom-* は出ません。--all を付けて、深い所まで見ても空でした(終了コードは 1)。

$ npm ls react-server-dom-webpack --all
vite-app@0.0.0 …/vite-app
`-- (empty)

react-server-dom-webpack を自分で入れているアプリでは、版が出ます。19.3.0 を入れた空のフォルダでは、次のように見えました。

$ npm install react@19.3.0 react-dom@19.3.0 react-server-dom-webpack@19.3.0
$ npm ls react react-dom react-server-dom-webpack
rsdw@1.0.0 …/rsdw
+-- react-dom@19.3.0
| `-- react@19.3.0 deduped
+-- react-server-dom-webpack@19.3.0
| +-- react-dom@19.3.0 deduped
| `-- react@19.3.0 deduped
`-- react@19.3.0

19.3.0 は、RCE の告知の当たる版に入っています。直った版は 19.3.1 です。手元では、3つをそろえて上げました。

$ npm install react@19.3.1 react-dom@19.3.1 react-server-dom-webpack@19.3.1
$ npm ls react react-dom react-server-dom-webpack
rsdw@1.0.0 …/rsdw
+-- react-dom@19.3.1
| `-- react@19.3.1 deduped
+-- react-server-dom-webpack@19.3.1
| +-- react-dom@19.3.1 deduped
| `-- react@19.3.1 deduped
`-- react@19.3.1

npm audit には頼れない

npm audit は、依存の既知の脆弱性を調べるコマンドです。2026年10月19日時点、手元では、この5件を出しませんでした。

  • 16.4.0 の Next.js のアプリの npm audit に、next は出ませんでした(出たのは eslint まわりなどの5件で、10月14日の告知とは別のものです)
  • react-server-dom-webpack@19.3.0 だけを入れたフォルダの npm audit は、found 0 vulnerabilities でした
  • 5件とも、GitHub の Advisory Database(npm audit が引く先の、全体の一覧)にまだなく、API は 404 を返しました

つまり、当たっているのに 0 件と出ることがあります。npm audit が 0 件だから安全、とは読まないで、上の npm ls で版を見てください。いつから出るようになるかは、分かりません。

上げたあとの見え方

16.4.0 のアプリを、告知のコマンドで上げた結果です。

$ npm install next@16.4.1
$ npm ls next react react-dom sharp
app-1640@0.1.0 …/app-1640
+-- next@16.4.1
| +-- react-dom@19.3.0 deduped
| +-- react@19.3.0 deduped
| +-- sharp@0.35.5
| `-- styled-jsx@5.1.6
|   `-- react@19.3.0 deduped
+-- react-dom@19.3.0
| `-- react@19.3.0 deduped
`-- react@19.3.0
$ grep -n '"next"' package.json
12:    "next": "^16.4.1",

next@16.4.1 と出れば、16.4 系の直った版です。react が 19.3.0 のままでも、react は告知の対象のパッケージではありません(「Next.js のアプリは、next の版で見る」に書いたとおりです)。create-next-app 16.4.1 で最初から作ったアプリでは、npx next --version が Next.js v16.4.1 と出ました。

create-next-app が書いた package.json の next は "16.4.0"(ぴったりこの版)でした。npm install next@16.4.1 のあとは "^16.4.1" に書き換わっています。^ は、16.4.1 以上で 17 未満の新しい版を許す書き方です。

出典: 手元で流した結果です。公式の案内ではありません。上げる版の一次資料は、「上げる版は?」の節の出典を見てください。

Next.js を上げるときに TypeScript の版も気になる人は、React・Next.js・Vite で TypeScript 7 は使える?の節を見てください。

画像の件(sharp)は、上げるだけで直りますか?

画像の件(CVE-2026-96889)は、Next.js が画像の最適化に使っている部品の脆弱性です。CVE の記録(Red Hat が登録し、2026年9月23日に公開)によると、元は librsvg(SVG という画像形式を読む部品)の誤りです。入れ子になった XML の取り込み(XInclude)に、同じ名前の宣言が重なっているとき、解放したメモリをあとから使ってしまう(use-after-free)誤りが起き、サービス停止か、任意のコードの実行につながりうる、と書かれています。

Next.js が画像の最適化に使う部品は sharp です。sharp にも、同じ CVE の告知(GHSA-wq5f-xc86-pv6w)があります。sharp の当たる版は sharp < 0.35.5 で、直った版は 0.35.5 以上です。

Next.js の告知が書いている回避策は、次のとおりです。

As a workaround, ensure the version of sharp used by Next.js is 0.35.5 or later. Upgrading Next.js to the patched versions ensures package managers automatically provide a fixed version of sharp to Next.js.

訳すと、「Next.js が使う sharp を 0.35.5 以上にしてください。Next.js を直った版に上げれば、パッケージマネージャーが直った sharp を Next.js に入れます」です。

16.4 系は、上げれば sharp も上がる

next の 16.4.1 は、sharp を ^0.35.5(0.35.5 以上の 0.35 系)で求めます。next の指定の上では、16.4.1 に上げれば sharp は 0.35.5 以上になります。手元の 16.4.0 のアプリは、作った時点で sharp が 0.35.5 でした(sharp 0.35.5 の公開は2026年9月27日、16.4.0 は10月6日)。そのため、16.4.1 に上げる前と後で、sharp の版は変わりませんでした。

15.5 系は、上げても古い sharp が残ることがある

next が sharp に求める範囲は、15.5.27 が ^0.34.3 || ^0.35.4、15.5.28 が ^0.34.3 || ^0.35.5 です。15.5.28 は 0.34 系も許しています。0.34 系は、sharp の告知の範囲(0.35.5 より前)に入ります。

手元で、古い版の next@15.5.23 で作った 15.5 系のアプリ(lockfile に sharp 0.34.5 が入ったもの)に、告知のコマンドを流しました。lockfile(package-lock.json)は、入れた版を記録するファイルです。

$ npm install next@15.5.28
$ npm ls next react react-dom sharp
p155@1.0.0 …/p155
+-- next@15.5.28
| +-- react-dom@19.2.8 deduped
| +-- react@19.2.8 deduped
| +-- sharp@0.34.5
| `-- styled-jsx@5.1.6
|   `-- react@19.2.8 deduped
+-- react-dom@19.2.8
| `-- react@19.2.8 deduped
`-- react@19.2.8

next は 15.5.28 になりましたが、sharp は 0.34.5 のままでした。このとき npm audit は、sharp を出しました(sharp の告知が全体の一覧に入っているためです)。

次は、npm update sharp を流した結果です。

$ npm update sharp
$ npm ls sharp
p155@1.0.0 …/p155
`-- next@15.5.28
  `-- sharp@0.35.5

sharp は 0.35.5 になり、package.json に sharp の行は増えませんでした。これは手元の npm 10.5.0 での結果で、npm update sharp は公式の案内ではありません。告知は「Next.js を上げれば、パッケージマネージャーが直った sharp を入れる」と書いていて、手元の 15.5 系の動きとは食い違いました。15.5 系を上げたあとは、npm ls sharp で 0.35.5 以上かを見てください。

sharp を自分のコードで直接使っている場合の回避策として、sharp の告知は、SVG を読ませない sharp.block({ operation: ["VipsForeignLoadSvg"] }); を書いています。これが Next.js の中の sharp に効くかは、書かれていません。

画像の件の重大度は、告知によって違います

同じ CVE-2026-96889 でも、見る場所によって重大度が違います。CVSS は、脆弱性の深刻さを点数で表す共通の方式です。

見る場所重大度点数
Next.js の告知(GHSA-2464-fhr4-w9xw)CriticalCVSS v4 で 9.5(AV:N)
sharp の告知(GHSA-wq5f-xc86-pv6w)highCVSS v4 で 8.9(AV:L。攻撃の経路の評価が、Next.js の告知の AV:N と違います)
CVE の記録(Red Hat)HIGHCVSS 3.1 で 7.8

食い違っていて、どれが正しいかをこの記事では決めません。Next.js の件は、Next.js の告知の言い方(Critical)で書いています。sharp の告知は、条件をもう少し細かく書いています。「実行環境の条件がそろうと、glibc を使う Linux で RCE になりうる」という書き方です。

出典: CVE-2026-96889 の記録・sharp の告知 GHSA-wq5f-xc86-pv6w・GHSA-2464-fhr4-w9xw

よくある質問

13 系・14 系を使っています。直りますか?

2026年10月19日時点で、「直らない」とも「直る」とも言い切れる文は見つかりませんでした。分かっていることは次のとおりです。

  • 欄の当たる範囲には入っています(画像の件は 10.0.0〜15.5.27、Server Actions の件は 13.0.0〜15.5.27)
  • 告知が挙げる直った版は、16.4.1 と 15.5.28 だけです。14 系の修正版は告知にありません
  • サポートの方針のページで、14.x と 13.x は「Unsupported Versions(サポートの外)」の表にあります。ただし同じページに「まれに、深刻さによっては、LTS の方針の外の版も直す」とも書かれています
  • 14 系の最後の版は 14.2.35(2025年12月11日)で、10月14日のあとに 14 系の版は出ていません
  • 13 系・14 系を使う人がどうすればよいかの公式の案内は、告知にも GHSA にもありません。14 系は sharp を依存に持たないので、14 系で sharp を自分で入れている場合に、sharp の回避策が効くかは確かめていません

方針のページは、できるかぎり最新の版を使い、本番のアプリは最新の Active LTS か Maintenance LTS で動かすことを勧めています。

npm audit が 0 件なら、当たっていませんか?

いいえ。2026年10月19日時点、手元では npm audit はこの5件を出しませんでした。当たっているのに 0 件と出ることがあります。npm ls で next や react-server-dom-* の版を見てください。

画像の件は、macOS・Windows・Alpine では起きませんか?

告知に書かれている条件は、「glibc を使う Linux で動くとき」だけです。ほかの環境が当たらない、という文はありません。手元は macOS で、Linux(Docker)では流していないので、glibc の Linux での sharp の版の見え方は確かめていません。

Vercel などのホスティングの上で動かしているアプリは、当たりますか?

告知にも GHSA にも書かれていません。この記事では調べていません。

React 18 以前は、当たりますか?

告知が当たる版として挙げているのは、19 系だけです。18 系について書いた文は見つかりませんでした。調べていません。

まとめ

  • 2026年10月14日に、React の2件(RCE・DoS)と Next.js の3件(use cache の RCE・画像の最適化の RCE・Server Actions の DoS)の告知が出た。5件のうち3件は Critical と書かれている
  • React のコードがサーバーを使わないなら、当たらない(告知の原文)。Vite のふつうのひな形は、react-server-dom-* を持たない。create-vite で「RSC」を選んだ場合は、当たりうる側
  • Next.js のアプリは next の版を見る。npm ls react-server-dom-webpack は、Next.js のアプリでは空になる。react は告知の対象のパッケージではない
  • 上げる版は、Next.js が 15 系(15.5.27 以下)は 15.5.28、16 系(16.4.0 以下)は 16.4.1。React は、react-server-dom-*(react そのものではない)を 19.0.9・19.1.10・19.2.9・19.3.1 のどれかに。2026年10月19日時点の latest は、Next.js が 16.4.2、React が 19.3.1
  • npm audit は、2026年10月19日時点の手元では、この5件を出さなかった。npm audit に頼らず、npm ls と npx next --version で版を見る
  • 15.5 系では、上げても古い sharp が残ることがあった(手元の結果)。npm ls sharp で 0.35.5 以上かを見る
  • 13 系・14 系の修正版は、告知にない。14.x はサポートの外。「直らない」と言い切る文は見つかっていない

参考資料

※この記事は、公式の資料をもとに AI(Claude)で下書きし、2026年10月19日時点の公式の資料と照らして確かめてから公開しています。誤りに気づいたらお問い合わせからお知らせください。

PR
PR
タイトルとURLをコピーしました