Server Actionsを使用するNext.jsアプリケーションに影響を与える重大なリモートコード実行(RCE)脆弱性であるReact2Shell(CVE-2025-55182)の概念実証(PoC)スクリプトです。
[!WARNING] 免責事項: このツールは教育目的および許可されたテスト目的のみで使用してください。誤用に関する責任は負いません。
このスクリプトは、React Server Componentsの「Flight」プロトコルにおける安全でない逆シリアル化の脆弱性を悪用します。これにより、認証されていない攻撃者がサーバー上で任意のJavaScriptコードを実行でき、部分的なリモートコード実行(RCE)につながります。
require(global.requireまたはモジュールコンストラクター経由)を検出する互換性チェックを使用し、最新のNode.jsバージョン(v14+)でも動作することを保証します。pip install -r requirements.txt
python3 react2shell.py -u <TARGET_URL> [-c <COMMAND>]
| 引数 | 説明 | デフォルト |
|---|---|---|
-u, --url | 必須。ターゲットURL(例:http://localhost:3000/)。 | N/A |
-c, --cmd | 任意。サーバー上で実行するコマンド。 | id |
ユーザーIDを確認:
python3 react2shell.py -u http://127.0.0.1:3000/
ディレクトリの内容を一覧表示:
python3 react2shell.py -u http://127.0.0.1:3000/ -c "ls -la"
機密ファイルを読み取る:
python3 react2shell.py -u http://127.0.0.1:3000/ -c "cat /etc/passwd"
このエクスプロイトは、React Server Components(RSC)を処理するNext.js Server Actions内のプロトタイプ汚染と安全でない逆シリアル化のチェーンを利用します。
Next-Actionヘッダーが、サーバーにServer Actionの処理を指示します。thenプロパティ("$1:__proto__:then")を注入します。これにより、サーバーの非同期リクエストハンドラーは、ペイロードを「Thenable」(Promiseのようなオブジェクト)として扱うよう騙されます。_responseオブジェクトを処理します。_prefixフィールドは通常、内部ストリームバッファリングに使用されますが、これを操作することで、生のJavaScriptを注入できます。require関数がグローバルスコープから削除されていることがよくあります。このスクリプトは、process.mainModuleのプロトタイプチェーンをたどることでこれを回避します:
var require = global.require || global.process.mainModule.constructor._load;
child_processをインポートしてシステムコマンドを実行できるようになります。execSync)、その出力はErrorオブジェクトとしてスローされます。このエラーはシリアライズされてHTTPレスポンスボディでクライアントに返されるため、コマンドの出力を確認できます。このツールはGemini 3 Proの支援を受けて開発されました。