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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-55182-React2Shell-Async-Scanner — Асинхронный RCE-сканер для CVE-2025-55182 / CVE-2025-66478 — prototype pollution → выполнение кода через React Server Actions. | Kitploit
Инструменты/GitHubGitHub/inferiorak/cve-2025-55182-react2shell-async-scanner
РазведкаСканеры уязвимостейДинамический анализ (песочница)Анализ КодаЭксплуатацияЭксплуатация веб-приложенийСбор информацииCTFТестирование на Проникновение

Популярное

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

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

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

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

Смотреть все инструменты →
Обучение и Образование
Разработка Полезной Нагрузки
GitHubinferiorak/cve-2025-55182-react2shell-async-scanner

CVE-2025-55182-React2Shell-Async-Scanner

Асинхронный RCE-сканер для CVE-2025-55182 / CVE-2025-66478 — prototype pollution → выполнение кода через React Server Actions.

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

⚡ React2Shell

CVE-2025-55182 / CVE-2025-66478 - Async RCE Scanner

Python CVE CVE License Author Visitors

Prototype-pollution → Remote Code Execution via React Server Actions

Асинхронное обнаружение через канарейку (canary) с приоритетом версии — без слепого подбора


[!WARNING] Только для авторизованных исследований безопасности и пентеста. Сканирование систем без явного письменного разрешения противозаконно. Автор не несёт ответственности за неправомерное использование этого инструмента.


Содержание

  • Обзор уязвимости
  • Затронутые версии
  • Как работает обнаружение
  • Установка
  • Использование
  • Справочник опций
  • Вывод и вердикты
  • Режим браузера
  • Конвейер определения версии

Обзор уязвимости

React Server Actions передают данные действия как multipart form data напрямую в серверный контекст выполнения. Из-за недостаточной санитизации prototype pollution в затронутых версиях react-server-dom-webpack атакующий может:

  1. Внедрить специально сформированный multipart-пейлоад, который засоряет Object.prototype
  2. Переопределить _response._prefix во внутреннем объекте ответа
  3. Принудить сервер выполнить произвольные команды оболочки через:
    root@kitploit:~
    process.mainModule.require('child_process').execSync(cmd)
    

Это даёт неаутентифицированное удалённое выполнение кода (RCE) на любом публично доступном Next.js-приложении, использующем React Server Actions с затронутой версией React.

CVE-2025-55182 — Широкий охват: затрагивает пакеты React 19 (react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack)
CVE-2025-66478 — Строгий охват: путь эксплуатации, специфичный для Next.js, через Server Action endpoint /


Затронутые версии

КомпонентУязвимыеИсправленные
React react-server-dom-*19.0.0, 19.1.0, 19.1.1, 19.2.019.0.1, 19.1.2, 19.2.1+
Next.js 16.x16.0.0 – 16.0.616.0.7+
Next.js 15.x15.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.615.0.5+, 15.1.9+, 15.2.6+, 15.3.6+, 15.4.8+, 15.5.7+
Next.js 14.xтолько canary-сборки 14.3.0-canary.77+Все стабильные 14.x — НЕ ЗАТРОНУТЫ
Next.js 13.x-НЕ ЗАТРОНУТЫ

Как работает обнаружение

Этот сканер использует проверку канарейки по выводу (output-based canary verification) — самый надёжный метод подтверждения реального выполнения кода с нулевым количеством ложных срабатываний:

root@kitploit:~
1.  POST /  с заголовком Next-Action + multipart-пейлоад prototype pollution
2.  Пейлоад выполняет:  echo <random_canary>
3.  Уязвимый сервер выбрасывает NEXT_REDIRECT с base64(canary) в URL
4.  Заголовок ответа:   X-Action-Redirect: /login?a=<base64(canary)>
5.  Сканер декодирует base64 → совпадение с канарейкой → RCE подтверждён ✓

allow_redirects=False критически важно — подтверждение находится в заголовке, а не в месте перенаправления.


Установка

root@kitploit:~
git clone https://github.com/InferiorAK/React2Shell
cd React2Shell

pip install -r requirements.txt

# Требуется только при использовании режима --browser для улучшенного определения версии:
playwright install chromium
playwright install-deps chromium

Требования: Python 3.10+


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

Сканер CVE-2025-55182 — Широкий охват (React + Next.js)

root@kitploit:~
# Одиночная цель
python3 CVE-2025-55182_scanner.py -u https://target.com

# Сканирование списка URL
python3 CVE-2025-55182_scanner.py -f urls.txt

# Тихий режим — вывод только результатов RCE / Vulnerable
python3 CVE-2025-55182_scanner.py -f urls.txt -q

# Режим браузера — headless Chromium для точного определения версии
python3 CVE-2025-55182_scanner.py -f urls.txt -b

# Полный набор опций — рекомендуется для масштабного сканирования
python3 CVE-2025-55182_scanner.py -f urls.txt -b -q -c 3 -t 20

