React2Shellの検知:React Server ComponentsとNext.jsに影響する最大深刻度のRCE脆弱性

Sysdig Threat Research Team

Detecting React2Shell: The maximum-severity RCE vulnerability affecting React Server Components and Next.js

Sysdig脅威リサーチチーム

Detecting React2Shell: The maximum-severity RCE vulnerability affecting React Server Components and Next.js

Detecting React2Shell: The maximum-severity RCE vulnerability affecting React Server Components and Next.js

2025年12月3日、ReactチームはReact Server Components(RSC)における重大な未認証リモートコード実行(RCE)脆弱性であるCVE-2025-55182を公表しました。「React2Shell」と名付けられたこの最大深刻度の欠陥(CVSS 10.0)は、細工された単一のHTTPリクエストにより、潜在的に悪意のあるコード実行を可能にします。React2Shellの影響を下流で受け得るNext.jsは、露出状況を追跡するためにCVE-2025-66478を割り当てています。

脅威アクターにとって、React2Shellは悪用により任意のサーバーサイドコード実行を可能にし、データ窃取、ラテラルムーブメント、マルウェア展開などへの道を開きます。本稿執筆時点で、公開の概念実証(PoC)エクスプロイトがリリースされています。研究者は、デフォルト構成に対しておおむね100%の悪用成功率を報告しており、React2Shellは大規模に悪用される可能性が非常に高い状況です。

詳細な分析を踏まえ、Sysdig Threat Research Team(TRT)はReact2Shell向けのFalco検知ルールを開発し、現在はSysdig Secure内で直接利用できます。Sysdig TRTは、Server Componentsを使用するReact 19を運用しているすべての組織に対し、直ちに対応することを推奨します。以下では、修正のための具体的な手順に加え、脆弱性の技術的分析と悪用時の影響について解説します。

React2Shellの技術的分析

脆弱性の詳細

CVE-2025-55182は、RSCの「Flight」プロトコル、具体的には react-serverがServer Functionエンドポイント向けのHTTPリクエストを処理する方法に存在します。このデシリアライズの欠陥により、細工されたペイロードを処理する際に、攻撃者が制御するデータがサーバーサイドの実行に影響を与え得ます。

React Server Functionsは、クライアントがサーバー関数を呼び出せるようにし、Reactはフレームワーク向けの統合ポイントを提供します。脆弱なコードはHTTPペイロードを安全でない形でデシリアライズし、未認証RCEを可能にします。

影響を受けるパッケージ(バージョン 19.0.0、19.1.0、19.1.1、19.2.0):

  • react-server-dom-parcel
  • react-server-dom-turbopack
  • react-server-dom-webpack

明示的なServer Functionエンドポイントがなくてもアプリケーションは脆弱です。この欠陥は、RSCがサポートされるあらゆる場所で悪用可能です。

