В конце 2025 года разработчики выявили уязвимость React2Shell (CVE-2025-55182/CVE-2025-66478), которая позволяет удалённо выполнять произвольный код на серверах, где запущены приложения на React Server Components (в том числе Next.js 15–16).
Уязвимости сразу присвоили CVSS 10.0, максимальный уровень критичности.
В статье разберём:
что такое React2Shell;
какие проекты под угрозой;
как проверить свою версию;
как правильно обновиться;
что делать, если приложение было доступно до фикса;
рекомендации по защите в продакшене.
Что такое React2Shell
React2Shell - это цепочка уязвимостей в реализации React Server Components (RSC), которая позволяет сформировать специальный запрос и добиться выполнения произвольного кода на сервере.
При этом атака не требует аутентификации, достаточно публичного доступа к RSC-эндпоинту.
Используются особенности протокола сериализации RSC и недостатки обработки "ссылок" на серверные функции.
Кто уязвим
Под угрозой находятся все приложения, использующие RSC:
Next.js версии 15.0.0–16.0.6 (включая некоторые canary-релизы 14.x)
React-проекты, использующие
react-server-dom-webpackПроекты на Vite/Parcel/Turbopack, если подключены RSC
Любые фреймворки, где есть RSC
Не уязвимы:
классические SPA на React (чистый client-side bundle)
Next.js 12–13 (если без App Router и RSC)
Next.js 14 без включённого RSC или ниже 14.3.0-canary.76
Как проверить, уязвимо ли ваше приложение
1. Проверка версии Next.js
npm ls nextили
yarn why nextЕсли версия между 15.0.0 и 16.0.6 включительно - обновляться обязательно.
2. Проверка зависимостей RSC-библиотек
npm ls react-server-dom-webpackЕсли версия старше react 19.0.0 до патча - обновляться.
Как пофиксить: пример обновления
1. Обновление Next.js
Vercel выпустил безопасные версии: 15.5.7, 16.0.7, а также исправления во всех LTS-ветках.
npm:
npm install next@latest react@latest react-dom@latest --saveyarn:
yarn add next@latest react@latest react-dom@latestpnpm:
pnpm add next@latest react@latest react-dom@latestПосле обновления пересоберите проект:
npm run build2. Обновление React Server DOM (если проект не на Next.js)
Если RSC используется вручную:
npm install react-server-dom-webpack@latest react@latest react-dom@latest
Что делать, если приложение было доступно до фикса
Даже если вы обновились, рекомендуется:
Ротировать секреты
JWT секреты
API-ключи
OAuth-ключи
Ключи доступа к базе данных
AWS/GCP токены
Пересобрать контейнеры и перекатить инстансы
Проверить логи на подозрительные запросы
Дополнительная защита
Даже после обновления можно добавить меры безопасности.
1. Ограничить доступ к серверным функциям - в Next.js можно использовать middleware:
// middleware.ts
export function middleware(req) {
const ua = req.headers.get('user-agent') || "";
if (ua.includes("curl") || ua.includes("wget")) {
return new Response("Forbidden", { status: 403 });
}
}
Это не стопроцентная защита, но снижает вероятность автоматизированных атак.
2. Защитить специфические эндпоинты Cloudflare WAF или Nginx:
Nginx:
location ~* _rsc {
deny all;
}
Cloudflare WAF rule:
URI Path contains "_rsc" → Block
Итоги
React2Shell - один из самых критичных инцидентов в истории React/Next.js.
Чтобы защитить свой проект:
обновить Next.js / React до патч-версии
пересобрать приложение
ротировать секреты
добавить WAF/дополнительные проверки
проверить логи