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 и другое) или эскалировать в облако.
Сообщество THREAD предупреждает, что перед запуском предоставленного программного обеспечения необходимо проявить особую осторожность. Для защиты рабочих станций от возможного заражения рекомендуется использовать виртуальную машину или песочницу.
Пароль от архива и соглашение