Доказательство концепции для CVE-2025-55182 ("React2Shell"). Полностью докеризованная среда, демонстрирующая удаленное выполнение кода (RCE) через небезопасную десериализацию в React Server Components. Включает уязвимые цели как для Vanilla React (Express), так и для Next.js, а также пользовательский скрипт эксплойта на Python.
⚠️ ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ Этот репозиторий содержит функциональный эксплойт для критической уязвимости (CVSS 10.0). Он предназначен строго для академических исследований, анализа безопасности и образовательных целей. Не используйте этот код против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения. Автор не несет ответственности за любое неправомерное использование.
Этот проект документирует и демонстрирует CVE-2025-55182, критическую уязвимость удаленного выполнения кода (RCE), находящуюся в архитектуре React Server Components (RSC). Часто называемая "React2Shell", эта ошибка позволяет неаутентифицированным удаленным злоумышленникам выполнять произвольный код на сервере путем манипуляции протоколом сериализации "Flight", используемым react-server.
Эта лаборатория предоставляет контролируемую изолированную среду Docker для анализа уязвимости в двух различных сценариях:
react-server-dom-webpack и Express.Среда оркестрируется с помощью Docker Compose и состоит из трех изолированных контейнеров, соединенных частной внутренней сетью (research-net).
| Сервис | Контекст | Описание | Уязвимый компонент |
|---|---|---|---|
vanilla-target | vanilla-rsc/ | Минимальный Express-сервер, вручную реализующий протокол RSC. | [email protected] |
nextjs-target | nextjs-app/ | Стандартное приложение Next.js, использующее App Router. | [email protected] (реализует react-server) |
attacker | exploit/ | Среда Python, содержащая скрипты эксплойта. | Н/Д |
Уязвимость проистекает из небезопасной десериализации (CWE-502) в парсере протокола Flight. Внедряя специально сформированную multipart-нагрузку, содержащую "поддельную" структуру чанка, злоумышленник может:
.then объекта, похожего на promise.$B).Function(), чтобы скомпилировать и выполнить произвольный JavaScript (например, child_process.execSync).Клонируйте репозиторий:
git clone https://github.com/trax69/cve-2025-55182-poc.git
cd cve-2025-55182-poc
Соберите и запустите лабораторию:
docker-compose up -d --build
Дождитесь полной инициализации контейнеров. Контейнер Next.js может занять несколько минут для завершения первой сборки.
Логика эксплуатации заключена в exploit/exploit.py. Вы можете запускать атаки с вашей хост-машины (если установлен Python) или непосредственно из контейнера attacker.
Получите доступ к оболочке атакующего:
docker-compose exec attacker bash
Установите зависимости:
pip install -r requirements.txt
Атака на цель A (Vanilla React):
python exploit.py http://vanilla-target:4000/rsc vanilla
Атака на цель B (Next.js):
python exploit.py http://nextjs-target:3000/ nextjs
Эксплойт пытается создать файл с именем pwned.txt в каталоге /tmp сервера-жертвы. Для проверки успеха:
# Check Vanilla Server
docker-compose exec vanilla-target ls -la /tmp/pwned.txt
# Check Next.js Server
docker-compose exec nextjs-target ls -la /tmp/pwned.txt
В случае успеха вы увидите список файлов. Если эксплойт не сработает, файл не будет существовать.
Для устранения этой уязвимости в производственных средах:
react-server-dom-webpack (и связанные пакеты) до версии 19.0.1, 19.1.2 или 19.2.1+."$1:__proto__" или необычное использование "$@" в multipart-телах.Университетский проект - Аудит безопасности и исследование уязвимостей