
Намеренно уязвимая лаборатория Docker на Next.js RSC для локального тестирования CVE-2025-55182 (React2Shell)
Локальный Docker-лаборатория для авторизованных исследований безопасности: React Server Components / Next.js App Router со стеком в уязвимом диапазоне CVE-2025-55182 (React2Shell).
Используйте только на своей собственной машине. Не выставляйте этот контейнер в интернет.
| Компонент | Версия | Примечание |
|---|
| Next.js | 15.1.0 | До патча; npm предупреждает об известных проблемах |
| React / react-dom | 19.2.0 | В уязвимой линейке 19.x для данного CVE |
| Конвейер RSC | Встроен в Next | Десериализация осуществляется через скомпилированный react-server-dom-* от Next |
Приложение представляет собой минимальную страницу App Router с одним Server Action, так что POST / с заголовком Next-Action ведёт себя как настоящая цель.
git clone https://github.com/l0lsec/cve-2025-55182-lab.git
cd cve-2025-55182-lab
# Сборка и запуск в фоне
docker compose up --build -d
Откройте http://localhost:3000 — вы должны увидеть «RSC lab (intentionally vulnerable)» и небольшую форму.
curl -sS -o /dev/null -w "%{http_code}\n" http://127.0.0.1:3000/
# ожидается: 200
docker compose logs -f
docker compose down
http://localhost:3000 (или пробросьте через Burp).POST / с Content-Type: multipart/form-data и вашим эксплойт-телом по протоколу Flight (multipart-поля 0, 1, 2, как в публичных статьях / ваших шаблонах).Next-Action
Next-Action из этого запроса, илиПримерная форма заголовка:
Next-Action: <action-id-from-intercepted-request>
Если универсальный плейсхолдер не работает, всегда предпочитайте актуальный идентификатор из истории Proxy после одной легитимной отправки.
Готовые к вставке POST / multipart-шаблоны находятся в burp-payloads/ (например, id, whoami, sleep по времени, OOB-плейсхолдеры). Смотрите burp-payloads/README.md для списка файлов. Замените YOUR-COLLABORATOR-HOST в OOB-шаблонах перед отправкой.
.
├── Dockerfile # Многоступенчатая сборка, Next standalone, порт 3000
├── docker-compose.yml # Маппинг хоста 3000 → контейнер 3000
├── burp-payloads/ # Сырые *.http для Burp Repeater + индексный README
├── app/
│ ├── layout.tsx
│ └── page.tsx # Server Action + интерфейс лаборатории
├── public/
├── package.json
├── package-lock.json
└── next.config.ts # output: "standalone"
npm install
npm run dev
# http://localhost:3000
Для воспроизведения CVE предпочтительнее использовать Docker-образ, чтобы стек соответствовал зафиксированным уязвимым зависимостям.
Только для образовательных / лабораторных целей. Вы несёте ответственность за соблюдение законов и политик в месте вашей деятельности. Без каких-либо гарантий.