December 9

CVE-2025-55182 - RCE React.js

Критическая уязвимость удалённого выполнения кода в React Server Components (RSC), которая позволяет неаутентифицированному атакующему выполнять произвольный код на сервере путём отправки специально сформированного HTTP-запроса на эндпоинты Server Functions. Затрагивает популярные фреймворки, такие как Next.js с App Router и Server Actions.

Технические детали

  • Поражённые версии: React Server Components (пакеты react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack): все 19.0.0–19.2.0 (до патчей). Next.js: все версии 15.x и 16.x (с App Router/Server Actions), плюс ≥14.3.0-canary.77 (downgrade to stable 14.x рекомендуется).
    (Патчи: React — 19.0.1, 19.1.2, 19.2.1+; Next.js — 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7+; для PPR canary — 15.6.0-canary.58+).
  • Платформы: Node.js-based веб-приложения (сервер-сайд рендеринг), облачные среды (Vercel, AWS, GKE, Kubernetes). По умолчанию затрагивает интернет-facing Next.js с RSC.
  • Тип уязвимости: Небезопасная десериализация (Unsafe Deserialization) + Prototype Pollution → RCE. CWE: 502 (Deserialization of Untrusted Data). Связана с CVE-2025-66478 (Next.js-specific, но дубликат).
  • CVSS v3.1: 10.0 (Критический). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H (сетевой доступ, низкая сложность, без привилегий/взаимодействия, высокое влияние на C/I/A).
  • Точка входа: HTTP POST-запросы к RSC-эндпоинтам (Next.js: Server Actions, App Router routes как _rsc или actions).
  • Метод эксплуатации: Атакующий отправляет multipart/form-data payload с прототип-загрязнением (e.g., {"then": "$1:__proto__:then"}), эксплуатируя десериализацию Flight-протокола. Это дает доступ к Function конструктору для инъекции кода (e.g., child_process.exec). PoC (GitHub: Spritualkb/CVE-2025-55182-exp) демонстрирует blind RCE, reverse shell; эксплуатация "вслепую" или с эксфильтрацией (HTTP 500 с ошибками прототипа как индикатор).
  • Ограничения: Требует включенных RSC/Server Actions (default в Next.js App Router). Не затрагивает чисто клиентские React-приложения или без RSC. WAF (Vercel/Google Cloud Armor) может блокировать payloads (e.g., ключи $1:constructor), но не заменяет патч. Canary-версии 14.x+ уязвимы; false positives в сканерах возможны.

Влияние

В Flight-протоколе RSC сервер десериализует клиентские payloads без строгой валидации, преобразуя их в JS-объекты. Атакующий инжектирует фальшивый "thenable" chunk, загрязняя Object.prototype (then: "$1:__proto__:then"), что ломает промисы и открывает цепочку прототипов. Далее: доступ к constructor через _formData.get("$1:constructor:constructor"), инъекция в _prefix (process.mainModule.require('child_process').exec('id > /tmp/pwned')), и выполнение с правами процесса Node.js. Payload из PoC:

{
  "0": {"then": "$1:__proto__:then"},
  "Next-Action": "fake-action-hash",
  // ... multipart с _prefix: "malicious code"
}

Приводит к немедленному RCE; ошибки: HTTP 500 с E{"digest" или прототип-exceptions.

Итог: полный компромисс сервера — RCE позволяет запускать команды, эксфильтровать данные, устанавливать persistence (backdoors, crypto-miners и другое) или эскалировать в облако.

Download | Github

Сообщество THREAD предупреждает, что перед запуском предоставленного программного обеспечения необходимо проявить особую осторожность. Для защиты рабочих станций от возможного заражения рекомендуется использовать виртуальную машину или песочницу.
Пароль от архива и соглашение