React・Next.jsに発生した重大脆弱性とは何か?2025年に発覚した大規模脆弱性の概要と背景を解説
目次
- 1 React・Next.jsに発生した重大脆弱性とは何か?2025年に発覚した大規模脆弱性の概要と背景を解説
- 2 CVE-2025-55182 / CVE-2025-66478の概要と重要ポイント:React/Next.jsを襲った脆弱性の内容
- 3 どのバージョンのReact・Next.jsが影響を受けるのか?脆弱性の対象バージョン一覧と対応状況を確認
- 4 想定される被害・リスクはどれほど深刻か?認証不要のリモートコード実行がもたらす脅威と被害シナリオ
- 5 脆弱性の技術的な原因と仕組み:RSC(React Server Components)プロトコルに潜む問題点を解説
- 6 今すぐ取るべき対策とアップデート手順:脆弱性を解消するための緊急対応ガイド
- 7 自分の環境が影響を受けるか確認する方法:脆弱性の有無をチェックする手順とポイント
- 8 本脆弱性が与える影響と開発・運用上の注意点:エンジニアが留意すべきセキュリティ上のポイント
- 9 React・Next.js以外の関連フレームワークやサービスへの波及:周辺エコシステムへの影響範囲と対応状況
React・Next.jsに発生した重大脆弱性とは何か?2025年に発覚した大規模脆弱性の概要と背景を解説
2025年11月末、ReactとNext.jsに関連するウェブ開発コミュニティに衝撃が走りました。Reactの新機能であるReact Server Components(RSC)に起因する重大な脆弱性が発見され、12月初旬に公表されたのです。この脆弱性は認証不要でリモートからコードを実行できてしまう極めて危険なもので、セキュリティ評価指標であるCVSSスコアは満点の10.0が付けられました。これはWebアプリケーションにおいて最悪クラスの脅威であり、多くのエンジニアにとって見過ごせない問題となっています。
本記事では、「React・Next.jsに発生した重大脆弱性」として話題になっているCVE-2025-55182およびCVE-2025-66478について詳しく解説します。まずはReact Server Componentsとは何か、この脆弱性がどのように発見され何が問題なのか、そして被害の深刻さや対策まで、順を追って見ていきましょう。React/Next.jsユーザーに限らず、フロントエンド・バックエンド開発者全般に知っておいてほしい重要な内容です。
React Server Components (RSC)の概要とNext.jsにおける役割と今回の脆弱性との関係
React Server Components(RSC)は、React 18から導入が進められている新機能で、コンポーネントをサーバー側でレンダリング・処理できるようにする仕組みです。従来、ReactはクライアントサイドでUIを構築するのが主流でしたが、RSCでは一部のコンポーネント処理をサーバーで実行し、その結果をクライアントに送ることでパフォーマンスや開発体験の向上を図ります。この通信には内部プロトコルである「React Flightプロトコル」が使われ、クライアントとサーバー間でコンポーネントツリーやアクションがシリアライズされてやり取りされます。
Next.jsはReactの代表的なフレームワークであり、最新バージョンではRSCを活用したApp Router(アプリケーションフォルダベースのルーティング)が導入されています。Next.jsのApp Routerモードでは、React Server Componentsがフルに活用され、ページレンダリングやフォーム操作時にサーバーとクライアントがFlightプロトコルでデータをやり取りします。今回発覚した脆弱性は、まさにこのRSCの通信プロトコル部分に起因するもので、React本体の実装上の問題がNext.jsを含む複数のフレームワークに波及する形となりました。つまり、ReactとNext.jsという密接に連携する技術スタックの接点(RSC機能)において、攻撃者に悪用され得る抜け穴が見つかったのです。
脆弱性の発見:2025年11月のLachlan Davidson氏による報告とReactチームの緊急対応
この脆弱性は、2025年11月29日にセキュリティ研究者のLachlan Davidson氏によって発見・報告されました。彼はMeta(Facebook)のバグバウンティプログラムを通じてReactチームに問題を通知し、ReactチームとMetaのセキュリティエンジニアが即座に検証と修正作業に取り掛かったとされています。その後、12月1日には修正策が開発され、影響を受ける主要プロジェクト(Next.jsや他のフレームワーク)とホスティング事業者(Vercelなど)に対して協力のもと検証や一時的な緩和策の展開が行われました。
そして2025年12月3日、Reactチームは公式ブログでこの脆弱性をCVE-2025-55182として公表し、同時に修正版パッケージをリリースしました。またNext.jsチームも同日付けで独自にアドバイザリを公開し、Next.jsユーザー向けに注意喚起とアップデート情報(これが後にCVE-2025-66478として登録)を発信しました。発見から公表までわずか5日間という非常に迅速な対応が取られたのは、脆弱性の深刻さを物語っています。React開発コミュニティと各企業は一丸となって緊急対応に当たったのです。
脆弱性の深刻度:CVSS 10.0(最高危険度)に評価された理由とReactエコシステムにもたらす影響
今回の脆弱性はCVSSスコアで10.0と評価されました。CVSS(共通脆弱性評価システム)のスコアは0から10で危険度を示しますが、10.0というのは「Critical(深刻)」に分類され、滅多に付くことのない最高レベルの深刻さです。なぜこれほど高い評価になったかと言えば、まず影響の大きさが挙げられます。Reactは世界中のWeb開発者に利用されており、2024年のJavaScriptエコシステム調査では開発者の8割以上がReactを使用経験ありと回答しています。そのReactと直接関係する脆弱性であるため、潜在的な影響範囲が非常に広範です。
さらに、後述するように攻撃の成立に認証が不要である点、攻撃が成功した場合にはサーバー乗っ取りやデータ漏洩など致命的な被害が発生し得る点も重なり、危険度を押し上げました。React/Next.jsというフロントエンド技術スタックは多くのウェブサービスの基盤を支えているため、この脆弱性はReactエコシステム全体の信頼性を揺るがしかねない問題として捉えられています。言い換えれば、もし適切な対策が取られなければ、Web開発の広範囲にわたって重大なセキュリティリスクを抱える事態になってしまうわけです。
React2Shellという名称の由来:Log4Shellになぞらえた意味とコミュニティへのインパクト
この脆弱性は非公式に「React2Shell(リアクト・トゥ・シェル)」とも呼ばれています。これは2021年末に発覚したJavaのログ処理ライブラリの深刻な脆弱性「Log4Shell」になぞらえた名前です。Log4Shellはログ機能を悪用したリモートコード実行攻撃で世界的に大きな混乱を引き起こしました。今回のReact/Next.jsの脆弱性も、「〇〇2Shell」と呼ぶにふさわしいほど危険度が高く、広範な影響を及ぼす可能性があるとの意味が込められています。
このネーミングはセキュリティ研究者がSNS上で発信したことで広まりました。React2Shellという呼称が使われることで、エンジニアコミュニティにも「これはLog4Shell級の重大インシデントなのだ」という危機感が共有されました。実際、各種技術フォーラムやSNSではReact2Shellについての情報交換が活発に行われ、早急なアップデートや対策の呼びかけがなされています。名前のインパクトも手伝って、多くの開発者が注意喚起に耳を傾けたと言えるでしょう。
React/Next.jsユーザーへの影響範囲:人気フレームワークゆえに広がるリスクへの警鐘と今後の注意点
ReactおよびNext.jsユーザーは、この脆弱性によって直接的なリスクにさらされました。人気フレームワークゆえに、膨大な数のプロジェクトが潜在的に影響を受ける可能性があります。フロントエンドとバックエンドの境界を跨ぐRSCという仕組みの脆弱性のため、従来クライアントサイド開発者が意識しなかった領域からの攻撃に直面する形です。
今回の件は、React/Next.jsを利用する全ての開発チームに「最新機能を使う際のリスク評価」について警鐘を鳴らす出来事ともなりました。RSCは魅力的な新機能でしたが、その裏で予期せぬセキュリティホールが潜んでいたことになります。今後は、新技術の採用時にセキュリティ面の検証をより慎重に行う必要性が再認識されたと言えるでしょう。また、普段から依存ライブラリのアップデート情報に目を光らせ、重大な脆弱性が報告された際には迅速に行動を起こす体制を整えておくことが、エンジニアにとっての重要な心得となります。
CVE-2025-55182 / CVE-2025-66478の概要と重要ポイント:React/Next.jsを襲った脆弱性の内容
それでは今回の脆弱性に割り当てられたCVEについて整理しましょう。React側の問題にはCVE-2025-55182、Next.js側の影響にはCVE-2025-66478というIDが付与されています。両者は表裏一体の関係にあり、簡単に言えばReactの脆弱性(55182)が原因でNext.jsにも波及したため、React用とNext.js用の二つのCVE番号が存在する形です。ただし実質的には一つの根本原因から派生した問題であり、対策も連動しています。以下で各CVEの内容とポイントを見ていきましょう。
CVE-2025-55182の詳細:Reactにおけるリモートコード実行脆弱性の内容と影響範囲
CVE-2025-55182は、React自身のServer Components機能に内在していたリモートコード実行(RCE)の脆弱性です。ReactのRSC実装部分において、不適切なデータのデシリアライズ処理が原因となり、本来であれば実行されるはずのない任意のコードがサーバー上で実行できてしまう可能性がありました。
技術的には、ReactのRSC用モジュール(react-server-dom-webpackやreact-server-dom-turbopack等)の内部関数が、クライアントから送信されるデータを復元(デコード)する際に入力内容の検証が不十分な箇所がありました。その結果、悪意ある細工が施されたデータを受け取った場合に、Reactがサーバー側で意図しないモジュールや関数を呼び出してしまう恐れが生じたのです。平たく言えば、攻撃者はRSCのデータフォーマット(Flightプロトコルのペイロード)を悪用して、Reactサーバーコンポーネントの仕組みを乗っ取り、サーバー上で任意のコードを実行(Remote Code Execution)できる余地を見つけたということになります。
このCVE-2025-55182はReactチームが管理するオープンソース部分の脆弱性であるため、React自体や、それを利用する様々なフレームワークに影響を与えました。影響範囲としては、ReactのRSC機能を組み込んでいるバンドラ/フレームワーク(Next.js、React Router、Viteプラグイン、Parcel RSC、RedwoodJSなど)が該当します。要するにReactをサーバー側で活用するあらゆるツールで、デフォルトの状態では脆弱性の影響下にあったという非常に広い範囲をカバーしています。これがCVE-2025-55182の持つ意味合いです。
CVE-2025-66478の詳細:Next.jsアプリへの影響と独自CVE発行の背景と経緯
CVE-2025-66478は、Next.jsに関する脆弱性IDです。実際には前述のReact側脆弱性(55182)がNext.jsアプリに与える影響を追跡するために、Next.jsチームが独自に割り当てたものです。Next.jsではApp Router機能を通じてRSCを利用しており、Reactに起因する脆弱性によってNext.jsアプリケーションでもRCE攻撃が可能になることが判明しました。
Next.jsチームはReactチームから情報提供を受け、問題発覚当日に迅速にセキュリティアドバイザリを公開しました。その中で、影響を受けるNext.jsのバージョン群や修正バージョン、アップデート手順などを明示するとともに、CVE-2025-66478という識別子で追跡しています。実際には根本要因はReact側にあるため、National Vulnerability Database(NVD、米国のCVEデータベース)ではCVE-2025-66478をCVE-2025-55182の重複(Duplicate)として扱う判断がなされています。しかし、Next.js利用者に対して注意喚起を行う意味でこのIDが用意されたという経緯があります。
Next.jsのバージョンによってはRSC機能を使っていない場合もあるため、Next.js側で影響を受ける条件やバージョンを整理する目的もCVE-2025-66478には含まれます。Next.jsチームのアドバイザリでは、どのバージョンが脆弱であり、どのバージョンにアップデートすれば良いのかが詳細に説明されており、Next.jsユーザーはこれに従って速やかな対応を取る必要がありました。
重複CVEの扱い:NVDによるCVE-2025-66478の重複認定とその理由
先に触れたとおり、NVD(National Vulnerability Database)ではCVE-2025-66478はReact側のCVE-2025-55182と同一の問題であると判断され、重複として扱われました。このようなケースはオープンソースソフトウェアとそれを利用するプロダクトの関係で時折発生します。つまり「CVE-2025-55182が根本原因であり、Next.jsにおけるCVE-2025-66478はそれによって引き起こされた二次的な影響である」という位置づけです。
重複と認定された理由は、Next.js側で別途コード上の独立した欠陥があったわけではなく、Reactの実装不備がNext.jsに波及しただけだからです。そのため、根本解決策はReact側の修正(RSCプロトコルの改善)に集約され、Next.jsとしてはそれを取り込んだバージョンへのアップデートを促すことになります。NVD上ではCVE-2025-55182が主となり、CVE-2025-66478の情報ページには「これはCVE-2025-55182の重複です」といった注釈が付けられる形となりました。
ただし実務上は、Next.js利用者に通知を行き渡らせるためにCVE-2025-66478の存在は意味があります。多くの開発者はReact本体のCVEよりも、自分たちが直接使っているNext.jsのCVE情報の方に敏感です。その意味で、Next.jsチームが独自CVEを申請・公開したのは適切な対応と言えるでしょう。結果的に二つのCVEが存在する形にはなりましたが、重要なのは「ReactもNext.jsも両方対策が必要」という事実です。
React/Next.js公式アドバイザリから読み解く要点:脆弱性公表内容のまとめ
ReactチームおよびNext.jsチームは、それぞれ公式のセキュリティアドバイザリ(勧告)を公開しています。React側はMeta社のReact公式ブログにて、Next.js側はVercel社のNext.js公式ブログにて詳細が説明されました。両者に共通する要点として、次の点が挙げられます。
- 脆弱性の概要: React Server Componentsのプロトコル処理にRCE可能な欠陥があり、認証なしで攻撃が成立する。
- 影響範囲: RSCをサポートするReactの関連パッケージ(特定バージョンの
react-server-dom-*系)およびNext.jsのApp Router採用バージョンが主な影響対象。 - 深刻度: CVSS 10.0のCriticalに相当し、即座の対応が必要。
- 対応策: Reactは問題を修正したパッチ版(各メジャーにおける最新パッチ)をリリース済み。Next.jsも各メジャーバージョン向けの修正アップデートを公開済み。
- アップデート手順: 該当パッケージをそれぞれ最新版へ
npm installで更新すること。また、Next.jsの古いカナリア版を使っている場合は安定版にダウングレードするよう指示。 - 一時的措置: アプリケーションコード側で無効化できる設定項目はなく、アップデート以外に根本解決策は無い。ただし一部ホスティングやWAFで暫定的な攻撃遮断ルールが敷かれている。
以上が公式アドバイザリから読み取れる重要ポイントです。これらを踏まえて、次章以降で具体的な影響バージョンや対策手順、技術的な原因分析などに触れていきます。
どのバージョンのReact・Next.jsが影響を受けるのか?脆弱性の対象バージョン一覧と対応状況を確認
続いて、この脆弱性によって影響を受けるバージョンについて確認しましょう。React本体および関連パッケージ、そしてNext.jsについて、どのリリースが脆弱であり、どのリリースで修正が適用されたのかを知ることが重要です。バージョンによっては脆弱性の影響を受けないケースもありますので、該当するかどうかを把握して適切な対応を取る必要があります。
React本体の影響範囲:脆弱性が発生するReactバージョン(RSC対応状況)
React本体と言っても、今回の脆弱性はReactのコア部分ではなくReact Server Components(RSC)用のパッケージ群に存在しました。具体的には以下のパッケージとバージョンが脆弱でした。
react-server-dom-webpackバージョン19.0、19.1.0、19.1.1、19.2.0react-server-dom-turbopackバージョン19.0、19.1.0、19.1.1、19.2.0react-server-dom-parcelバージョン19.0、19.1.0、19.1.1、19.2.0
上記はいずれもReact 19系で導入されたRSC関連モジュールです。まとめるとReact 19.0〜19.2.0までのRSCパッケージに脆弱性があったことになります。したがって、React 19系を利用しておりRSC機能が有効になっているプロジェクトは、基本的にこの脆弱性の影響下にあったと言えます。
一方、React 18以前のみを使用している場合は、そもそもRSC機能自体が存在しないため今回の問題の影響は受けません。またReact 19系であっても、RSCを無効化して完全に使っていない状態であれば理論上は影響を受けにくいですが、Reactの内部に脆弱なコードが含まれている事実は変わらないため、将来的な安全性を考えるとアップデートが推奨されます。
Next.jsの影響範囲:脆弱性の影響を受けるNext.jsのバージョン一覧
Next.jsについては、RSCを利用するApp Routerを導入したバージョンが影響を受けました。具体的にはNext.jsの14系後半のカナリア版からRSCが試験導入され、15系および16系の安定版で本格導入されました。Next.js公式の発表によれば、以下のバージョンが脆弱性の影響下にあります。
- Next.js 15.x (15.0.0~15.0.4、15.1.0~15.1.8、15.2.0~15.2.5、15.3.0~15.3.5、15.4.0~15.4.7、15.5.0~15.5.6)
- Next.js 16.x (16.0.0~16.0.6)
- Next.js 14.3.0-canary.77 以降のカナリアリリース(14系の開発版の一部)
要するに、Next.js 15系および16.0.6までの16系が該当し、さらに14系のごく一部(App Routerの試験版が含まれた後期カナリア版)も含まれます。逆に言えば、Next.js 13系以前や14系安定版(14.0~14.2および14.3の正式版)は今回の脆弱性の影響を受けません。Next.js 13までは旧来のPages Routerが中心でRSC非対応、14系も安定版ではRSCはまだ実験的機能に留まっていたため安全だったとされています。
影響を受けないバージョン:React 18系やNext.js 13/14など非対応環境の安全性
上記の通り、React 18以前の環境ではRSCがないため脆弱性の心配はありません。またNext.js 13系以前(従来のPages Routerを使用している場合)や、Next.js 14系の安定版を使っているプロジェクトも、RSCを使っていなければ安全です。特にNext.js 13系ではApp Routerがオプトインの実験段階だったので、多くのプロジェクトは旧方式のPages Routerを使っており、この場合RSCに関連するコードは動作しません。
ただし注意点として、React 18やNext.js 13だからといって絶対安全というわけではありません。例えば、React 18環境でも将来的にReact 19へアップグレードする可能性があるなら、開発中に今回のような問題への対処計画を考えておく必要があるでしょう。またNext.js 13でも、もしApp Router機能を有効化して実験的に使っていた場合には脆弱となる可能性があります。自分のプロジェクトが本当にRSC非対応であるか、設定や依存パッケージを確認することが大切です。
App RouterとPages Routerの違い:Next.jsでApp Router利用時のみ脆弱性の対象となる理由
Next.jsにはルーティングの方法として従来のPages Routerと、新しいApp Routerの二種類があります。今回問題となったRSCはApp Routerに深く関与しています。App RouterではReact 18+の新機能(Server ComponentsやServer Actions等)を活かす構成となっており、ページ内で