React2Shellの影響を受けるフレームワーク

  • Next.js(15.0.4〜16.0.6、ならびに14.3.0-canary.77以降のcanary)
  • React Router(RSCモード)
  • Waku
  • Parcel RSC(@parcel/rsc
  • Vite RSC(@vitejs/plugin-rsc
  • RedwoodSDK(rwsdk

標準のcreate-next-appの本番ビルドは、変更なしでも脆弱です。デフォルト構成はそのままで悪用可能です。

攻撃者ができること

未認証アクセス、リモートからの悪用可能性、そしてReactの普及度が相まって、最大深刻度のCVSSスコアが示すとおり極めて高いリスクを生みます。コード実行を達成した後、攻撃者は次のことが可能になります:

  • データの持ち出し:シークレット、認証情報、ユーザー情報へのアクセスによる。
  • 永続化:バックドアやWebシェルの展開による。
  • ラテラルムーブメント:内部システムへのピボットによる。
  • ランサムウェアの展開:恐喝のためのデータ暗号化による。

大規模に導入されているフレームワークにおける未認証RCEは、重大な悪用ポテンシャルを示唆します。この種のエクスプロイトは容易に自動化でき、脆弱なサーバーを求めてインターネット全体をスキャンできます。

検知と緩和

ランタイム検知

Sysdig TRTは「Suspicious Command Executed by Web Server(Webサーバーによって実行された不審なコマンド)」ルールを強化しました。この検知は、Webサーバーが生成する予期しない任意コマンドの大半を捕捉し、そのようなアプリケーションにおけるリモートコマンド実行に対してアラートを発します。以下のFalcoルールを使用して不審なコマンドを検知できます。(なお、「proc.aname」フィールドは環境に合わせて調整が必要な場合があります。追加のコマンドはminimal_unix_commandsマクロにも追加できます。)

- list: minimal_unix_commands
items: [ls, cp, mv, rm, mkdir, rmdir, find, touch, cat, less, head, tail, nano, vi, chmod … ]

- list: shell_binaries
items: [ash, bash, csh, ksh, sh, tcsh, zsh, dash]
	
- macro: spawned_process
condition: (evt.type in (execve, execveat) and evt.dir=< and evt.arg.res=0)

- rule: Detecting React2Shell Remote Code Execution
desc: This rule detects exploitation attempts of the React2shell vulnerability. Leveraging it, attackers can execute arbitrary commands in React applications. 
condition: >
    ( spawned_process and 
    proc.name in (minimal_unix_commands) and 
    proc.pname in (shell_binaries) and 
    ( proc.aname startswith 'next-server' or proc.aname startswith 'react-router' or proc.aname in (waku,vite))
    )
output: Possible React2shell exploitation attempts detected with %proc.cmdline and parent name %proc.pname in %container.name under user %user.name (proc.name=%proc.name proc.exepath=%proc.exepath proc.pname=%proc.pname gparent=%proc.aname[2] ggparent=%proc.aname[3] gggparent=%proc.aname[4] user.name=%user.name image=%container.image.repository proc.cmdline=%proc.cmdline proc.pcmdline=%proc.pcmdline container.id=%container.id evt.type=%evt.type evt.res=%evt.res gcmdline=%proc.acmdline[2] ggcmdline=%proc.acmdline[3] proc.cwd=%proc.cwd proc.pid=%proc.pid proc.cwd=%proc.cwd proc.ppid=%proc.ppid proc.sid=%proc.sid user.uid=%user.uid user.loginuid=%user.loginuid user.loginname=%user.loginname group.gid=%group.gid group.name=%group.name container.name=%container.name)
priority: WARNING
tags: [host, container, network, MITRE, MITRE_TA0002_execution, MITRE_T1059_command_and_scripting_interpreter, MITRE_T1104_multi_stage_channels]

Sysdig Secureのお客様は、このルールをSysdig Runtime Notable Eventsポリシー内で確認できます。この脆弱性が悪用された際に、Reverse Shell DetectedおよびReverse Shell Redirects STDIN/STDOUT Using UNIX Socketなど、他のSysdigルールがトリガーされることも確認されています。より汎用的な防御としては、Suspicious Command by Web Serverが有効です。

WAFによる保護

CVE-2025-55182への対応として、クラウドプロバイダーは潜在的な悪用をブロックするためのWebアプリケーションファイアウォール(WAF)ルールを展開しています:

  • Cloudflareは、POSTリクエストにおける安全でないデシリアライズを検知するルールを展開しました。
  • Google Cloud Armorcve-canaryルールを追加しました。
  • Vercelはプラットフォームレベルの保護を展開しました。
  • Firebase Hosting/App Hostingは、悪用を制限するルールを適用しています。

WAFルールは多層防御を提供しますが、回避される可能性があります。そのため、脆弱な組織は環境を包括的に保護するために、根本原因となるコードへパッチを適用する必要があります。

脆弱性スキャン

GitHub上の多くのPoCは根本原因を誤診したり、React2Shellの悪用可能性を確認できなかったりします。中にはAI生成と思われるものもあり、もっともらしく見える一方で動作しないものがあります。元の研究者は、公開PoCが実際のエクスプロイトとは異なることを確認しています。

ある組織であるAssetnoteは、脆弱なホストとパッチ適用済みホストを判別するスキャナーを公開しました。彼らの解説では、空のオブジェクトに対して["$1:a:a"]を送信し、脆弱なサーバーがE{"digest": ...}を伴う500を返すようにクラッシュさせる仕組みが詳細に述べられています。一方、パッチ適用済みバージョンではこのクラッシュが防止されます。

Sysdig Secureの脆弱性管理は現在、React2Shellの影響を受けるパッケージを特定します。また、Sysdig Secure内のThreat Intelligence Feedも、インベントリに基づいて影響を受けるパッケージを即座に可視化します。

結論

CVE-2025-55182およびCVE-2025-66478は、RSCアプリケーションを未認証RCEにさらします。最大深刻度、デフォルト構成での悪用可能性、そして広範な採用により、緊急性の高いリスクが生じています。

影響を受けるバージョンのReactを運用しているすべての組織は、直ちにパッチを適用すべきです。また、React2Shellの活発な悪用を検知するために、ランタイム脅威検知も展開する必要があります。WAFルールは一時的な緩和策として利用できますが、修正済みバージョンへ更新することでリスクを排除できます。即時のパッチ適用が難しい環境では、チームはランタイム検知を展開すべきです。

翻訳元: https://www.sysdig.com/blog/detecting-react2shell

ソース: sysdig.com