В декабре 2025 года стала известна критическая уязвимость CVE-2025-55182 (псевдоним React4Shell или React2Shell). Она находится в механизме React Server Components (RSC) – новом способе React выполнять часть кода на сервере.
Уязвимость обнаружил исследователь Лахлан Дэвидсон, и 3 декабря React-команда выпустила исправления.
Проблема позволяет любому злоумышленнику без входа в систему отправить на сервер специальный HTTP-запрос и добиться выполнения кода на сервере.
Учитывая популярность React/Next.js (десятки миллионов сайтов, включая Netflix и Airbnb), масштабы возможных атак очень велики. AWS Security зафиксировала активную сканирующую атаку групп из Китая сразу после публикации уязвимости.
Поэтому необходимо срочно обновиться.
React Server Components (RSC) – это технология, появившаяся в React 18 (2020), которая даёт возможность запускать функции и формировать части страницы на сервере, а не в браузере. При этом React-клиент отправляет "запрос" на сервер (через специальный протокол Flight), сервер выполняет React-функцию и возвращает результат. CVE-2025-55182 возникает в шаге «десериализации» полученных данных: React неправильно обрабатывает входящий payload и позволяет внедрить вредоносные объекты.
Говоря простыми словами, злоумышленник может подделать запрос таким образом, что сервер «поверит» ему и выполнит любой код – например, запустит команду ОС или скрипт JavaScript от имени сервера. Примером атаки может быть выполнение команды whoami на сервере или чтение файлов. В одном из опубликованных PoC злоумышленник делает POST-запрос типа:
curl -X POST http://your-server/formaction \
-F '$ACTION_REF_0=' \
-F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}'
...и в ответ получает результат выполнения whoami на сервере. Подобные цепочки (child_process.execSync, vm.runInThisContext, fs.readFileSync и т.д.) позволяют выполнять команды, запускать JS-код и читать или записывать файлы на сервере. Причём запрос проходит до любой аутентификации или авторизации – это удалённое выполнение кода без авторизации (RCE, CVSS 10.0).
Важно: уязвимость активна только если вы используете серверные React-компоненты (RSC). Если приложение работает только на клиенте (обычный React без серверной части) или вы отключили RSC, его можно считать не затронутым. Но по умолчанию в новых проектах (например, в Next.js App Router) RSC включены. Даже если вы прямо не пишите серверных функций, фреймворк может автоматически их генерировать, и тогда вы всё равно уязвимы.
Уязвимость присутствует в React Server Components версий 19.0.0, 19.1.0, 19.1.1 и 19.2.0. Конкретно это пакеты react-server-dom-webpack, react-server-dom-parcel и react-server-dom-turbopack версии 19.0.0–19.2.0. Исправления включены в версии 19.0.1, 19.1.2 и 19.2.1.
Уязвимость также затрагивает Next.js: в Next.js 15-х и 16-й версий (с App Router по умолчанию используется RSC). Изначально для Next.js был выпущен отдельный идентификатор CVE-2025-66478, но его быстро признали дубликатом CVE-2025-55182.
Уязвимые версии Next.js: 15.0.4, 15.1.8, 15.2.5, 15.3.5, 15.4.7, 15.5.6 и 16.0.6. Соответственно, исправления вышли в Next.js 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 и 16.0.7. Пользователям рекомендовано обновить Next.js до этих или более новых версий (или до последней версии канала, если вы на 14.х надо откатиться).
Кроме того, уязвимые серверные React-компоненты входят в состав некоторых библиотек и фреймворков на базе React. Среди них:
@vitejs/plugin-rsc)@parcel/rsc)Если вы используете эти фреймворки, проверьте их зависимые версии RSC. В React Router, например, при активации экспериментального режима RSC тоже может срабатывать эта уязвимость. Если ваше приложение вообще не использует ни один из перечисленных компонентов/плагинов — скорее всего, оно невосприимчиво к React4Shell.
Чтобы убедиться, уязвим ли ваш проект, проверьте в package.json зависимости и версии React/Next.js:
react-server-dom-* версии из диапазона 19.0.0-19.2.0, уязвимость есть.create-next-app без явного отключения RSC) — уязвимость тоже может быть.Можно на время тестирования запустить приложение и попытаться выполнить простую команду через RSC. Например, добавить на сервер заглушку-функцию или endpoint и послать на него curl, как в примере выше. Но проще и правильнее сразу обновить библиотеки.
Самый эффективный способ защиты — установить защищённые версии React и Next.
npm install react@19.0.1 react-dom@19.0.1 react-server-dom-webpack@19.0.1
@latest, если проект позволяет). Это включает исправление для CVE-2025-55182. В React 19.1.2 и 19.2.1 уязвимость уже отсутствует.npm install next@16.0.7
npm install next@15.5.7
react-server-dom-... и сами фреймворки до последних версий. Например, для React Router:npm install react@latest react-dom@latest react-server-dom-parcel@latest react-server-dom-webpack@latest @vitejs/plugin-rsc@latest
react-server-dom-webpack.После обновлений перезапустите сборку и приложение, убедитесь, что нет старых версий пакетов. Проверьте, что в node_modules нет версий 19.0.0-19.2.0.
Пока вы обновляете код, рекомендуется включить WAF/NGFW-правила, блокирующие характерные атаки React4Shell.
Многие облачные провайдеры уже предоставляют это автоматически или по запросу:
Главное помнить, что любая сетевая защита — это временная мера: она даёт время на обновление, но не заменяет патчинг.
Убедитесь, что уязвимость действительно устранена: обновите своё приложение и выполните тестовые запросы. Если ваш стек подразумевает клиент-серверную составляющую, попытайтесь повторить curl-тест (как выше) или используйте сканеры CVE. Отсутствие выполнения команд и сообщений об ошибках после обновления будет говорить об успехе.
До обновления можно ограничить доступ к серверным эндпоинтам: например, закрыть их с помощью сети (firewall), отключить RSC в конфигурации (если возможно) или настроить аутентификацию. Однако это часто сложно сделать быстро, поэтому приоритет всё же — как можно скорее обновить библиотеки.
CVE-2025-55182 — это очень серьёзная уязвимость в React Server Components, позволяющая выполнять любой код на сервере без проверки. Она актуальна для множества современных проектов на React и Next.js.
Главные шаги защиты — срочно обновить React и Next.js до безопасных версий, а также учесть рекомендации вендоров (Cloudflare, AWS, Akamai и т.д.), которые уже реализовали защитные правила. После обновления и настройки WAF убедитесь, что приложение работает корректно и атаки блокируются.
Безопасность сервера и данных — это приоритет. Не откладывайте обновления и следите за новыми сообщениями разработчиков React/Next.js. Подробную информацию о CVE-2025-55182 можно найти в официальных источниках и блогах безопасности (Kaspersky, Habr, AWS).