
CVE-2025-55182(React Server Components RCE)用の非侵入型表面スキャナです。React 19およびNext.jsアプリケーション内の露出したRSCエンドポイントを検出します。
CVE-2025-55182 (React Server Components RCE) 向けの、特殊化された非侵入型サーフェス検出器。

スキャン前にこれを読んでください:
CVE-2025-55182 は重大な RCE 脆弱性 (CVSS 10.0) ですが、Next.js 本番環境における現実世界での悪用は条件付きです。
serverManifest を使用して許可モジュールをホワイトリスト登録します。RSC 経由で危険なモジュール (例: child_process) を直接読み込もうとすると、このマニフェストに含まれていないため失敗することがよくあります。serverManifest を上書きしてホワイトリストを回避する必要があります。"vm" ではなく 742)。名前を推測する硬直的なエクスプロイトは失敗します (偽陰性)。このツールはサーフェス検出器です。 RSC プロトコルが露出され、アクティブであるかどうかを識別します。露出したエンドポイントを見つけることは、プロトタイプ汚染チェーンが試行される可能性のある攻撃サーフェスを特定するための前提条件です。
多くの公開 PoC やスキャナーは、本番環境で以下の4つの一般的な落とし穴に陥るため、偽陰性をもたらします:
エクスプロイトの硬直性: vm や child_process のような特定のガジェットを実行しようとしますが、ホワイトリストでブロックされるか、ハードコードされた ID (例: "id":"vm") に依存しているため、ミニファイされた Webpack ビルドでは失敗します。
ルートリダイレクト: Next.js で POST / を叩くと、多くの場合 307/308 リダイレクト (例: /login へ) が発生し、サーバーが処理する前に POST ボディが失われたり、GET に変換されたりします。
トランスポートの不一致: 多くのスキャナーはペイロードを text/plain または生の JSON として送信します。厳格な Next.js Server Actions は、多くの場合 multipart/form-data のカプセル化を必要とします。形式が間違っていると、脆弱なパーサーがトリガーされることなく、サーバーは 404/200 を返します。
WAF の盲目性: 標準的なツールは 403 Forbidden を見て諦めます。グローバルな IP ブロックと特定のルールフィルターを区別できず、エンコーディングやパディング技術を使用した WAF バイパスの機会を逃します。
このスキャナーは上記3つの課題をすべて解決します:
✅ スマートパスプロービング: ランダムな存在しないパス (例: /x7z9q2) を自動的にプローブし、ルートリダイレクト (307/308) を回避して、Next.js App Router にリクエストコンテキストを強制的に処理させます。
✅ 厳格なトランスポート (Multipart): プレーンテキストではなく multipart/form-data カプセル化を使用します。これにより、厳格な Server Action エンドポイントで 404 を返す偽陰性を解決します。
✅ WAF 差分分析: グローバルブロック ([BLOCKED]) と特定のルールフィルタリング ([FILTERED]) を区別します。バックエンドがプロトコルを許可するがペイロードをブロックする場合、スキャナーはそれを高価値ターゲットとして識別します。
✅ 自動バイパスモード: [FILTERED] ターゲットに対して、回避テクニック (Unicode エスケープ、空白の変形、ジャンクパディング) を自動的に試行するオプションの --bypass エンジンを含みます。
✅ 強化された検出: X-Powered-By ヘッダーを削除するエンタープライズサーバーでの「サイレントクラッシュ」([SUSPICIOUS]) をキャッチし、Assetnote 303 See Other リダイレクトフィンガープリントを特定します。
✅ アクティブなフィンガープリンティング: 専用のペイロード (["$1:aa:aa"]) を使用して、React 19 独自の RSC "Digest" エラーをトリガーし、完全な RCE がなくてもパーサーがアクティブであることを確認します。
リポジトリをクローン:
git clone https://github.com/fatguru/CVE-2025-55182-scanner.git
cd CVE-2025-55182-scanner
依存関係をインストール (仮想環境を推奨):
pip install -r requirements.txt
基本スキャン
単一のURLをチェックします。Next.js App Router のエンドポイントはパス固有であるため、ルートドメインだけでなく、正しいアプリケーションパス (例: /dashboard、/login) を指定してください。
python3 cve_2025_55182_scanner.py -u http://localhost:3000/dashboard
一括スキャン
ファイルから URL のリストをスキャンします (1行に1URL)。特定のパスを見逃さないための推奨戦略です。
python3 cve_2025_55182_scanner.py -l targets.txt -o results.csv
SSL/TLS 証明書エラーを無視します (IP ベースのスキャン、ローカルラボ、自己署名証明書に便利)。
python3 cve_2025_55182_scanner.py -u [https://192.168.1.50](https://192.168.1.50) -k
v2.1 の新機能: --header フラグを使用して、認証や特定のヘッダーを必要とする WAF の背後にあるアプリケーションにセッション Cookie やトークンを渡します。
python3 cve_2025_55182_scanner.py -u https://target.com --header "Cookie: session=123" --header "Authorization: Bearer xyz"
| フラグ | 説明 |
|---|---|
-u, --url | 単一のターゲット URL (例: http://target.com/dashboard)。 |
-l, --list | スキャンする URL のリストを含むファイル (1行に1URL)。 |
--bypass | (v2.5 新機能) WAF 回避モードを有効にします。ターゲットが [FILTERED] として検出された場合、変異テクニック (Unicode、パディング、空白) を自動的に試行します。 |
--header | カスタムヘッダーを追加します (例: Cookie: session=xyz、Authorization: Bearer...)。複数回使用できます。 |
-o, --output | 結果をテキストファイルに保存します。 |
-k, --insecure | TLS 証明書の検証を無効にします (SSL 警告を抑制)。 |
-t, --threads | 一括スキャン時の同時スレッド数 (デフォルト: 10)。 |
--timeout | リクエストのタイムアウト秒数 (デフォルト: 10秒、マルチパートペイロードに対応するため)。 |
--verbose | デバッグモードを有効にします。詳細なプロービング手順、WAF ブロックステータス、バイパス試行を表示します。 |
[EXPOSED] | 🔴 (赤) | 脆弱
サーバーがペイロードを処理し、React 19 のダイジェストエラーまたはアクションリダイレクト (303) を返しました。露出したサーフェスの信頼性が高い。
[BYPASSED] | 🟠 (オレンジ) | WAF 回避済み
成功! スキャナーは最初にフィルターを検出しましたが、変異テクニック (例: パディング/Unicode) を使用して正常に回避し、脆弱性をトリガーしました。
[SUSPICIOUS] | 🟡 (黄) | 警告
サーバーがペイロード解析中にクラッシュしました (500)。X-Powered-By ヘッダーを削除する堅牢なターゲットでも、シリアライゼーションロジックが露出していることを示します。
[FILTERED] | 🔵 (青) | WAF ルール検出
サーバーは RSC トラフィックを受け入れます (良性ペイロードが通過) が、特定の WAF ルールがエクスプロイトペイロードをブロックしました。ターゲットは WAF の背後で生存しています。回避を試みるには --bypass を使用してください。
[INFO] | 🔵 (シアン) | プロトコル検出
サーバーは RSC (text/x-component) を話しますが、ペイロードを正常に処理しました。パッチが適用されているか、標準的な動作の可能性が高い。
[BLOCKED] | 🟣 (マゼンタ) | グローバル WAF ブロック
良性ハンドシェイクを含め、すべてがブロックされました (403/406)。WAF がプロトコル全体またはあなたの IP をブロックしています。
[SAFE] | 🟢 (緑) | クリーン
サーバーは 404/200 を返しましたが、プローブされたすべてのパスで RSC ヘッダー/マルチパートボディを無視しました。
このリポジトリには、この検出ロジックに基づく Nuclei テンプレート (cve-2025-55182-detection.yaml) が含まれています。
nuclei -t cve-2025-55182-detection.yaml -l targets.txt
--bypass フラグにより、ターゲットが [FILTERED] として検出された場合に、回避テクニック (空白、Unicode、大きなパディング) を自動化します。multipart/form-data に切り替えました。X-Powered-By ヘッダーを隠す堅牢なサーバーでのクラッシュをキャッチするようになりました。303 See Other リダイレクトの検出を追加しました。text/plain から multipart/form-data に変更しました。これにより、Server Actions でフォームデータを厳格に強制し、以前は 404 を返していたターゲットでの偽陰性が解決されます。HTTP 303 See Other および x-action-redirect ヘッダーをキャッチするようにロジックを更新しました。これらは、スキャナーが自動的にリダイレクトに従うと隠れてしまう RSC 処理の強力な指標です。このツールは、セキュリティ研究者や管理者が自身のシステムにおける露出した攻撃サーフェスを特定できるようにすることを目的としています。作者はこのツールの誤用について一切の責任を負いません。明示的なテスト許可がないシステムに対して使用しないでください。
参照:
- https://nvd.nist.gov/vuln/detail/CVE-2025-55182
- https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182