
В начале декабря 2025 года команда React опубликовала security-advisory: в реализациях React Server Components обнаружена критическая ошибка, позволяющая атакующему отправить специально сформированный HTTP-запрос к серверному endpoint’у RSC и добиться выполнения произвольного кода на сервере. Уязвимы React 19.0.0, 19.1.0, 19.1.1 и 19.2.0 в пакетах react-server-dom-webpack, react-server-dom-parcel и react-server-dom-turbopack.
Ключевая проблема — небезопасная десериализация входящих данных в протоколе Flight. Серверная часть React принимает бинарный/структурированный payload, восстанавливает из него дерево компонентов и ссылки на серверные функции, но при этом доверяет содержимому больше, чем должна. Достаточно аккуратно сконструировать запрос так, чтобы десериализатор «собрал» структуру, приводящую к выполнению атакующего кода в процессе Node.js (или в среде, где крутится серверный рендеринг).
Почему это выглядит страшно:
Уязвимость не «во всём React», а именно в серверной части React Server Components. Это значит:
Задеваются:
Не задеваются:
Но важно понимать, что современный Next.js по умолчанию создаёт App Router-проекты с включёнными Server Components. Многие команды даже не отдают себе отчёта, что у них уже используется RSC: это просто идёт «в комплекте» со стандартным шаблоном. Поэтому безопаснее считать любой продакшен на Next.js 15/16 потенциально уязвимым, пока вы явно не проверили версии и конфигурацию.
При успешной эксплуатации CVE-2025-55182 атакующий получает выполнение произвольного кода в контексте вашего серверного процесса. Типичные последствия:
Отдельный риск: уже есть публичные PoC-эксплойты, массовое сканирование началось буквально в первые сутки после публикации advisory, а крупные облака (AWS, Google Cloud и др.) фиксируют реальные попытки эксплуатации со стороны группировок, в том числе связанных с государственными актёрами.
React выпустил исправления для всех затронутых веток: 19.0.1, 19.1.2 и 19.2.1, где логика декодирования Flight-payload переработана и больше не допускает опасной десериализации.
Next.js, в свою очередь, обновил все поддерживаемые линии:
Параллельно Vercel и облачные провайдеры задеплоили временные фильтры трафика (WAF-правила, сигнатуры для IDS/IPS), но сами подчёркивают: это только дополнительный слой защиты, а основное средство — обновление зависимостей и повторный деплой приложений.
Эта история очень наглядно показывает несколько вещей:
И даже при наличии таких багов ущерб сильно ограничивается, если вы соблюдаете принцип минимально необходимых привилегий: контейнеры изолированы, у Next.js-сервиса только нужные доступы, секреты лежат в secret-manager’е, а не в «толстом» .env. Тогда даже критический RCE не превращается автоматически в полный захват инфраструктуры.
Ниже — практические шаги по версиям. Я ориентируюсь на официальные advisory React и Next.js плюс сводки от Vercel и крупных вендоров.
Проверить, затронут ли вы вообще
Открой package.json:
Проверьте код:
Рекомендованные действия
Если вы на стабильном Next.js 14 + React 18:
Если вы на canary-ветке 14 с React 19 / RSC:
npm install next@14 react@18 react-dom@18
и приведите код к поддерживаемому API, если использовали экспериментальные фичи.Определяем конфигурацию
В package.json: "next": "15.x" — это ветка, которая по умолчанию уже рассчитана на React 19 (особенно App Router).
Посмотрите, как устроен проект:
Обновление до безопасной версии
Рекомендованный путь (на момент написания) — обновиться до актуальной патч-версии из вашей минорки или сразу до 15.5.7 (или новее, если уже вышло). Список безопасных патчей: 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7.
Пример для npm:
npm install next@15.5.7 react@19.2.1 react-dom@19.2.1
(точные версии React берём из официального advisory; сейчас это 19.0.1/19.1.2/19.2.1 — выбирайте последнюю доступную).
Дальше:
Минимизация последствий после обновления:
Next.js 16 — текущая активная LTS-ветка, она тоже базируется на React 19 и App Router по умолчанию, поэтому попадает в зону риска.
Вам нужно:
Пример:
npm install next@16.0.7 react@19.2.1 react-dom@19.2.1
Усиление защиты вокруг
Параллельно с обновлением:
Счастливого кодинга! 🚀