
Лаборатория безопасности исследований для CVE-2025-55183 и CVE-2025-55184 в React Server Components
Комплексная среда тестирования безопасности для уязвимостей CVE-2025-55183 (раскрытие исходного кода) и CVE-2025-55184 (отказ в обслуживании) в React Server Components.
ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ И ИССЛЕДОВАНИЙ БЕЗОПАСНОСТИ
Этот репозиторий содержит намеренно уязвимые приложения и инструменты эксплуатации. Тестируйте только на системах, которые вам принадлежат или на которые вы получили явное письменное разрешение. Несанкционированное тестирование незаконно и неэтично.
Обе уязвимости затрагивают React Server Components версий с 19.0.0 по 19.2.2, раскрыты 11 декабря 2025 года.
| Свойство | Значение |
|---|---|
| Степень опасности | Средняя (CVSS 5.3) |
| Тип | Раскрытие информации |
| Воздействие | Раскрытие исходного кода сервера |
| Аутентификация | Не требуется |
Злоумышленники могут принудительно вызвать раскрытие серверного исходного кода, передавая аргументы серверным действиям и вызывая .toString() на объектах серверных функций. Это раскрывает:
| Свойство | Значение |
|---|---|
| Степень опасности | Высокая (CVSS 7.5) |
| Тип | Отказ в обслуживании |
| Воздействие | Полный простой сервиса |
| Аутентификация | Не требуется |
Специально созданные полезные нагрузки создают бесконечную рекурсию promise, что приводит к зависанию сервера Node.js на неопределенный срок. Результаты:
| Аспект | CVE-2025-55183 | CVE-2025-55184 |
|---|---|---|
| Степень опасности | Средняя | Высокая |
| Тип | Раскрытие информации | Отказ в обслуживании |
| Воздействие | Утечка исходного кода | Сбой сервера |
| Обнаружение | Ответ содержит код | Тайм-аут/зависание сервера |
| Восстановление | Немедленное | Требуется перезагрузка |
TL;DR: Приложение УЯЗВИМО (React 19.0.0), но современные механизмы защиты могут предотвратить реальный сбой в этой демо-среде.
CVE-2025-55184 — это РЕАЛЬНАЯ, КРИТИЧЕСКАЯ уязвимость, затрагивающая React 19.0.0-19.2.2 в производственных средах. Однако успешная демонстрация DoS-сбоя в локальной демонстрации может быть затруднена из-за:
Даже если эксплойт не вызывает сбой демонстрации, вы можете проверить уязвимость с помощью:
cd vulnerable-app
npm list react react-dom
# Вывод показывает:
[email protected] ← УЯЗВИМАЯ ВЕРСИЯ
[email protected] ← УЯЗВИМАЯ ВЕРСИЯ
Если вы видите 19.0.0 - 19.2.2, приложение УЯЗВИМО.
cd scanner
python scan.py http://localhost:3000
Сканер проверяет:
git clone https://github.com/StealthMoud/react-server-cve-lab.git
cd react-server-cve-lab
# Запуск приложения (уязвимого к обоим CVE)
docker-compose up --build -d
# Приложение доступно по адресу: http://localhost:3000
cd scanner
# Установка зависимостей
pip install -r requirements.txt
# Сканирование на обе уязвимости
python scan.py http://localhost:3000
# Сканирование только CVE-2025-55183
python scan.py --cve 55183 http://localhost:3000
# Сканирование только CVE-2025-55184
python scan.py --cve 55184 http://localhost:3000
# Сканирование нескольких целей
python scan.py --file targets.txt
react-server-cve-lab/
├── README.md # Этот файл
├── DOCUMENTATION.md # Полная техническая документация
├── LICENSE
├── .gitignore
├── docker-compose.yml
│
├── vulnerable-app/ # Уязвимо к ОБОИМ CVE
│ ├── Dockerfile
│ ├── package.json
│ ├── next.config.js
│ └── app/
│ ├── layout.js
│ ├── page.js
│ └── actions.js # Уязвимые серверные действия
│
├── scanner/
│ ├── requirements.txt
│ ├── scan.py # Сканер для обоих CVE
│ └── README.md
│
└── exploits/
├── exploit-55183.py # PoC для CVE-2025-55183
├── exploit-55184.py # PoC для CVE-2025-55184
└── README.md
Приложение представляет собой Next.js приложение, работающее на React 19.0.0 с Server Actions, уязвимое к обоим CVE.
# Использование Docker Compose (рекомендуется)
docker-compose up --build -d
# Проверка, запущено ли
curl http://localhost:3000
# Просмотр логов
docker-compose logs -f
# Остановка приложения
docker-compose down
cd vulnerable-app
npm install
npm run build
npm start
Единый сканер обнаруживает как CVE-2025-55183, так и CVE-2025-55184.
cd scanner
# Сканирование на оба CVE
python scan.py http://localhost:3000
# Сканирование только конкретного CVE
python scan.py --cve 55183 http://localhost:3000
python scan.py --cve 55184 http://localhost:3000
# Подробный вывод
python scan.py --verbose http://localhost:3000
# Пользовательский тайм-аут
python scan.py --timeout 10 http://example.com
# Сканирование нескольких URL из файла
python scan.py --file targets.txt