1. Обзор уязвимостей
Номер уязвимости: CVE-2025-55182
Тип уязвимости:: Удаленное выполнение кода (RCE)
уровень уязвимости:: Критический
Сфера влияния: Next.js, React Server Components, связанные фреймворки и библиотеки.
Время обнаружения:: 2025
состояние реставрации:: Выпущенные патчи
CVE-2025-55182 - критическая уязвимость удаленного выполнения кода, затрагивающая фреймворк Next.js и зависимые от него библиотеки. Уязвимость связана с недостаточным количеством контрольных сумм при обработке сериализованных данных React Server Components (RSC) в Next.js App Router, что позволяет злоумышленнику добиться выполнения произвольного кода на стороне сервера, создав вредоносный RSC-запрос.
2. Описание уязвимости
2.1 Техническая база
Next.js - веб-фреймворк с открытым исходным кодом на основе React, широко используемый для создания приложений с рендерингом на стороне сервера (SSR), генерацией статических сайтов (SSG) и гибридным рендерингом.React Server Components (RSC) - это функция, представленная в React 19, которая позволяет разработчикам выполнять логику компонентов непосредственно на сервере и сериализовать состояние компонента на клиенте.
2.2 Условия срабатывания уязвимости
Уязвимость возникает в Next.js при выполнении следующего условия.
-
Версия Next.js использует React 19 (интеграция начнется уже в мае 2024 года).
-
Приложение использует метод маршрутизации App Router.
-
Невыполнение надлежащих проверок безопасности сериализованных данных RSC, полученных от клиентов
2.3 Специфические проявления
Основные вопросы уязвимостиВ.
-
Next.js напрямую принимает сериализованные данные RSC, отправленные клиентом, и передает их серверу ReactFlightReplyServer для десериализации
-
Отсутствие адекватной проверки структуры модели, путей ссылок и метаданных Server Reference
-
Несколько ключевых функций в связке разбора RSC (parseModelString, getOutlinedModel, loadServerReference, initializeModelChunk и т. д.) не позволяют эффективно проверять легитимность данных
-
Злоумышленник может управлять целью вызова на этапе загрузки модуля и привязки ссылок с помощью тщательно составленного вредоносного RSC-запроса.
3. Принципы и причины уязвимости
3.1 Десериализация RSCрабочие процессы
Механизм взаимодействия компонентов React Server включает в себя следующие ключевые шаги.
-
этап сериализации: Серверный компонент выполняется на стороне сервера, и его состояние сериализуется в определенный формат для отправки клиенту.
-
ступень передачиДанные сериализации передаются клиенту по сети.
-
этап десериализации: Клиент получает данные и десериализует их в состояние компонента React.
3.2 Анализ причин уязвимости
Причины этой уязвимости могут быть следующими.
Отсутствие структурной калибровки: Структура модели сериализованных данных RSC недостаточно проверена, что позволяет злоумышленникам внедрять нежелательные структуры данных.
Недостатки контроля пути цитирования: Функция loadServerReference не выполняет строгую проверку безопасности пути к ссылке при загрузке ссылки на сервер, что позволяет злоумышленнику указать на любой модуль, который может быть загружен.
Метаданные не проверены должным образомМетаданные Server Reference содержат такую информацию, как идентификаторы модулей, имена экспортов и т. д. Недостаточные контрольные суммы в этих метаданных позволяют злоумышленнику указывать на небезопасные функции.
Проблемы доверия к десериализатору: ReactFlightReplyServer слишком доверяет операциям, выполняемым над десериализованными объектами, напрямую вызывая такие функции, как parseModelString, getOutlinedModel и т. д., для обработки пользовательских данных.
3.3 Анализ цепи нападения
Атакующая ссылка на эксплойт выглядит следующим образом.
Вредоносные запросы RSC
↓
parseModelString (разбор формата данных)
↓
getOutlinedModel (модель get)
↓
loadServerReference (ссылка на сервер загрузки)
↓
initializeModelChunk
↓
Цель вызова функции управления
↓
Выполнение произвольного кода
В приведенной выше ссылке злоумышленник может внедрить вредоносные данные в нескольких точках, что приведет к.
-
Загрузка непредусмотренных модулей
-
Вызов непредусмотренных функций
-
Передача вредоносных параметров
-
В конечном итоге выполнение произвольного кода на стороне сервера
4. воздействие на уязвимость и опасные факторы
4.1 Прямое воздействие
удаленное выполнение кода:: Злоумышленники могут выполнить произвольный код на стороне сервера без аутентификации, что является наивысшим уровнем компрометации.
Серверы полностью вышли из строя.: Злоумышленник, получивший те же привилегии, что и процесс Node.js, может.
-
Доступ к конфиденциальным данным, хранящимся в приложении (учетные данные базы данных, ключи API, данные пользователей и т. д.).
-
Изменение или удаление данных на сервере
-
Установка бэкдоров для постоянного контроля
-
Используется для проведения дальнейших атак на интрасети.
данные нарушения:: Злоумышленники могут получить доступ и украсть всю конфиденциальную информацию, хранящуюся на сервере
4.2 Затрагиваемые группы пользователей
Уязвимость затрагивает следующих людей.
-
Все производственные приложения, использующие затронутую версию Next.js
-
Проекты, использующие связанную библиотеку React Server Components(react-server-dom-webpack, react-server-dom-turbopack, react-server-dom-parcel)
-
Пользователи веб-приложений, построенных на Next.js
-
Пользователи платформ с низким кодом, таких как Dify
4.3 Оценка физической угрозы
Уязвимость обладает следующими характеристиками, что приводит к высокой реальной угрозе.
-
Простота в использовании: Злоумышленники просто отправляют тщательно составленные HTTP-запросы.
-
Не требуется аутентификация:: Эксплойты не требуют действительной идентификации пользователя
-
широкое влияние: Next.js и React - доминирующие фреймворки в веб-разработке с широким спектром влияния
-
Высокая степень автоматизации:: Можно написать автоматизированные инструменты для массового сканирования и использования
5. уязвимый ЛКП/Эксперт
5.1 Примеры принципов эксплуатации
Следующий код демонстрирует идею возможной эксплуатации для злоумышленника (только в образовательных целях).
// Конструирование вредоносных запросов на сериализацию RSC
// Пример формата RSC: D{сериализованные данные}T{ссылка на стороне сервера}
// Вредоносная структура полезной нагрузки, которую может создать злоумышленник.
const maliciousRSCPayload = {
// Путем управления структурой модели и путями ссылок
модель: {
// Укажите на небезопасный модуль
$$ype:"@@MODULE_REFERENCE",
id: "... /... /server/sensitive-module",
имя: "dangerousFunction"
},
// Передаем вредоносные параметры
аргументы: [
"require('child_process').execSync('malicious-command')"
]
};
// Отправьте вредоносный запрос на интерфейс App Router.
fetch('/api/rsc', {
метод: 'POST',
тело: serializeRSC(maliciousRSCPayload)
});
5.2 Основные векторы атак
Вектор 1 - обход пути модуля:
Построение символов, содержащих обход пути (например, ... /... /) для загрузки модулей, которые не находятся в ожидаемом диапазоне.
Вектор 2 - справочник сервера Подделка:
Подделайте метаданные Server Reference, чтобы loadServerReference загружал и выполнял произвольную функцию.
Вектор 3 - Инъекция параметров:
Внедрение вредоносных параметров в сериализованные данные, которые затем десериализуются и используются непосредственно в вызовах функций.
5.3 Методы обнаружения
Уязвимость может быть проверена на эксплуатацию с помощью.
# Проверка версии Next.js
npm list next
# Проверка наличия аномальных запросов RSC в журналах приложений
# Относится к POST-запросам, тело запроса которых содержит следующие характеристики.
# - MODULE_REFERENCE, указывающий на системный модуль
# - Содержит символы обхода путей (... /... /)
# - Необычная ссылка на сервер метаданные
# Мониторинг выполнения процессов и проверка аномальных запусков дочерних процессов
6. Предложения или программы по реабилитации
6.1 Официальные исправления
Next.js официально устранил уязвимость, обновив зависимости, связанные с React Server Components, и привязав их к исправленному порталу парсинга RSC. Основные улучшения исправления включают.
Улучшенная проверка данных:: Строгие проверки структуры данных RSC перед десериализацией
Безопасная загрузка модулей: Функция loadServerReference реализует механизм белых списков, который позволяет загружать только ожидаемые модули.
Проверка безопасности метаданныхМетаданные Server Reference проверяются с помощью подписи или другого механизма безопасности.
Улучшения в обработке ошибок: Ненормальные данные безопасно отбрасываются, а не пытаются быть обработанными
6.2 Действия при аварийном ремонте
Шаг 1 - Обновление зависимостей сейчас:
# Обновление Next.js до фиксированной версии
npm update next@latest
# Синхронизированное обновление библиотек, связанных с React Server Components
npm update react-server-dom-webpack
npm update react-server-dom-turbopack
npm update react-server-dom-parcel
# Если вы используете Dify, обновите его до версии 1.10.1-fix.1 или более поздней.
npm update dify
Шаг 2 - Таблица соответствия полной версии:
Для разных веток версии Next.js обновите ее до следующих минимальных исправлений.
| Диапазон затронутых версий | версия для реставрации | приоритет |
|---|---|---|
| 15.1.1-canary.0 ~ 15.1.9 | 15.1.9 | ваш (почетный) |
| 14.3.0-canary.77 ~ 15.0.5 | 15.0.5 | ваш (почетный) |
| 15.5.1-canary.0 ~ 15.5.7 | 15.5.7 | ваш (почетный) |
| 15.2.0-canary.0 ~ 15.2.6 | 15.2.6 | ваш (почетный) |
| 15.3.0-canary.0 ~ 15.3.6 | 15.3.6 | ваш (почетный) |
| 15.4.0-canary.0 ~ 15.4.8 | 15.4.8 | ваш (почетный) |
| 16.0.0-canary.0 ~ 16.0.7 | 16.0.7 | ваш (почетный) |
Выпуск исправлений для библиотеки React Server Components:
| название библиотеки | Затронутые версии | версия для реставрации |
|---|---|---|
| react-server-dom-webpack | 19.0 ~ 19.0.1 | 19.0.1 |
| 19.1.0 ~ 19.1.2 | 19.1.2 | |
| 19.2.0 ~ 19.2.1 | 19.2.1 | |
| react-server-dom-turbopack | 19.0 ~ 19.0.1 | 19.0.1 |
| 19.1.0 ~ 19.1.2 | 19.1.2 | |
| 19.2.0 ~ 19.2.1 | 19.2.1 | |
| react-server-dom-parcel | 19.0 ~ 19.0.1 | 19.0.1 |
| 19.1.0 ~ 19.1.2 | 19.1.2 | |
| 19.2.0 ~ 19.2.1 | 19.2.1 | |
| dify | 0 ~ 1.10.1 | 1.10.1-fix.1 |
Шаг 3 - Проверка обновления:
# Промыть кэш зависимостей
rm -rf node_modules package-lock.json
# Переустановка зависимостей
npm install
# Проверенная версия
npm list next react-server-dom-webpack
Приложение для перезапуска #
npm run build
npm start
6.3 Долгосрочные стратегии обороны
Аудит кода:
-
Обзор кода, связанного с RSC, в App Router
-
Проверка наличия пользовательской логики десериализации
-
Убедитесь в отсутствии дополнительных угроз безопасности
контроль доступа:
-
Ограничьте доступ к конечным точкам API (если это возможно).
-
Реализация контроля доступа на основе IP
-
Развертывание правил WAF для обнаружения аномальных запросов RSC
Мониторинг и ведение журнала:
-
Включите подробное протоколирование приложений
-
Отслеживайте необычные шаблоны HTTP-запросов
-
Настройка правил оповещения для обнаружения попыток RCE
Управление зависимостями:
-
Регулярно обновляйте пакеты зависимостей
-
Проверка уязвимостей безопасности с помощью npm audit
-
Рассмотрите возможность использования инструментов анализа состава программного обеспечения (SCA)
Лучшие практики безопасности:
-
Ограничьте привилегии процессов Node.js, следуя принципу наименьших привилегий
-
Запуск приложений в контейнере или среде "песочницы
-
Регулярное тестирование безопасности и тестирование на проникновение
6.4 Промежуточные меры по снижению воздействия (до модернизации)
Если по каким-то причинам немедленное обновление невозможно, можно принять следующие временные меры для снижения риска.
// Добавьте проверку запросов RSC в промежуточное ПО
export function middleware(request) {
// Обнаружение подозрительных запросов RSC
if (request.nextUrl.pathname.includes('/rsc') ||
request.headers.get('rsc') === 'true') {
// Проверяем подозрительные шаблоны в теле запроса
const body = request.body;
// Отклоняйте запросы, содержащие ссылки на обход путей или исключения
if (body.includes('... /... /') ||
body.includes('MODULE_REFERENCE') ||
body.includes('eval')) {
return new Response('Forbidden', { status: 403 });
}
}
return NextResponse.next();
}
Важные замечания:: Временные меры лишь снижают риск и не устраняют угрозу уязвимости полностью. Вам следует как можно скорее перейти на официальное исправление.
7. Справочные цитаты
указанный ресурс:
-
Next.js GitHub Repository - Security Advisory. https://github.com/vercel/next.js/security/advisories
-
Документация по компонентам React Server. https://react.dev/reference/rsc/server-components
-
CVE-2025-55182 Официальные сведения. https://nvd.nist.gov/vuln/detail/CVE-2025-55182
Похожие товары:
-
Официальный сайт Next.js. https://nextjs.org/
-
Официальная документация React. https://react.dev/
-
Репозиторий Dify на GitHub и сведения о выпуске. https://github.com/langgenius/dify/releases/tag/1.10.1-fix.1
Ссылка на безопасность:
-
OWASP Code Injection. https://owasp.org/www-community/attacks/Code_Injection
-
CWE-94: Неправильный контроль за генерацией кода ("Инъекция кода") https://cwe.mitre.org/data/definitions/94.html
-
Лучшие практики безопасности Node.js. https://nodejs.org/en/docs/guides/security/
Оригинальная статья написана Chief Security Officer, при воспроизведении просьба указывать: https://www.cncso.com/ru/cve-2025-55182-react-server-components-rce.html.
