
Инструмент обнаружения удалённого выполнения кода в протоколе Flight библиотеки React Server Components
Данный сканер выявляет системы, потенциально уязвимые к CVE-2025-55182 (React) и CVE-2025-66478 (Next.js) — критическим уязвимостям удалённого выполнения кода без аутентификации в протоколе "Flight" библиотеки React Server Components (RSC).
Ключевые факторы риска:
Критическая уязвимость небезопасной десериализации в реализации Server Components библиотеки React. Протокол "Flight" в RSC не выполняет надлежащую проверку структуры и типов входящих полезных нагрузок, что позволяет злоумышленникам внедрять вредоносные данные, влияющие на выполнение на стороне сервера.
Attacker → Crafted HTTP POST → RSC Endpoint → Deserialization → RCE
Для атаки требуется лишь специально сформированный HTTP-запрос к любой конечной точке серверной функции. Аутентификация не требуется, а конфигурации по умолчанию уязвимы.
Сканер использует пассивное снятие отпечатков и зондирование протокола для выявления потенциально уязвимых систем. Он НЕ пытается осуществить эксплуатацию.
┌─────────────────────────────────────────────────────────────────┐
│ DETECTION PIPELINE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. Framework Detection │
│ ├── HTTP Headers (X-Powered-By: Next.js) │
│ ├── Page Source (__NEXT_DATA__, react artifacts) │
│ └── Build Manifests │
│ │
│ 2. Version Fingerprinting │
│ ├── Embedded version strings in JS bundles │
│ ├── Package version patterns │
│ └── Build manifest analysis │
│ │
│ 3. RSC Endpoint Discovery │
│ ├── Send RSC headers (RSC: 1, Accept: text/x-component) │
│ ├── Analyze response Content-Type │
│ └── Detect Flight protocol markers in response │
│ │
│ 4. Server Actions Probing │
│ ├── POST request with minimal Flight payload │
│ ├── Check for deserialization processing │
│ └── Identify action endpoints │
│ │
│ 5. Vulnerability Assessment │
│ ├── Correlate version with known vulnerable ranges │
│ ├── Weight RSC endpoint presence │
│ └── Generate confidence-scored verdict │
│ │
└─────────────────────────────────────────────────────────────────┘
Протокол Flight использует специфический формат передачи данных:
0:["$","div",null,{"children":"Hello"}]
1:["$","$L1",null,{}]
2:{"name":"ServerComponent"}
Сканер ищет:
text/x-component{number}:{payload}$, $L, $F, $@, $undefinedПоиск шаблонов версий в:
/_next/static/chunks/)[email protected])requests# Clone or download the scanner files
# Install dependencies
pip install -r requirements.txt
# Verify installation
python3 cve-2025-55182-scanner.py --help
# Single target
python3 cve-2025-55182-scanner.py -t https://example.com
# With verbose output
python3 cve-2025-55182-scanner.py -t https://example.com -v
# Create targets file (one URL per line)
echo "https://app1.example.com" > targets.txt
echo "https://app2.example.com" >> targets.txt
# Scan all targets
python3 cve-2025-55182-scanner.py -f targets.txt -o results.json
python3 cve-2025-55182-scanner.py -t https://example.com \
--timeout 15 \
--threads 10 \
--user-agent "SecurityAudit/1.0" \
-v \
-o scan_results.json
Для более глубокого анализа протокола:
python3 rsc_analyzer.py https://example.com 2>/dev/null
Это обеспечивает детальный анализ протокола Flight и перечисление компонентов.
======================================================================
Target: https://app.example.com
Status: VULNERABLE
Framework: Next.js
Version: 19.1.0
RSC Endpoints: /, /_next/data
Evidence:
- X-Powered-By header: Next.js
- React version detected: 19.1.0
- RSC Flight response at / (Content-Type: text/x-component)
- Flight protocol markers detected at /
Recommendations:
→ CRITICAL: Immediate patching required!
→ Upgrade React to 19.0.1, 19.1.2, or 19.2.1
→ Upgrade Next.js to latest patched version (15.0.5+, 16.0.7)
→ Enable WAF rules to block malicious RSC payloads
→ Monitor for anomalous POST requests to RSC endpoints
======================================================================
{
"target": "https://app.example.com",
"status": "VULNERABLE",
"framework": "Next.js",
"version": "19.1.0",
"rsc_endpoints": ["/", "/_next/data"],
"evidence": [
"X-Powered-By header: Next.js",
"React version detected: 19.1.0",
"RSC Flight response at / (Content-Type: text/x-component)"
],
"recommendations": [
"CRITICAL: Immediate patching required!",
"Upgrade React to 19.0.1, 19.1.2, or 19.2.1"
]
}
✅ Явная строка версии найдена в бандлах
✅ Заголовок X-Powered-By раскрывает версию
✅ Присутствует несколько индикаторов RSC
✅ Подтверждён ответ протокола Flight
✅ Сервер принимает RSC POST-запросы
❌ Информация о версии не раскрыта
❌ WAF/CDN маскируют ответы
❌ Нестандартная реализация фреймворка
❌ Интенсивное кэширование препятствует зондированию
❌ Ограничение частоты запросов блокирует обнаружение
| Сценарий | Почему происходит | Смягчение |
|---|---|---|
| Устаревшая строка версии в кэше | CDN/кэш сборки | Проверить несколько конечных точек |
| RSC отключён после обновления | Изменение конфигурации без пересборки |
| Фактор | Влияние на обнаружение |
|---|---|
| Cloudflare/WAF | Может блокировать зондирование и маскировать заголовки |
При критических находках всегда проверяйте с помощью:
npm audit или yarn auditНемедленные действия (0–24 часа):
Немедленно установите исправление
npm install [email protected] [email protected]
npm install [email protected] # or latest patched
Включите правила WAF — Cloudflare, Akamai и AWS WAF развернули защитные правила
Отслеживайте журналы на предмет подозрительных POST-запросов к конечным точкам RSC
Краткосрочные действия (24–72 часа):
package.json# Batch scan all company assets
cat domains.txt | while read domain; do
python3 cve-2025-55182-scanner.py -t "$domain" -o "results_${domain//\//_}.json"
done
# Aggregate results
jq -s '[.[] | select(.status == "VULNERABLE" or .status == "LIKELY_VULNERABLE")]' results_*.json > critical_findings.json
# GitHub Actions example
- name: CVE-2025-55182 Check
run: |
python3 cve-2025-55182-scanner.py -t ${{ env.APP_URL }} -o results.json
if grep -q '"status": "VULNERABLE"' results.json; then
echo "::error::Critical vulnerability detected!"
exit 1
fi
| Версия | Дата | Изменения |
|---|---|---|
| 1.0.0 | 2025-12-03 | Первоначальный выпуск |
Этот инструмент предоставляется только для авторизованного тестирования безопасности. Используйте его только против систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Авторы не несут ответственности за неправомерное использование или ущерб, причинённый данным инструментом.
| Пакет | Уязвимые версии | Исправленные версии |
|---|
| react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| Next.js | 14.3.0-canary.77+, 15.x, 16.0.0-16.0.6 | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7 |
| Индикатор | Метод обнаружения | Достоверность |
|---|
X-Powered-By: Next.js | Проверка HTTP-заголовков | Высокая |
Тег скрипта __NEXT_DATA__ | Разбор исходного кода HTML | Высокая |
Пути к ресурсам /_next/ | Разбор исходного кода HTML | Средняя |
| Маркеры гидратации React | Разбор исходного кода HTML | Средняя |
| Параметр | Описание | По умолчанию |
|---|
-t, --target | URL одиночной цели | - |
-f, --file | Файл со списком целей | - |
-o, --output | Файл вывода в формате JSON | - |
-v, --verbose | Показывать подробные доказательства | False |
--timeout | Таймаут запроса (секунды) | 10 |
--threads | Параллельные потоки | 5 |
--verify-ssl | Проверять SSL-сертификаты | False |
--user-agent | Пользовательский User-Agent | Mozilla/5.0... |
--no-banner | Скрыть баннер | False |
| Статус | Значение | Требуемые действия |
|---|
| 🔴 VULNERABLE | Подтверждена уязвимая версия | Немедленное исправление |
| 🔴 LIKELY_VULNERABLE | React 19.x с RSC, версия в уязвимом диапазоне | Срочное исправление |
| 🟡 POTENTIALLY_VULNERABLE | Найдены конечные точки RSC, версия неизвестна | Провести расследование и исправить |
| 🟢 NOT_VULNERABLE | Подтверждена исправленная версия | Следить за обновлениями |
| 🔵 UNKNOWN | Не удалось определить статус | Требуется ручная проверка |
| ⚪ ERROR | Сбой сканирования | Повторить попытку или проверить вручную |
| Тип результата | Достоверность | Пояснение |
|---|
| VULNERABLE с версией | ВЫСОКАЯ (90%+) | Строка версии совпала с известной уязвимой версией |
| VULNERABLE через заголовок | ВЫСОКАЯ (85%+) | X-Powered-By раскрыл уязвимую версию |
| LIKELY_VULNERABLE | СРЕДНЕ-ВЫСОКАЯ (70-85%) | Обнаружен React 19.x, RSC активен, версия явно не исправлена |
| POTENTIALLY_VULNERABLE | СРЕДНЯЯ (50-70%) | Конечные точки RSC отвечают, но версия неизвестна |
| NOT_VULNERABLE | ВЫСОКАЯ (85%+) | Явно обнаружена исправленная версия |
| UNKNOWN | НИЗКАЯ (<50%) | Собрано недостаточно информации |
| Проверить дату сборки |
| Нестандартная реализация RSC | Пользовательский фреймворк | Ручная проверка |
| Сценарий | Почему происходит | Смягчение |
|---|
| Версия удалена из бандлов | Производственная оптимизация | Проверить манифесты сборки |
| WAF блокирует зондирование | Средства контроля безопасности | Тестирование с разрешённого IP |
| RSC на нестандартных путях | Пользовательская маршрутизация | Расширить словарь путей |
| SPA без индикаторов SSR | Клиентский рендеринг | Проверить API-конечные точки |
| Кэширование CDN | Может выдавать устаревшую информацию о версии |
| Балансировщики нагрузки | Могут направлять запросы к разным версиям приложения |
| Kubernetes/контейнеры | Каждый pod может отличаться |
| Флаги функций | RSC может быть включён условно |