Справочник опций

Сканер CVE-2025-55182

ФлагДлинная формаПо умолчаниюОписание
-u--url-URL одиночной цели
-f--file-Файл с одним URL на строку
-o--outputoutputs/vuln.txtВыходной файл для уязвимых целей
-U--unknown-outputoutputs/unknown.txtВыходной файл для целей с неизвестной версией
-c--concurrency5Параллельные HTTP-соединения
-t--timeout15Таймаут на запрос (секунды)
-q--quietвыклВыводить только строки RCE / VULNERABLE
-b--browserвыклЗапасной вариант определения версии через Playwright headless Chromium

Вывод и вердикты

Каждой сканируемой цели присваивается один из следующих вердиктов:

ВердиктЦветЗначение
RCE🔴 КрасныйКанарейка подтверждена в X-Action-Redirect — доказанное удалённое выполнение кода
VULNERABLE🟠 ОранжевыйВерсия попадает в уязвимый диапазон; RCE-пейлоад не вернул эхо (WAF / пропатченная конфигурация / неверный endpoint)
Unknown🟡 ЖёлтыйNext.js подтверждён, но версию определить не удалось — RCE всё равно опробован; сохранено в outputs/unknown.txt для повтора в режиме браузера
Not Vulnerable🟢 ЗелёныйВерсия подтверждена как исправленная, либо RCE явно вернул безопасный результат
Skipped⚪ БелыйПодтверждённая пропатченная версия или сайт не на Next.js — PoC не выполнялся
Error⚪ БелыйХост недоступен или соединение не удалось

Выходные файлы (сохраняются в папку outputs/, создаётся автоматически):

  • outputs/vuln.txt — результаты RCE и VULNERABLE (дописываются при каждом запуске)
  • outputs/unknown.txt — цели с версией Unknown; повторите их с флагом -b для точного определения версии

Режим браузера

Почему версия отображается как unknown на 90%+ сайтов?

Современный Next.js 13+, использующий архитектуру App Router, никогда не встраивает версию фреймворка в статический HTML. Версия существует только в window.next.version после выполнения JavaScript в реальном браузерном контексте.

Без --browser:

  • Определение версии полагается на HTTP-заголовки, __NEXT_DATA__, инлайн-скрипты и хэшированные файлы чанков
  • Сайты на App Router почти всегда возвращают unknown — фильтрация по версии обходится

С --browser (-b):

  • Playwright запускает headless Chromium
  • JavaScript страницы выполняется полностью
  • Сканер читает window.next.version напрямую из живого DOM
  • Точность определения версии растёт с ~10% → почти до 100% на современных Next.js-сайтах
root@kitploit:~
# Рекомендуется с режимом браузера — снизьте конкурентность (страницы браузера требовательны к ресурсам)
python3 CVE-2025-55182_scanner.py -f urls.txt -b -c 3

Конвейер определения версии

Сканер выполняет до 7 этапов, останавливаясь сразу после нахождения версии:

root@kitploit:~
Stage 1 │ HTTP-заголовки ответа
        │  X-Powered-By: Next.js X.Y.Z
        │  x-nextjs-*, x-next-version

Stage 2 │ Инлайн-блоки <script> (поиск по каждому блоку)
        │  window.next = { version: "X.Y.Z", ... }
        │  version:"X.Y.Z", router: ...      ← паттерн смежного ключа в минифицированном бандле
        │  "nextVersion":"X.Y.Z"
        │  Next.js vX.Y.Z                    ← обычный текст в meta / HTML-комментариях
        │  __NEXT_VERSION__ = "X.Y.Z"

Stage 3 │ JSON-блок __NEXT_DATA__
        │  Только Pages Router — "version":"X.Y.Z" безопасен в этом контексте

Stage 4 │ Хэшированные URL чанков (извлечены из <script src>)
        │  /_next/static/chunks/*, /_next/static/app/*, /_next/static/runtime/*
        │  Загружает до 12 реальных файлов бандлов и сканирует их на строки версий

Stage 5 │ Запасные чанки с фиксированными именами
        │  main.js, framework.js, webpack.js, _app.js, pages/_app.js

Stage 6 │ Endpoint /package.json
        │  Dev-режим / некорректно настроенные серверы отдают его напрямую

Stage 7 │ Playwright Headless Browser  [только --browser / -b]
        │  Вычисляет window.next.version после полного выполнения JS
        │  Срабатывает только когда этапы 1–6 вернули "unknown"

Дисклеймер

Этот инструмент опубликован исключительно в образовательных целях и для авторизованных исследований безопасности.
Автор, InferiorAK, не несёт ответственности за любой ущерб, причинённый в результате неправомерного использования.
Всегда получайте письменное разрешение перед тестированием любой системы, которая вам не принадлежит.


Сделано InferiorAK


Мои ссылки

Github Facebook Messenger Twitter YouTube

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