React2Shell - CVE-2025-55182 - риск RCE

React2Shell: CVE-2025-55182 и риск RCE Next.js

TL, д-р

React2Shell (CVE-2025-55182) создает критический Риск RCE в Компоненты сервера React (RSC) и фреймворки, которые их встраивают, включая Next.js. Потому что уязвимость живет внутри РКК Уровень сериализации и десериализации, злоумышленники могут отправить созданный HTTP-запрос и вызвать неавторизованное удаленное выполнение кода, даже когда команды используют конфигурации фреймворка по умолчанию. Next.js Приложения подвергаются наибольшему риску, поскольку они принимают и обрабатывают Реагировать на полет полезные данные по протоколу HTTP по умолчанию.

Ошибка затрагивает несколько версий Пакеты сервера React, и злоумышленникам не требуется специальная логика приложения для её использования. Исследователи безопасности демонстрируют почти 100% надёжность, а ранние сканирования показывают, что многие облачные среды уязвимы. Next.js экземпляров. Команды должны немедленно исправить ошибки. и проверить всю экосистему, чтобы уменьшить React2Shell (CVE-2025-55182) Риск RCE.

Критическая уязвимость, о которой было сообщено в рамках программы вознаграждения за обнаружение ошибок Meta 29 ноября, вызвала срочную реакцию в экосистеме JavaScript.

Назначенный CVE-2025-55182, раскрытый 3 декабря, теперь именуется React2Shell является уязвимостью максимальной серьезности, которая влияет Компоненты сервера React а также фреймворки, которые их включают. Изначально был назначен отдельный идентификатор уязвимости Next.js (CVE-2025-66478), но позже NVD объединил его с основным идентификатором CVE React в качестве дублирующей записи.

Основная проблема заключается в той же небезопасной обработке сериализованных полезных данных RSC, которые могут быть запущены через HTTP-запрос. Это открывает злоумышленнику возможность отправить поддельный HTTP-запрос, который приводит к запуску произвольного JavaScript-кода на сервере после его отправки. десериализовано React.

Обзор CVE-2025-55182

Компоненты React Server глубоко интегрированы в современные фреймворки и во многих случаях включены по умолчанию. Из-за этого приложения могут подвергаться React2Shell (CVE-2025-55182) даже если они никогда явно не определяют конечную точку функции сервера. Реализация RSC всё ещё присутствует, и одного этого достаточно, чтобы активировать уязвимые ветви кода и создать значительный Риск RCE.

Недостаток возникает из-за того, как Протокол React Flightl обрабатывает определённые структурированные полезные данные. Старые версии пытались пройти по путям объектов, указанным в полезной нагрузке, без проверки корректности или ожидаемости структуры. Злоумышленник мог манипулировать этим процессом и в конечном итоге добиться выполнения кода на сервере. Аутентификация, специальная настройка и специфическая для приложения логика не требуются. Поскольку проблема существует в стандартных конфигурациях, standard развертывания происходят без необходимости каких-либо необычных условий.

Эксплуатация происходит, когда злоумышленники отправляют вредоносные HTTP-запросы POST, которые злоупотребляют «vm.runInThisContextМеханизм через действия сервера. React не раскрывает уязвимую конечную точку напрямую, в отличие от Next.js, создавая реальный вектор удалённой атаки. 

Next.js принимает данные Flight из любого запроса, обрабатывает их без надлежащей проверки и передаёт десериализатору React. Система обрабатывает эти внешние входные данные как доверенные, что позволяет злоумышленникам получить доступ к удаленное выполнение кода через общедоступные конечные точки с полными привилегиями процесса Node.js на целевом сервере. 

