
Неинтрузивный поверхностный сканер для CVE-2025-55182 (React Server Components RCE). Обнаруживает открытые RSC-эндпоинты в приложениях React 19 и Next.js.
Специализированный, неинвазивный детектор поверхности для CVE-2025-55182 (RCE в React Server Components).

Прочтите это перед сканированием:
Хотя CVE-2025-55182 является критической уязвимостью RCE (CVSS 10.0), реальная эксплуатация в производственных средах Next.js условна.
serverManifest для белого списка разрешенных модулей. Прямые попытки загрузить опасные модули (например, child_process) через RSC часто терпят неудачу, поскольку их нет в этом манифесте.serverManifest в памяти и обойти белый список.742 вместо "vm"). Жесткие эксплойты, угадывающие имена, потерпят неудачу (ложноотрицательные результаты).Этот инструмент — детектор поверхности. Он определяет, открыт ли и активен ли протокол RSC. Обнаружение открытой конечной точки — это необходимый первый шаг для выявления поверхности атаки, где можно попытаться выполнить цепочку Prototype Pollution.
Большинство публичных PoC и сканеров дают ложноотрицательные результаты в производственных средах, поскольку попадают в четыре распространенные ловушки:
Жесткость эксплойта: Они пытаются выполнить конкретные гаджеты (например, vm или child_process), которые блокируются белыми списками, или полагаются на жестко заданные идентификаторы (например, "id":"vm"), которые не работают с минифицированными сборками Webpack.
Перенаправления корня: Отправка POST на / в Next.js часто вызывает перенаправление 307/308 (например, на /login), в результате чего тело POST теряется или преобразуется в GET до того, как сервер его обработает.
Несоответствие транспорта: Многие сканеры отправляют полезные нагрузки как text/plain или сырой JSON. Строгие Server Actions Next.js часто требуют инкапсуляции multipart/form-data. Если формат неверный, сервер возвращает 404/200, не запуская уязвимый парсер.
Слепота WAF: Стандартные инструменты видят 403 Forbidden и сдаются. Они не различают глобальную блокировку IP и фильтрацию по конкретному правилу, упуская возможности обхода WAF с помощью кодирования или дополнения.
Этот сканер решает все три проблемы:
✅ Умное зондирование путей: Автоматически зондирует случайные несуществующие пути (например, /x7z9q2), чтобы обойти перенаправления корня (307/308) и заставить App Router Next.js обработать контекст запроса.
✅ Строгий транспорт (Multipart): Использует инкапсуляцию multipart/form-data вместо обычного текста. Это устраняет ложноотрицательные результаты на строгих конечных точках Server Action, которые иначе возвращают 404.
✅ Дифференциальный анализ WAF: Различает глобальные блокировки ([BLOCKED]) и фильтрацию по конкретному правилу ([FILTERED]). Если бэкенд разрешает протокол, но блокирует полезную нагрузку, сканер определяет его как цель высокой ценности.
✅ Режим автообхода: Включает опциональный движок --bypass, который автоматически применяет методы уклонения (Unicode-экранирование, мутация пробелов, мусорное дополнение) для целей со статусом [FILTERED].
✅ Усиленное обнаружение: Выявляет «тихие сбои» ([SUSPICIOUS]) на корпоративных серверах, которые удаляют заголовки X-Powered-By, и определяет отпечаток перенаправления Assetnote 303 See Other.
✅ Активное определение версии: Использует специальную полезную нагрузку (["$1:aa:aa"]) для вызова уникальной ошибки React 19 RSC «Digest», подтверждая активность парсера даже без полного RCE.
Клонируйте репозиторий:
git clone https://github.com/fatguru/CVE-2025-55182-scanner.git
cd CVE-2025-55182-scanner
Установите зависимости (рекомендуется в виртуальном окружении):
pip install -r requirements.txt
Базовое сканирование
Проверьте один URL. Обратите внимание: убедитесь, что вы указываете правильный путь приложения (например, /dashboard, /login), а не просто корневой домен, так как конечные точки App Router Next.js зависят от пути.
python3 cve_2025_55182_scanner.py -u http://localhost:3000/dashboard
Массовое сканирование
Сканируйте список URL из файла (один URL на строку). Это рекомендуемая стратегия, чтобы не пропустить конкретные пути.
python3 cve_2025_55182_scanner.py -l targets.txt -o results.csv
Игнорировать ошибки SSL/TLS сертификатов (полезно для сканирования по IP, локальных лабораторий или самоподписанных сертификатов).
python3 cve_2025_55182_scanner.py -u [https://192.168.1.50](https://192.168.1.50) -k
Новое в v2.1: Используйте флаг --header для передачи сессионных cookie или токенов, если приложение защищено аутентификацией или WAF, требующим определенных заголовков.
python3 cve_2025_55182_scanner.py -u https://target.com --header "Cookie: session=123" --header "Authorization: Bearer xyz"
[EXPOSED] | 🔴 (Красный) | Уязвим
Сервер обработал полезную нагрузку и вернул ошибку React 19 digest ИЛИ перенаправление Action Redirect (303). Высокая уверенность в открытой поверхности.
[BYPASSED] | 🟠 (Оранжевый) | WAF обойден
Успех! Сканер изначально обнаружил фильтр, но успешно обошел его с помощью методов мутации (например, дополнение/Unicode) для запуска уязвимости.
[SUSPICIOUS] | 🟡 (Желтый) | Предупреждение
Сервер аварийно завершил работу (500) при разборе полезной нагрузки. Указывает на открытую логику сериализации, даже на защищенных целях, которые удаляют заголовки X-Powered-By.
[FILTERED] | 🔵 (Синий) | Обнаружено правило WAF
Сервер принимает трафик RSC (безвредная полезная нагрузка прошла), но конкретное правило WAF заблокировало эксплойт. Цель активна за WAF. Используйте --bypass для попытки обхода.
[INFO] | 🔵 (Голубой) | Протокол обнаружен
Сервер говорит на RSC (text/x-component), но корректно обработал полезную нагрузку. Вероятно, исправлено или стандартное поведение.
[BLOCKED] | 🟣 (Пурпурный) | Глобальная блокировка WAF
Все было заблокировано (403/406), включая безвредное рукопожатие. WAF полностью блокирует протокол или ваш IP.
[SAFE] | 🟢 (Зеленый) | Чисто
Сервер вернул 404/200, но проигнорировал заголовки RSC/тела multipart на всех зондированных путях.
Шаблон Nuclei, основанный на этой логике обнаружения, включен в этот репозиторий: cve-2025-55182-detection.yaml.
nuclei -t cve-2025-55182-detection.yaml -l targets.txt
--bypass автоматизирует методы уклонения (пробелы, Unicode, большое дополнение), когда цель определяется как [FILTERED].multipart/form-data для устранения ложноотрицательных результатов на целях, возвращающих 404 на текстовые полезные нагрузки.[FILTERED]: Определяет, когда WAF блокирует только полезную нагрузку эксплойта, но пропускает трафик RSC (цели высокой ценности).[SUSPICIOUS]: Теперь перехватывает сбои на защищенных серверах, которые скрывают заголовки X-Powered-By.[EXPOSED]: Добавлено обнаружение перенаправлений 303 See Other, используемых некоторыми уязвимыми реализациями.text/plain на multipart/form-data. Это устраняет ложноотрицательные результаты на целях, которые строго применяют данные формы для Server Actions и ранее возвращали 404.HTTP 303 See Other и x-action-redirect, которые являются сильными индикаторами обработки RSC, часто скрытыми, когда сканеры автоматически следуют за перенаправлениями.[BLOCKED] (HTTP 403/406), когда WAF перехватывает сигнатуру атаки.--header для пользовательской идентификации трафика, авторизации или внесения в белый список WAF.Этот инструмент предназначен для помощи исследователям безопасности и администраторам в выявлении открытых поверхностей атак в их собственных системах. Автор не несет ответственности за неправомерное использование этого инструмента. Не используйте против систем, на тестирование которых у вас нет явного разрешения.
Ссылки:
- https://nvd.nist.gov/vuln/detail/CVE-2025-55182
- https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182
| Флаг | Описание |
|---|
-u, --url | Единственный целевой URL (например, http://target.com/dashboard). |
-l, --list | Файл со списком URL для сканирования (по одному на строку). |
--bypass | (Новое v2.5) Включить режим обхода WAF. Автоматически применяет методы мутации (Unicode, дополнение, пробелы), если цель определена как [FILTERED]. |
--header | Добавить пользовательские заголовки (например, Cookie: session=xyz, Authorization: Bearer...). Можно использовать несколько раз. |
-o, --output | Сохранить результаты в текстовый файл. |
-k, --insecure | Отключить проверку TLS-сертификата (подавить предупреждения SSL). |
-t, --threads | Количество параллельных потоков для массового сканирования (по умолчанию: 10). |
--timeout | Тайм-аут запроса в секундах (по умолчанию: 10 с для учета полезных нагрузок multipart). |
--verbose | Включить режим отладки. Показывает подробные шаги зондирования, статус блокировки WAF и попытки обхода. |