React Server Componentsの脆弱性、Next.jsは16.4.1・15.5.28から修正済み|自分のプロジェクトの版を確かめる方法
React Server Componentsのリモートコード実行の脆弱性は、10月14日の修正版で直っている
Reactの開発チームは、React Server Componentsの深刻な脆弱性(GHSA-xqc2-xf4c-x3h3、CVE-2026-126187)を修正しました。修正版のreact-server-dom-webpackなどは2026年10月14日(日本時間15日)に公開され、同じ日にReactのリポジトリでセキュリティ勧告も公開されています。GitHubの脆弱性データベース(GitHub Advisory Database)に登録されたのは、約4週間後の11月10日(日本時間11日)です。深刻度は「critical」、CVSS v4のスコアは9.5です。11月12日に手元のサンプルで実行したnpm auditは、この勧告をcriticalとして表示しました。
React Server Componentsは、Reactの部品(コンポーネント)をサーバーで動かし、その結果をブラウザーへ送る仕組みです。Next.jsのApp Routerなどが使っています。脆弱性があるのは、サーバーとブラウザーの間でデータを受け渡す部分のパッケージ(react-server-dom-webpack、react-server-dom-parcel、react-server-dom-turbopack)です。勧告によると、細工したデータを送られたサーバーで、攻撃者のコードが動くおそれがあります。攻撃が成り立つのは、サーバーの応答が複数の型付き配列(Uint8Arrayなどのtyped array)と攻撃者が操れる値を一緒に運ぶ、ごくまれな場合です。それでも勧告は、すぐに更新するよう勧めています。
Next.jsは、このうちreact-server-dom-webpackとreact-server-dom-turbopackを、nextパッケージの中に同梱しています。Viteのプラグイン@vitejs/plugin-rscも、react-server-dom-webpackを同梱しています。同梱された分は、npm lsで依存関係を一覧しても表示されません。この記事では、Next.jsと@vitejs/plugin-rscの各版のパッケージを取得し、中のファイルを読んで修正が入っているかを調べました。あわせて、npm auditとnpm lsがそれぞれ何を表示するかを、package-lock.jsonだけを作ったサンプルで確かめました。自分のプロジェクトが修正済みかの確かめ方と、修正版への上げ方をまとめます。
要点
修正済みかは、使っているフレームワークとreact-server-dom-*の版で決まる
パッケージの中身と、npm auditの結果を比べて確かめました。
脆弱性があるパッケージ
react-server-dom-webpackなど3つ
19.0.0〜19.0.8、19.1.0〜19.1.9、19.2.0〜19.2.8、19.3.0が対象です。修正版は19.0.9、19.1.10、19.2.9、19.3.1です。
Next.jsの利用者
15.5.29以降か16.4.6以降へ上げる
同梱のReactに修正が入っているのは16.4.1以降と15.5.28以降です。11月12日の時点で、15.4以前の15系と14系・13系には、修正を入れた版が出ていません。
Vite(@vitejs/plugin-rsc)の利用者
プラグインの版も確かめる
react-server-dom-webpackを自分のpackage.jsonに書いていなければ、同梱版が使われます。同梱版の修正は0.5.38からです。
react-server-dom-*を入れて使う場合
reactとreact-domも同じ版へ
修正版はreactとreact-domに同じ版以上を求めるので、3つをそろえて上げます。
react-server-dom-webpackなど3つの、修正前の19系に脆弱性がある
勧告の対象は、React Server Componentsでサーバーとブラウザーの間のデータを変換する3つのパッケージです。使っているバンドラー(ファイルをまとめるツール)に合わせて、webpack用、Parcel用、Turbopack用に分かれています。勧告に挙がっているのはこの3つで、reactとreact-domは含まれていません。
| 系列 | 脆弱性がある版 | 修正版 |
|---|---|---|
| 19.0 | 19.0.0〜19.0.8 | 19.0.9 |
| 19.1 | 19.1.0〜19.1.9 | 19.1.10 |
| 19.2 | 19.2.0〜19.2.8 | 19.2.9 |
| 19.3 | 19.3.0 | 19.3.1 |
react-server-dom-webpack、react-server-dom-parcel、react-server-dom-turbopackの3つで共通です(Parcel用はnpmに19.1.0から登録されています)。出典はGHSA-xqc2-xf4c-x3h3とReact 19.2.9のリリースノートです。
勧告によると、Reactのコードをサーバーで動かしていないアプリと、React Server Componentsに対応したフレームワークやバンドラーを使っていないアプリには影響しません。ブラウザーだけで動くReactのアプリ(Viteで作る通常のSPAなど)は、この2つに当てはまります。
修正版のリリースノートには、脆弱性の説明はなく、「Improve transport protocol」(データのやり取りの改善)の1行だけが書かれています。修正版は10月14日から入手できたので、それ以降に依存関係を更新していれば、気づかないうちに修正済みになっていることもあります。
Next.jsは16.4.1と15.5.28から、同梱するReactに修正が入っている
Next.jsは、react-server-dom-webpackとreact-server-dom-turbopackをnext/dist/compiled/の下に同梱しています。同梱分のpackage.jsonには版の番号がないため、修正が入っているかはファイルの中身で確かめました。
手がかりにしたのは、Reactの修正で新しく加わったエラーの文「Cannot transport a detached buffer」です。react-server-dom-webpackのサーバー側のファイルでは、19.2.8にはこの文がなく、修正版の19.2.9には入っていました。この記事では、このエラー文があるかを、修正が入っているかの目印にしました。Next.jsの各版に同梱されたファイルで探した結果が次のとおりです。
修正で加わったエラー文がない
next 16.4.0、16.3.8、15.5.27、15.4.11、14.2.35
同梱のreact-server-dom-webpackとreact-server-dom-turbopackのサーバー側のファイルに、修正で加わったエラー文がありません。
修正で加わったエラー文がある
next 16.4.1、16.4.6、15.5.28、15.5.29
Node.js用・Edge用のサーバー側のファイルに、修正で加わったエラー文が入っています。
2026年11月12日、npm packで取得した各版のパッケージを展開し、dist/compiled/react-server-dom-webpackとdist/compiled/react-server-dom-turbopackのcjsフォルダーを調べました。16.3.8、15.4.11、14.2.35は、それぞれの系列の最後の版です。
Next.js 16.4.1と15.5.28は、Reactの修正版と同じ10月14日に、約1時間後に公開されました(npmの公開時刻)。16.4.1のリリースノートには、nextパッケージに対する勧告GHSA-673q-mjm6-r5xr(critical)が挙がっています。この勧告は、Cache Componentsを使うApp Routerのアプリで、use cacheの関数が複数の型付き配列を返すと、リモートコード実行につながるおそれがあるというものです。対象はnext 16.0.0〜16.4.0で、回避策はなく、該当する関数がないアプリも更新するよう勧めています。
15.5.28は、GHSA-673q-mjm6-r5xrの対象には入っていません。それでも、同梱するReactには16.4.1と同じ修正が入っていました。15.5.28のリリースノートには、別のcriticalの脆弱性(GHSA-2464-fhr4-w9xw、画像の最適化でSVGを使う場合のリモートコード実行)の修正も挙がっています。この勧告の対象はnext 10.0.0〜15.5.27と16.0.0〜16.4.0で、修正版は15.5.28と16.4.1です。
15.4以前の15系、14系、13系、16.3以前の16系は、どの系列も最後の版が10月14日より前に出ていて、11月12日の時点で修正を入れた版がありません。これらを使っている場合は、15.5.29以降か16.4.6以降へ上げます。14系や13系から上げる場合はメジャー更新になるので、Next.jsのアップグレードガイドで変更点を確かめてから進めます。
canary版(16.5.0-canary.x)は、同梱のファイルの中身で確かめます。16.5.0-canary.13は修正版の公開より後に出ましたが、同梱のファイルにエラー文はなく、入ったのはcanary.14からでした。canary版を使っている場合は、次の節のgrepを使い、0だった場合は16.4.6以降の安定版か、canary.14以降へ上げます。
自分のプロジェクトの版を、npm lsとnpm auditで確かめる
確かめ方は、使っているフレームワークと、react-server-dom-*がどう入っているかで分かれます。
React Server Componentsの修正が入っているかを確かめる順番
1. Next.jsを使っている
npm ls nextで版を見ます。16系は16.4.1以降、15.5系は15.5.28以降なら、同梱のReactに修正が入っています。それ以外の版は上げます。ほかの脆弱性の修正も入れるなら、16.4.6以降か15.5.29以降にします。canary版はgrepで確かめます。
2. @vitejs/plugin-rscを使っている(Wakuなど、内部で使うフレームワークを含む)
自分のpackage.jsonの依存にreact-server-dom-webpackを書いていれば、その版が使われるので、npm ls react-server-dom-webpackに出る版を上の表と比べます。書いていなければ同梱版が使われるので、npm ls @vitejs/plugin-rscで0.5.38以降かを確かめます。Wakuは内部でこのプラグインを使い、React RouterのRSCもこのプラグインを使う構成があります。Wakuでは、package.jsonに書いていなくてもreact-server-dom-webpackがnpm lsに出ますが、使われるのは同梱版です。
3. ParcelのRSCなど、react-server-dom-*がそのまま使われる場合
@parcel/rscの依存として入るreact-server-dom-parcelのように、フレームワークがreact-server-dom-*をそのまま使う場合は、npm lsに版が出て、修正前の版ならnpm auditに勧告が出ます。版を上の表と比べます。
4. React Server Componentsに対応したフレームワークやプラグインを使っていない
この脆弱性の影響は受けません。対応したものを使っているのに一覧に出ない場合は、Next.jsや@vitejs/plugin-rscのように同梱していることがあるので、そのフレームワークの更新情報で、修正版のReactを取り込んだ版を確かめます。
Next.js、@vitejs/plugin-rsc、直接入ったパッケージを、1つのコマンドで一覧できます。インストール済みのプロジェクトで実行します。react-server-dom-webpack 19.2.8を入れたサンプルと、next 16.4.0だけを入れたサンプルの結果です。
$ npm ls next @vitejs/plugin-rsc react-server-dom-webpack react-server-dom-turbopack react-server-dom-parcel
# react-server-dom-webpack を入れたサンプル
`-- react-server-dom-webpack@19.2.8
# next だけを入れたサンプル(同梱分は表示されない)
`-- next@16.4.0
npm auditの結果も、入り方で変わります。react-server-dom-webpackを入れたサンプルでは、この記事の勧告(GHSA-xqc2-xf4c-x3h3)がcriticalとして出ました。Next.jsのサンプルでは、この勧告は出ず、代わりにnextパッケージに対する勧告(16.4.0ではGHSA-673q-mjm6-r5xrなど、15.5.27ではGHSA-2464-fhr4-w9xwなど)が出ました。
| サンプルの依存関係 | npm auditが挙げた勧告 | npm auditが示した修正版 |
|---|---|---|
| react-server-dom-webpack 19.2.8 | GHSA-xqc2-xf4c-x3h3(critical) | 19.3.1 |
| next 16.4.0 | nextの勧告3件(GHSA-673q-mjm6-r5xrなど、criticalを含む) | 16.4.6 |
| next 15.5.27 | nextの勧告2件(GHSA-2464-fhr4-w9xwなど、criticalを含む) | 15.5.29 |
| next 16.4.1 | なし | — |
2026年11月12日、Node.js 24.12.0とnpm 11.7.0で、npm install --package-lock-only --ignore-scriptsでpackage-lock.jsonだけを作ったサンプルにnpm auditを実行しました。
Next.jsを使っている場合、npm auditの結果にGHSA-xqc2-xf4c-x3h3の番号は出ません。16.4.0以前の16系でも、15.5.27以前の15系や14系・13系でも、nextパッケージに対するcriticalの勧告が出るので、どちらにしてもnextの更新を求められます。@vitejs/plugin-rscの同梱版を使っている場合は、npm auditに何も出ないことがあります。
npm auditが照合するのは、勧告のデータベースにすでに登録された脆弱性です。この記事の勧告も、データベースに登録されたのは修正の約4週間後でした。11月12日の時点では、Next.js 16.4.5と15.5.29で直ったほかの脆弱性の勧告もデータベースに見当たらず、next 16.4.1のサンプルは0件と表示されました。修正済みかどうかは、件数ではなく版で判断します。
インストール済みのnode_modulesで、同梱のファイルに修正が入っているかを直接確かめることもできます。修正済みの版では1、修正前の版では0が表示されます。Next.js 16では新しいプロジェクトの既定のバンドラーがTurbopackなので、両方のファイルを調べます。
# Next.js が同梱する webpack 用と Turbopack 用のサーバー側のファイル
grep -c "Cannot transport a detached buffer" \
node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js \
node_modules/next/dist/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js
# @vitejs/plugin-rsc が同梱するファイル
grep -c "Cannot transport a detached buffer" \
node_modules/@vitejs/plugin-rsc/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.node.production.js
# 手元の結果: next 16.4.0・15.5.27 → 0、16.4.1・15.5.28 → 1
# @vitejs/plugin-rsc 0.5.37 → 0、0.5.38・0.5.39 → 1
ブラウザー用のproduction版のファイルでは、エラー文が番号に置き換えられていることがあるので、上のNode.js用のファイルで確かめます。
修正版への上げ方:Next.jsはnextを上げ、react-server-dom-*はreactとそろえる
Next.jsを使っている場合は、nextを上げます。16系なら16.4.6以降、15系・14系・13系なら15.5.29以降にすると、16.4.5などで直ったほかの脆弱性の修正も入ります。Next.jsは同梱のReactを使うので、この脆弱性のためにreactとreact-domを上げる必要はありません。next 16.4.0のサンプルで次のコマンドを実行すると、npm auditの結果は0件になりました。
# 16系の場合(15系・14系・13系なら next@15.5.29)
npm install next@16.4.6
npm ls next
@vitejs/plugin-rscの同梱版を使っている場合は、@vitejs/plugin-rscを0.5.38以降へ上げます。Wakuのように内部でこのプラグインを使うフレームワークでは、npm update @vitejs/plugin-rscで上げます。手元のWakuのサンプルでは、npm installでは0.5.37のままで、npm update @vitejs/plugin-rscで0.5.39に上がりました。
react-server-dom-*がnpm lsに出る場合は、react・react-domも一緒に上げます。修正版のreact-server-dom-webpack 19.2.9は、reactとreact-domに19.2.9以降を求めます(peerDependenciesが^19.2.9)。react 19.2.8のサンプルでreact-server-dom-webpackだけを上げると、npmは次のエラーで止まりました。
$ npm install react-server-dom-webpack@19.2.9
npm error code ERESOLVE
npm error ERESOLVE unable to resolve dependency tree
npm error Could not resolve dependency:
npm error peer react@"^19.2.9" from react-server-dom-webpack@19.2.9
# react・react-dom も同じ版にそろえると上がる
$ npm install react-server-dom-webpack@19.2.9 react@19.2.9 react-dom@19.2.9
3つを同じ版にそろえると、npm auditからGHSA-xqc2-xf4c-x3h3の指摘が消えました。19.3系を使っている場合は19.3.1、19.1系なら19.1.10、19.0系なら19.0.9にそろえます。npmに登録された情報では、どの修正版もreactとreact-domに同じ版以上を求めていて、Parcel用とTurbopack用の19.2.9も同じです。パッケージ名を置き換えて、同じように上げます。
依存関係を上げたら、いつもの手順でビルドと配置をやり直し、本番環境で動いているアプリが新しい版で作られたことを確かめます。
参考資料
- GHSA-xqc2-xf4c-x3h3: Unauthenticated Remote Code Execution in React Server Components(React)
- GitHub Advisory DatabaseのGHSA-xqc2-xf4c-x3h3(CVE-2026-126187)
- React 19.2.9のリリースノート(2026年10月14日)
- [Flight] Improve transport protocol(react/react #37846)
- GHSA-673q-mjm6-r5xr: Unauthenticated Remote Code Execution in use cache functions returning typed arrays(Next.js)
- GHSA-2464-fhr4-w9xw: Unauthenticated Remote Code Execution in Image Optimization API when SVG files are used(Next.js)
- Next.js 16.4.1、Next.js 15.5.28、Next.js 16.4.5のリリースノート
- @vitejs/plugin-rsc(vitejs/vite-plugin-react)
検証環境
- macOS 27.0.1(Apple Silicon)、Node.js 24.12.0、npm 11.7.0
- next 14.2.35、15.4.11、15.5.27〜15.5.29、16.3.8、16.4.0、16.4.1、16.4.6、16.5.0-canary.13と14、@vitejs/plugin-rsc 0.5.37〜0.5.39、waku 1.0.0-rc.5、react-server-dom-webpack 19.2.8と19.2.9(npmで取得したパッケージの中身と依存関係を調査)
- 検証日: 2026年11月12日
この記事は、AIが調査と下書きを担当し、上記の環境で実際に動かして結果を確かめ、下書きとは別の担当が公開前に本文と出典を確認しています。制作と訂正の方針は編集・訂正方針で公開しています。