Серьезность значительно возрастает, поскольку конфигурации по умолчанию остаются уязвимыми React2Shell (CVE-2025-55182) и в результате Риск RCE, standard Приложение Next.js, которое вы создаете с помощью create-next-app раскрывает себя без необходимости внесения каких-либо изменений в код или конфигурацию. Исследователи безопасности подтверждают почти 100%-ную надёжность эксплуатации и сообщают, что в 39% облачных сред работают уязвимые экземпляры, а в 44% всех сред работают публично доступные приложения Next.js, подверженные React2Shell.

Понимание воздействия React2Shell

Уязвимые версии охватывают несколько выпусков:

Компонент Затронутые версии
react-server-dom-webpack 19.0, 19.1.0, 19.1.1, 19.2.0
react-server-dom-parcel 19.0, 19.1.0, 19.1.1, 19.2.0
react-server-dom-turbopack 19.0, 19.1.0, 19.1.1, 19.2.0

Поскольку многие фреймворки встраивают поддержку RSC в ядро, приложения часто наследуют уязвимый код, не осознавая этого. Любой фреймворк или сборщик, предоставляющий такие пакеты, может подвергнуть приложение риску React2Shell (CVE-2025-55182) и связанному с ним риску RCE. Это включает в себя:

  • Next.js (маршрутизатор приложений)
  • Предварительный просмотр React Router RSC
  • Плагин Vite RSC
  • Плагин Parcel RSC
  • Redwood SDK
  • Waku
  • Выставка

Next.js особенно подвержен влиянию, поскольку по умолчанию использует конечные точки RSC по протоколу HTTP. Версии, начинающиеся с Сборки 14.3.0 canary, наряду с большинством 15.x и рано 16.x Релизы содержат уязвимую реализацию. Любой, кто использует Canary 14.3.0-канарейка.77 или позже следует вернуться к стабильная версия 14.x ветку до тех пор, пока не будет опубликована исправленная версия canary.

Исправленные версии Next.js включают:

Компонент Исправленные версии
Next.js 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7

Публичные PoC и надежное обнаружение

После раскрытия уязвимости появилось множество предполагаемых прототипов. Многие из них были либо неточными, либо основывались на ошибочных предположениях. Первоначальный автор уязвимости, Лаклан Дэвидсон, публично подтвердил… react2shell что циркулирующие PoC GitHub не соответствуют эксплойту, предоставленному в частном порядке разработчикам React/Next.js и предоставленному им собственный PoC

Основная проблема ранних публичных попыток заключается в их неспособности признать, что эксплуатация успешно противостоит standard Развертывания Next.js без необходимости наличия определенной логики приложения или функций на стороне сервера.

Исследователи безопасности из разных организаций подчеркнули, что для обнаружения уязвимости требуется нечто большее, чем просто определить наличие RSC. Команда Assetnote опубликовала надежный метод обнаружения и еще один сканер способный подтвердить наличие проблемы без использования какой-либо логики эксплойта. Metasploit скоро будет иметь доступный эксплойт для этой уязвимости тоже. 

Подход к обнаружению использует то, как React Server обрабатывает ссылки на свойства объекта, используя двоеточия в качестве разделителей внутри ReactFlightClientConfigBundlerWebpack.js/requireModule() Функция. Когда уязвимые версии обрабатывают специально структурированную многокомпонентную полезную нагрузку, которая пытается пройти по несуществующим вложенным путям объектов, они вызывают предсказуемые ошибки. Диагностический запрос отправляет эталонный шаблон, например `$1:а:а` в паре с пустым объектом. Уязвимые реализации пытаются разрешить эту проблему как вложенный доступ к свойству с неопределённым значением, что приводит к исключению. Сервер возвращает код 500 с характерным шаблоном дайджеста ошибки в теле ответа. 

