React2Shell (CVE-2025-55182) — proof-of-concept (PoC) эксплойт, демонстрирующий КРИТИЧЕСКУЮ уязвимость удалённого выполнения кода (RCE) в современных веб-фреймворках, использующих React Server Components (RSC).
React2Shell — это эксплойт уровня proof-of-concept (PoC), демонстрирующий CRITICAL-уязвимость удалённого выполнения кода (RCE) в современных веб-фреймворках, использующих React Server Components (RSC).
Данный PoC нацелен на CVE-2025-55182, уязвимость с рейтингом CVSS 10.0, которая позволяет неаутентифицированным удалённым злоумышленникам выполнять произвольные системные команды через небезопасную десериализацию в реализации React Server Components.
React2Shell эксплуатирует ошибку в том, как React Server Components обрабатывают недоверенные входные данные во время фазы rehydration.
| Метрика | Детали |
|---|---|
| Серьёзность | CRITICAL (10.0 / 10.0) |
| Вектор | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Вектор атаки | Network (Remote) |
| Взаимодействие с пользователем | None |
Уязвимость берёт начало в нижележащих пакетах react-server-dom-*, отвечающих за сериализацию и десериализацию деревьев компонентов.
Приложения, использующие уязвимые версии React Server Components, могут обрабатывать вредоносные полезные нагрузки таким образом, что это приводит к удалённому выполнению кода (RCE) с правами серверного процесса.
Злоумышленник может:
Если ваше развёртывание соответствует любой из уязвимых версий ниже и предоставляет доступ к RSC-эндпоинтам, вы уязвимы.
Уязвимость присутствует в версиях 19.0.0, 19.1.0, 19.1.1 и 19.2.0 следующих пакетов:
react-server-dom-parcelreact-server-dom-webpackreact-server-dom-turbopackЭти пакеты входят в состав множества фреймворков, включая, но не ограничиваясь:
15.0.0 – 16.0.614.3.0-canary.76RSC (v19.0.0–19.2.0), такие как:
ViteParcelReact RouterRedwoodSDKWakuЛюбой фреймворк, включающий уязвимую реализацию React Server Components, потенциально затронут.
React2Shell включает модульный генератор полезных нагрузок, предназначенный для обхода типичных ограничений Node.js и WAF-правил:
Стандартная инъекция
process.mainModule.requireNext.js / Webpack-сборки.Async-обход
import() для строгих ESM-окружений, где require недоступен.Обфускация
child_process) в hex-буферы для обхода наивных WAF-сигнатур.Резервный модуль
module.createRequire для загрузки модулей в альтернативных контекстах.Универсальное нацеливание
//RSC/foo.txtNode.js v18.0.0 или выше.git clone https://github.com/rsch-io/CVE-2025-55182-React2Shell.git
cd CVE-2025-55182-React2Shell
npm install form-data
React2Shell предназначен для импорта в качестве модуля в ваши собственные скрипты тестирования.
Создайте файл с именем exploit.js:
const React2Shell = require('./src/react2shell');
// Initialize with target base URL
const target = new React2Shell('http://localhost:3000');
// Execute command using the "standard" strategy
// Arguments: execute(command, endpoint, strategy)
target.execute('whoami', '/', 'standard');
Затем выполните:
node exploit.js
Примечание
endpointдолжен быть установлен на маршрут с поддержкой RSC (например,/,/RSC/foo.txtили специфичные для фреймворка RSC-эндпоинты).strategyможно изменять (например,standard,async,obfuscatedили любая другая стратегия, реализованная вreact2shell).
Waku и другие фреймворки часто предоставляют обработку RSC на определённых маршрутах:
// Target a Waku application
// Note: Use 'async' strategy as Waku often runs in strict ESM
target.execute('ls -la', '/RSC/foo.txt', 'async');
Если сервер блокирует строки, содержащие child_process, вы можете использовать стратегию obfuscated:
target.execute('cat /etc/passwd', '/', 'obfuscated');
Немедленно обновитесь. В обновлённых выпусках React и затронутых нижестоящих фреймворков ужесточена обработка пользовательского ввода для предотвращения нежелательного поведения.
Всем пользователям следует как можно скорее перейти на исправленную версию.
Ниже приведён окончательный список исправленных версий. Если ваша развёрнутая версия ниже указанных, вы уязвимы.
| Программное обеспечение / пакет | Ветка / тип | 🛡️ Исправленная / безопасная версия(и) |
|---|---|---|
React | Stable | 19.0.1, 19.1.2, 19.2.1 |
Next.js | v15 (Stable) | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 |
Next.js | v16 (Stable) | 16.0.7 |
Next.js | Canary | 15.6.0-canary.58 |
Предупреждение для пользователей Next.js 14
Если вы используетеNext.js 14.3.0-canary.77или более позднюю canary-версию, выуязвимы.
Немедленно выполните откат до последней стабильной версии14.x, поскольку уязвимость затрагивает экспериментальную реализацию RSC, присутствующую в этих canary-сборках.
Этот проект предоставляется только в образовательных целях и для авторизованного тестирования безопасности.
Использование данного инструмента против систем без явного разрешения незаконно и неэтично.
Автор(ы) не несут ответственности за любое неправомерное использование или ущерб, причинённый данным инструментом.
Этот проект лицензирован в соответствии с MIT License. Подробности см. в файле LICENSE.