Лаборатория CVE-2025-55182 — RCE в React Server Components

Учебная лаборатория, демонстрирующая CVE-2025-55182 — критическую (CVSS 10.0) уязвимость удалённого выполнения кода в React Server Components, вызванную загрязнением прототипа в десериализаторе протокола Flight.
Отказ от ответственности: Этот репозиторий предназначен только для образовательных целей и санкционированных исследований в области безопасности. Несанкционированный доступ к компьютерным системам противозаконен. Автор не несёт ответственности за неправомерное использование этого материала. Используйте его только в отношении систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Используя этот код, вы соглашаетесь, что несёте ответственность за свои действия.
Быстрый старт
# 1. Clone
git clone https://github.com/Jeanback1/react-rsc-cve-2025-55182-lab.git
cd react-rsc-cve-2025-55182-lab
# 2. Start the lab (vulnerable + patched instances)
docker compose up -d
# Wait ~2 minutes for both containers to build and start.
# 3. Exploit the vulnerable instance
python exploit/exploit.py http://localhost:3011 id
# 4. Try the same against the patched instance — it fails
python exploit/exploit.py http://localhost:3012 id
Архитектура лаборатории
docker compose
┌────────────────────────────────┐
│ │
attacker ────▶│ :3011 → rsc-lab-vulnerable │ React 19.2.0
│ (Server Action) │ ← exploitable
│ │
│ :3012 → rsc-lab-patched │ React 19.2.1
│ (no Server Action) │ ← patched
└────────────────────────────────┘
Требования
- Docker + Docker Compose v2
- Python 3.8+ с
requests (pip install requests)
Файлы
├── docker-compose.yml # Lab orchestration
├── README.md # This file
├── LICENSE
│
├── vulnerable/ # Vulnerable Next.js app
│ ├── Dockerfile
│ ├── package.json # [email protected], [email protected]
│ └── app/
│ ├── layout.tsx
│ ├── page.tsx # Server Component + Server Action
│ └── actions.ts # 'use server' — the attack surface
│
├── patched/ # Patched Next.js app
│ ├── Dockerfile
│ ├── package.json # [email protected], [email protected]
│ └── app/
│ ├── layout.tsx
│ └── page.tsx # Server Component only (no Server Actions)
│
├── exploit/
│ ├── exploit.py # Educational RCE exploit (well-commented)
│ ├── requirements.txt
│ └── pyproject.toml
│
└── docs/
└── CVE-2025-55182.md # Full technical analysis
Использование эксплойта
# Single command execution
python exploit/exploit.py <target> <command>
# Examples
python exploit/exploit.py http://localhost:3011 id
python exploit/exploit.py http://localhost:3011 "cat /etc/passwd"
python exploit/exploit.py http://localhost:3011 "ls -la /app"
Эксплойт работает в три этапа:
- Сборка Flight-полезной нагрузки с обходом через
__proto__ → загрязнение Object.prototype.then
- Отправка полезной нагрузки как
multipart/form-data через конечную точку Server Action
- Извлечение вывода команды из заголовка ответа
X-Action-Redirect (в кодировке base64)
Затронутые версии
| Пакет | Уязвимая | Исправленная |
|---|
react | ≤ 19.2.0 | ≥ 19.2.1 |
react-dom |
Технический разбор
Полное руководство см. в docs/CVE-2025-55182.md:
- Как работает протокол Flight
- Почему обход через
__proto__ опасен
- Пошаговая цепочка эксплуатации
- Стратегии обнаружения и смягчения последствий
Ссылки