export function requireModule<T>(metadata: ClientReference<T>): T {
  let moduleExports = __webpack_require__(metadata[ID]);
  if (isAsyncImport(metadata)) {
    if (typeof moduleExports.then !== 'function') {
      // This wasn't a promise after all.
    } else if (moduleExports.status === 'fulfilled') {
      // This Promise should've been instrumented by preloadModule.
      moduleExports = moduleExports.value;
    } else {
      throw moduleExports.reason;
    }
  }
  if (metadata[NAME] === '*') {
    // This is a placeholder value that represents that the caller imported this
    // as a CommonJS module as is.
    return moduleExports;
  }
  if (metadata[NAME] === '') {
    // This is a placeholder value that represents that the caller accessed the
    // default property of this if it was an ESM interop module.
    return moduleExports.__esModule ? moduleExports.default : moduleExports;
  }
  return moduleExports[metadata[NAME]];
}

Немедленные действия для организаций, столкнувшихся с React2Shell (CVE-2025-55182) и риском RCE

Проведите комплексное сканирование вашей кодовой базы и развернутых приложений. для поиска уязвимых версий пакетов. Обратите особое внимание на прямые зависимости пакетов сервера React, реализации RSC на уровне фреймворка (Next.js, Waku, Redwood и т. д.), приложения, созданные с помощью `create-next-app` или аналогичных инструментов построения шаблонов, а также контейнерные приложения, которые могут содержать устаревшие базовые образы.

Анализ состава программного обеспечения (SCA) такие инструменты, как Ксигени SCA может автоматически обнаруживать затронутые зависимости во всем вашем программном обеспечении. 

Исправить немедленно:

Обновление до версий с исправлениями, таких как 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) и любых пакетов фреймворков, включающих RSC. Эти обновления вводят строгую валидацию обработки полезной нагрузки RSC и предотвращают небезопасное разыменование свойств, которое позволяет эксплойтировать уязвимость. 

Автоматизированные инструменты исправления, такие как Функция автоматического исправления Xygeni, может ускорить процесс в больших кодовых базах.

Реализуйте временные меры защиты WAF:

Пока исправления распространяются по вашему развертыванию pipeline, активируйте правила брандмауэра веб-приложений для немедленной защиты. Крупные поставщики облачных услуг выпустили наборы правил для экстренных случаев, Cloudflare: Автоматическая защита для всех уровней, когда трафик React проксируется, а также AWS, Akamai, Fastly, Google Cloud иметь аналогичные защитные правила. Включите эти элементы управления немедленно, чтобы создать защитный слой в переходный период.

Мониторинг подозрительного HTTP-трафика:

Настройте ведение журнала и оповещение для индикаторов попыток эксплуатации: некорректные или неожиданные полезные данные протокола RSC Flight, необычные шаблоны ошибок 500 на конечных точках RSC, запросы POST с подозрительными заголовками `Next-Action` или `Next-Router-State-Tree`, повторяющиеся запросы к путям `/_next/` с составными полезными данными

Проверьте спецификацию вашего программного обеспечения:

Многие фреймворки прозрачно связывают зависимости RSC, делая их невидимыми при поверхностном анализе зависимостей. Проверьте свой полный SBOM для обеспечения: отсутствия транзитивных зависимостей от уязвимых пакетов сервера React, а также отсутствия непреднамеренного внедрения старых реализаций RSC в обновления фреймворка.

Заключительные мысли

React2Shell входит в число самых серьёзных уязвимостей экосистемы JavaScript за последние годы, и не из-за сложности эксплойта, а из-за того, что RSC настолько глубоко проник в современный инструментарий. Теперь, когда исправления доступны для всей экосистемы, команды должны как можно быстрее внедрять обновления в эксплуатацию.

Если ваше приложение использует серверные функции React, будь то напрямую или косвенно, вы должны отнестись к этой уязвимости как к первоочередному исправлению.

sca-инструменты-программное обеспечение-композиция-анализ-инструменты
Расставьте приоритеты, устраните и защитите риски, связанные с программным обеспечением
7-дневная бесплатная пробная версия
Кредитная карта не требуется.

Защитите свою разработку и доставку программного обеспечения

с пакетом продуктов Xygeni