FlawOpen

flawopen.com/Teardowns/cve-2025-55182-react-server-components-rce

● CVE-2025-55182 · CVSS 10.0[1] · Критический
Исследования · FlawOpen

CVE-2025-55182: уязвимость React2Shell в RSC

CVE-2025-55182 — удалённое выполнение кода без аутентификации при декодировании payload React Server Components (RSC). React подтвердил ошибку; Google Threat Intelligence описала кампании с загрузчиками, бэкдорами и майнерами.[1], [4], [5]

💡 Простыми словами (ELI5)

Представьте администратора, который сверяет запрос со списком разрешённых служб. Ошибочный поиск принимает унаследованное из шаблона имя за запись, добавленную владельцем списка. Исправление React проверяет, что запрошенный экспорт принадлежит самому модулю; публичное уведомление не раскрывает полную последовательность эксплуатации. Обновите затронутые пакеты.[1]

Ключевые понятия и термины

React Server Components (RSC)
React Server Components: протокол и пакеты React для серверного рендеринга и обмена данными Flight.[1]

Связи со стандартами

Анализ первопричины

React подтвердил RCE из-за ошибки декодирования payload для React Server Functions; поддержки RSC могло быть достаточно. Первое предупреждение не раскрыло деталей. Открытый upstream-патч проверяет собственные свойства в requireModule() и обрабатывает ошибки multipart. Это конкретное исправление, а не полное воспроизведение декодера или всей цепочки.[1], [2]

Затронутые версии React2Shell и область развертывания

Компонент или конфигурацияОценка применимостиМера исправления
react-server-dom-webpack, react-server-dom-parcel или react-server-dom-turbopack версий 19.0, 19.1.0, 19.1.1 или 19.2.0.Поддержка RSC на сервере может сделать приложение уязвимым даже без явно объявленной конечной точки Server Function; серверная граница должна быть доступна.Обновите соответствующую ветку пакета до 19.0.1, 19.1.2 или 19.2.1 либо новее. Пересоберите и повторно разверните серверный артефакт.
Next.js App Router в затронутых версиях 15.x/16.x или начиная с 14.3.0-canary.77 в последующих canary-сборках.Затронутые интеграции фреймворка включают уязвимые пакеты RSC. Не считайте систему безопасной только потому, что приложение не объявляет собственную конечную точку Server Function.Используйте исправленную версию соответствующей ветки: 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 или 16.0.7 либо новее. Это минимальные версии из указанного уведомления; перед развертыванием проверьте текущую ветку поставщика.
Клиентское React-приложение без серверной поддержки RSC.Не входит в документированную область CVE: на сервере нет границы декодирования.Для этой конфигурации серверное исправление React2Shell не требуется. Пересмотрите оценку, если появятся RSC или серверные компоненты.
Развертывание помечено как исправленное.Версия в манифесте не подтверждает, что все рабочие регионы, preview-сервисы, worker-процессы и контейнеры используют исправленный артефакт.Проверьте digest образов и разрешенные версии пакетов в production, preview и worker-средах; расследуйте предыдущие периоды воздействия.
Рекомендации по веткам Next.js в обновлении React от 2026-01-26В более поздних рекомендациях React указаны новые версии с исправлениями безопасности; это не минимальные версии, впервые исправившие CVE-2025-66478. Связанные уведомления RSC и поддерживаемые ветки могут менять целевую версию обновления.Для связанных уведомлений RSC CVE-2025-55183, CVE-2025-55184, CVE-2025-67779 и CVE-2026-23864 React указал исправленные версии 19.0.4, 19.1.5 и 19.2.4. Рекомендации Next.js от 2026-01-26: 14.2.35 для стабильных 13.3.x–14.x; 15.0.8 для 15.0.x; 15.1.12 для 15.1.x; 15.2.9 для 15.2.x; 15.3.9 для 15.3.x; 15.4.11 для 15.4.x; 15.5.10 для 15.5.x; 16.0.11 для 16.0.x; 16.1.5 для 16.1.x. Это более поздние рекомендации для связанных проблем, а не минимальные версии Next.js, исправляющие CVE-2025-66478. Перед развертыванием проверьте последнее уведомление поставщика и поддерживаемую ветку.
CVE-2026-23869 — отказ в обслуживании RSC (2026-04-08).По данным React, специально сформированные HTTP-запросы к конечным точкам Server Function могут вызывать чрезмерную нагрузку на CPU до минуты, после чего возникает перехватываемая ошибка. Затронутые ветки пакетов react-server-dom-* включают версии до 19.0.4, 19.1.5 и 19.2.4.React указывает исправленные версии 19.0.5, 19.1.6 и 19.2.5 соответственно.
CVE-2026-23870 — отказ в обслуживании RSC (2026-05-06).По данным React, специально сформированные HTTP-запросы могут вызвать нехватку памяти или чрезмерную загрузку CPU. Затронутые ветки пакетов react-server-dom-* включают версии до 19.0.5, 19.1.6 и 19.2.5.React указывает исправленные версии 19.0.6, 19.1.7 и 19.2.6 соответственно.
CVE-2026-44907 — отказ в обслуживании Server Functions (2026-07-21).По данным React, специально сформированные HTTP-запросы могут вызвать нехватку памяти или чрезмерную загрузку CPU. Затронутые ветки пакетов react-server-dom-* включают версии до 19.0.7, 19.1.8 и 19.2.7.React указывает исправленные версии 19.0.8, 19.1.9 и 19.2.8 соответственно.

Пошаговый сценарий атаки

Шаг 1

Открытая граница RSC получает запрос без аутентификации

React указывает, что поддержки RSC могло быть достаточно даже без собственного endpoint Server Function. Клиентские приложения без сервера не затронуты этой CVE.[1], [4]

Шаг 2

Подготовленный запрос достигает уязвимого декодера

Поставщик описывает ошибку декодирования запросов Server Function. Полная инструкция не опубликована; не делайте выводов о недокументированных деталях.[1], [2]

Шаг 3

Код выполняется с правами веб-процесса

По предупреждению код выполняется с правами затронутого серверного процесса. Последствия зависят от его учётной записи и доступных секретов и сервисов.[1], [4]

Шаг 4

Google GTIG наблюдала туннеллеры, загрузчики, бэкдоры и майнеры

GTIG наблюдала кампании с туннеллерами, загрузчиками, бэкдорами и майнерами. Это подтверждает эксплуатацию, но не компрометацию каждого узла.[5], [6]

Исходный код: Уязвимый vs Защищённый вариант

Этот точный фрагмент upstream-патча возвращает только собственный экспорт модуля; он не воспроизводит всю ошибку декодера и не является самостоятельным исправлением. Обновите React Server Components или затронутый фреймворк.[2], [1]

Фрагмент исходного кода: Метод requireModule() в Parcel-клиенте React

УЯЗВИМАЯ РЕАЛИЗАЦИЯ
export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = parcelRequire(metadata[ID /* module id */]);
  return moduleExports[metadata[NAME]];
}
БЕЗОПАСНЫЙ ИСПРАВЛЕННЫЙ ВАРИАНТ
export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = parcelRequire(metadata[ID /* module id */]);
  if (hasOwnProperty.call(moduleExports, metadata[NAME])) {
    return moduleExports[metadata[NAME]];
  }
  return (undefined: any);
}

Чек-лист по защите системы для инженеров

Источники