
Сканер для обнаружения наличия CVE-2025-55182 & CVE-2025-66478 на целевых веб-сервисах.
# Сканер уязвимости React2Shell
Безопасный, неинвазивный сканер для обнаружения уязвимостей React Server Components (RSC) и удаленного выполнения кода в Next.js (CVE-2025-55182 и CVE-2025-66478).
## Обзор
Этот сканер помогает организациям определить, уязвимы ли их веб-сервисы для уязвимости React2Shell, которая затрагивает приложения, использующие React Server Components и Next.js. Уязвимость позволяет злоумышленникам выполнять удаленный код через специально сформированные multipart/form-data данные.
**Важно: Этот сканер использует только безопасные методы обнаружения по побочным каналам и не выполняет код на целевых системах.**
## Возможности
- **Безопасный метод обнаружения**
- Обнаружение по побочным каналам с использованием поврежденных полезных нагрузок
- Обнаруживает уязвимый парсинг RSC без выполнения кода
- Безопасно для тестирования живых систем
- **Гибкие возможности сканирования**
- Одиночный URL или массовое сканирование из файла
- Многопоточное параллельное сканирование
- Тестирование пользовательских путей (например, `/_next`, `/api`)
- Поддержка пользовательских заголовков
- **Параметры вывода**
- Цветной вывод в терминал
- Экспорт в JSON для уязвимых хостов
- Подробный режим для детального анализа
- Тихий режим для автоматизации
## Установка
### Требования
- Python 3.9 или выше
- Менеджер пакетов pip
### Установка зависимостей
```bash
pip install -r requirements.txt
```
Или установите вручную:
```bash
pip install requests tqdm urllib3
```
## Использование
### Базовое сканирование
**Сканирование одного URL:**
```bash
python scanner.py -u https://example.com
```
**Сканирование нескольких хостов из файла:**
```bash
python scanner.py -l hosts.txt
```
### Расширенные опции
**Сканирование с пользовательскими путями:**
```bash
python scanner.py -u https://example.com --path /_next --path /api
```
**Сканирование с путями из файла:**
```bash
python scanner.py -u https://example.com --path-file paths.txt
```
**Пользовательские заголовки:**
```bash
python scanner.py -u https://example.com -H "Authorization: Bearer token" -H "X-Custom: value"
```
**Многопоточное сканирование:**
```bash
python scanner.py -l hosts.txt -t 20
```
**Экспорт результатов в JSON:**
```bash
python scanner.py -l hosts.txt -o results.json
```
**Экспорт всех результатов (включая не уязвимые):**
```bash
python scanner.py -l hosts.txt -o results.json --all-results
```
### Управление выводом
**Подробный режим (показывать детали для всех хостов):**
```bash
python scanner.py -l hosts.txt -v
```
**Тихий режим (показывать только уязвимые хосты):**
```bash
python scanner.py -l hosts.txt -q
```
**Отключить цвета:**
```bash
python scanner.py -l hosts.txt --no-color
```
## Форматы входных файлов
### Файл хостов (hosts.txt)
Один хост на строку. Строки, начинающиеся с `#`, игнорируются.
```
https://example.com
http://test.example.org
another-site.com
# This is a comment
```
### Файл путей (paths.txt)
Один путь на строку. Пути будут автоматически дополнены префиксом `/`, если он отсутствует.
```
/_next
/api
/actions
# Comment lines are ignored
```
## Параметры командной строки
| Опция | Описание |
|--------|-------------|
| `-u, --url URL` | Одиночный URL для сканирования |
| `-l, --list FILE` | Файл со списком хостов для сканирования |
| `-t, --threads N` | Количество параллельных потоков (по умолчанию: 10) |
| `--timeout N` | Тайм-аут запроса в секундах (по умолчанию: 10) |
| `-o, --output FILE` | Выходной файл для результатов (формат JSON) |
| `--all-results` | Сохранять все результаты, а не только уязвимые хосты |
| `-k, --insecure` | Отключить проверку SSL-сертификатов |
| `-H, --header HEADER` | Пользовательский заголовок (можно использовать несколько раз) |
| `-v, --verbose` | Подробный вывод (показывать детали для всех хостов) |
| `-q, --quiet` | Тихий режим (показывать только уязвимые хосты) |
| `--no-color` | Отключить цветной вывод |
| `--path PATH` | Пользовательский путь для тестирования (можно использовать несколько раз) |
| `--path-file FILE` | Файл со списком путей для тестирования |
## Логика обнаружения
### Безопасное обнаружение по побочным каналам
Сканер использует неинвазивный метод обнаружения, который:
- Отправляет специально сформированную, не вредоносную полезную нагрузку multipart/form-data
- Вызывает ответы с ошибками при парсинге уязвимых RSC (React Server Components)
- Ищет несколько индикаторов уязвимости:
#### Шаблоны обнаружения
1. **Сообщения об ошибках JavaScript**
- `SyntaxError` — Указывает на неправильный парсинг JSON данных формы
- `Unexpected token` — Указывает на уязвимую десериализацию RSC
- `ReferenceError` / `TypeError` — Раскрывает небезопасный доступ к свойствам объекта
2. **Специфичные для RSC ответы с ошибками**
- Код состояния HTTP 500 с типом содержимого `text/x-component`
- Присутствие заголовков RSC (`Vary: RSC`, `Next-Router-State-Tree`)
- Дайджест ошибки в теле ответа (например, `{"digest":"..."}`)
- Индикаторы полезной нагрузки RSC (`$@`, объекты ошибок)
Сканер обнаруживает как подробные сообщения об ошибках (старые версии), так и структурированные ответы с ошибками RSC (новые версии), обеспечивая всестороннее покрытие различных реализаций Next.js.
**Важно:** Этот метод НЕ выполняет код на целевой системе. Он только определяет, уязвима ли система, путем наблюдения за ответами с ошибками.
## Примеры рабочих процессов
### Быстрая проверка одного приложения
```bash
python scanner.py -u https://myapp.com
```
### Комплексное сканирование организации
```bash
# Create hosts file with all your domains
python scanner.py -l organization-hosts.txt -t 20 -o scan-results.json
```
### Сканирование нескольких путей
```bash
# Create paths.txt with common Next.js endpoints
python scanner.py -l hosts.txt --path-file paths.txt -o results.json
```
### Сканирование с заголовками аутентификации
```bash
python scanner.py -u https://myapp.com -H "Cookie: session=abc123" -H "Authorization: Bearer token"
```
## Интерпретация результатов
### Статус уязвимости
Сканер пометит хост как **УЯЗВИМЫЙ**, если обнаружит:
- Ошибки синтаксиса, указывающие на уязвимый парсинг RSC
- Ошибки неожиданного токена при обработке данных формы
- Ошибки ссылок или типов, раскрывающие небезопасный доступ к свойствам
- Ошибки HTTP 500 с заголовками и содержимым, специфичными для RSC
- Дайджесты ошибок в формате ответа RSC
- Характерные шаблоны ошибок из уязвимых реализаций Next.js/RSC
### Что означает «Уязвимый»?
Когда сканер обнаруживает уязвимость, это означает:
1. **Сервер обрабатывает поврежденные полезные нагрузки RSC** — Он принимает и пытается парсить специально сформированные данные формы как React Server Components
2. **Неправильная проверка входных данных** — Приложение не проверяет должным образом multipart/form-data данные перед обработкой
3. **Потенциал для RCE** — В уязвимых конфигурациях злоумышленники могут использовать это для удаленного выполнения кода
4. **Векторы загрязнения прототипа** — Слабость парсинга может быть использована для атак загрязнения прототипа
### Уровень риска
- **КРИТИЧЕСКИЙ**: Серверы, показывающие ответы с ошибками RSC, активно обрабатывают вредоносные полезные нагрузки
- **Воздействие**: Удаленное выполнение кода, кража данных, компрометация сервера
- **Эксплуатируемость**: Существуют публично известные эксплойты
### Коды выхода
- `0`: Уязвимостей не найдено
- `1`: Обнаружена одна или несколько уязвимостей
## Соображения безопасности
1. **Разрешение**: Сканируйте только те системы, которые вам принадлежат, или на тестирование которых у вас есть явное разрешение
2. **Безопасное обнаружение**: Этот сканер использует только безопасное обнаружение по побочным каналам и никогда не выполняет код
3. **Ограничение скорости**: Настройте количество потоков (`-t`), чтобы избежать перегрузки целей
4. **Проверка SSL**: Оставляйте проверку SSL включенной, если это не необходимо для тестирования
5. **Безопасно для продакшена**: Сканер предназначен для безопасного использования на производственных системах
## Меры по смягчению
Если ваше приложение признано уязвимым:
1. **Немедленные действия:**
- Обновите Next.js до последней исправленной версии
- Проверьте и обновите все React Server Components
- Внедрите проверку входных данных для данных формы
2. **Долгосрочная безопасность:**
- Включите правила WAF для блокировки подозрительных multipart-полезных нагрузок
- Отслеживайте необычные запросы к серверным действиям
- Реализуйте заголовки безопасности
- Регулярные аудиты безопасности
3. **Ссылки:**
- [CVE-2025-55182](https://nvd.nist.gov/vuln/detail/CVE-2025-55182)
- [CVE-2025-66478](https://nvd.nist.gov/vuln/detail/CVE-2025-66478)
## Отказ от ответственности
Этот инструмент предназначен только для авторизованного тестирования безопасности. Несанкционированный доступ к компьютерным системам является незаконным. Авторы не несут ответственности за неправильное использование или ущерб, причиненный этой программой.