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-parcelreact-server-dom-turbopackreact-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 Armorは
cve-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ルールは一時的な緩和策として利用できますが、修正済みバージョンへ更新することでリスクを排除できます。即時のパッチ適用が難しい環境では、チームはランタイム検知を展開すべきです。



