
Сканер безопасности для CVE-2025-55182 — критическая RCE-уязвимость в React Server Components. Сканирование lock-файлов npm/pnpm/yarn, образов Docker, SBOM и живых URL. Автоисправление, вывод в формате SARIF, интеграция с GitHub Actions и Vercel, а также middleware для защиты в рантайме.
Сканер безопасности для CVE-2025-55182 - критической (CVSS 10.0) уязвимости неаутентифицированного удалённого выполнения кода в React Server Components.
⚠️ ПРЕДУПРЕЖДЕНИЕ
Это сканер безопасности, а НЕ инструмент эксплуатации. Он предназначен для помощи разработчикам и командам безопасности в выявлении уязвимых зависимостей в их проектах.
Это проект с открытым исходным кодом, развиваемый сообществом, предоставляемый «как есть» без каких-либо гарантий, прямых или подразумеваемых. Авторы и участники не несут ответственности за любой ущерб или инциденты безопасности, возникшие в результате использования этого инструмента.
Используйте на свой страх и риск. Всегда проверяйте результаты вручную и следуйте политикам безопасности вашей организации. Если вы обнаружите какие-либо проблемы, ошибки или у вас есть предложения, пожалуйста, внесите свой вклад, чтобы помочь улучшить проект для всех.
🤝 ТРЕБУЮТСЯ УЧАСТНИКИ
Этот проект активно ищет тестировщиков и участников! Хотите ли вы сообщать об ошибках, предлагать функции, улучшать документацию или отправлять код — все вклады приветствуются. Ознакомьтесь с нашим Руководством для участников, чтобы начать.
Этот проект существует, чтобы помочь сообществу отреагировать на CVE-2025-55182. Мы признаём и благодарим:
Самый быстрый способ проверить, уязвим ли ваш проект:```bash npx react2shell-guard .
Вот и всё! Это просканирует вашу текущую директорию и сразу покажет результаты.
### 2. Сканирование конкретного проекта```bash
npx react2shell-guard /path/to/your/project
Обнаружены уязвимости? Исправьте их автоматически:```bash
npx react2shell-guard fix --dry-run
npx react2shell-guard fix
npx react2shell-guard fix --install
### 4. Сканирование живых URL-адресов
Проверьте, уязвимо ли развернутое приложение:```bash
npx react2shell-guard scan-url https://your-app.com
Убедитесь, что развёрнутое исправление работает:```bash npx react2shell-guard verify-patch https://your-app.com
### 6. Сканирование образов контейнеров
Проверьте, содержат ли ваши Docker-образы уязвимые пакеты:```bash
npx react2shell-guard scan-image myapp:latest
Автоматически создайте PR в GitHub для исправления уязвимостей:```bash npx react2shell-guard create-pr --dry-run # Preview npx react2shell-guard create-pr # Create PR
---
## Что такое CVE-2025-55182?
29 ноября 2025 года исследователь безопасности Лаклан Дэвидсон обнаружил и ответственно раскрыл критическую уязвимость в React Server Components. Проблема заключается в том, как React декодирует полезные нагрузки, отправляемые на конечные точки React Server Function, что позволяет неаутентифицированным злоумышленникам достичь удалённого выполнения кода на затронутых серверах без какого-либо взаимодействия с пользователем.
CVE-2025-55182 оценивается как CVSS 10.0 (Critical) и затрагивает React Server Components (RSC), а также фреймворки, использующие протокол RSC "Flight".
**Затронутые пакеты:**
- `react-server-dom-webpack` 19.0.0, 19.1.0-19.1.1, 19.2.0
- `react-server-dom-parcel` (same versions)
- `react-server-dom-turbopack` (same versions)
- `next` 15.0.0-15.0.4, 15.1.0-15.1.8, 15.2.0-15.2.5, 15.3.0-15.3.5, 15.4.0-15.4.7, 15.5.0-15.5.6, 16.0.0-16.0.6
**Дополнительная информация:**
- [React Security Advisory](https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components)
- [Wiz Research](https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182)
---
## Установка (необязательно)
Для частого использования установите глобально:```bash
npm install -g react2shell-guard
Затем используйте без npx:```bash
react2shell-guard .
---
## Руководство по использованию
### Базовое сканирование```bash
# Scan current directory
react2shell-guard .
# Scan specific directory
react2shell-guard /path/to/project
# Scan and ignore certain paths
react2shell-guard . --ignore-path "examples/**" "test/**"
react2shell-guard .
react2shell-guard . --json
react2shell-guard . --sarif
react2shell-guard . --html report.html
### Параметры CLI
| Параметр | Описание |
|--------|-------------|
| `--json` | Вывод результатов в формате JSON |
| `--sarif` | Вывод результатов в формате SARIF 2.1.0 |
| `--html <file>` | Создать автономный HTML-отчёт |
| `--no-exit-on-vuln` | Не завершать работу с кодом 1 при обнаружении уязвимостей |
| `--ignore-path <patterns>` | Пути для игнорирования (например, `examples/**`) |
| `--debug` | Включить вывод отладочной информации |
### Коды выхода
| Код | Значение |
|------|---------|
| `0` | Уязвимости не обнаружены |
| `1` | Обнаружены уязвимости |
| `2+` | Фатальная ошибка |
## Сканирование живых URL
Сканируйте живые конечные точки, чтобы определить, уязвимы ли они:```bash
# Scan a single URL
react2shell-guard scan-url https://example.com
# Batch scan from a file (one URL per line)
react2shell-guard scan-url urls.txt --list
# With options
react2shell-guard scan-url https://example.com --timeout 5000 --json
Сканер использует пассивное снятие отпечатков для обнаружения уязвимых конечных точек React Server Components без эксплуатации уязвимости:
Пробный запрос: Отправляет специально сформированный POST-запрос, имитирующий вызов RSC Server Action, с минимальной нагрузкой:
multipart/form-data со структурой данных, похожей на RSCNext-Action для запуска обработки Server ActionАнализ ответа: Анализирует HTTP-ответ на наличие сигнатур уязвимости:
^[0-9]+:E{ — формат ошибки протокола RSC Flight"digest":"...RSC — дайджест RSC в ответах об ошибкахReactServerComponentsError — имена классов ошибок Reacttext/x-component.*error — тип содержимого ошибки компонентаНенавязчивость: Это чисто механизм обнаружения — он не выполняет вредоносную нагрузку и не эксплуатирует уязвимость. Пробный запрос использует безвредные данные, которые вызывают ответы об ошибках на уязвимых серверах, но не причиняют вреда.
Примечание: Положительное обнаружение означает, что на сервере запущена уязвимая версия и он вернул сигнатуру ошибки, специфичную для RSC. Это НЕ означает, что сервер был скомпрометирован.
Проверка, был ли целевой хост исправлен против уязвимости:```bash
react2shell-guard verify-patch https://example.com
react2shell-guard verify-patch https://example.com --json
### Как работает проверка патчей
Проверка патчей выполняет **несколько последовательных сканирований** (по умолчанию: 3) с короткими задержками между ними для обеспечения точного обнаружения:
1. **Несколько проб**: Запускает одну и ту же пассивную проверку отпечатков 3 раза с задержками в 500 мс
2. **Оценка уверенности**:
- **Высокая уверенность**: 2+ успешных сканирования с согласованными результатами
- **Средняя уверенность**: 1 успешное сканирование с однозначным результатом
- **Низкая уверенность**: Все сканирования завершились неудачей или результаты неоднозначны
3. **Классификация результатов**:
- **PATCHED**: сигнатуры уязвимостей не обнаружены ни в одном успешном сканировании
- **VULNERABLE**: сигнатура уязвимости обнаружена в одном или нескольких сканированиях
- **Inconclusive**: смешанные результаты или все сканирования завершились неудачей
Такой подход с несколькими сканированиями снижает количество ложных срабатываний из-за временных проблем с сетью и обеспечивает более высокую уверенность в статусе патча.
### Параметры проверки
| Параметр | Описание |
|--------|-------------|
| `--timeout <ms>` | Таймаут запроса в миллисекундах (по умолчанию: 10000) |
| `--json` | Выводить результаты в формате JSON |
| `--skip-ssl-verify` | Пропустить проверку SSL-сертификата |
## Сканирование контейнерных образов
Сканирование Docker/OCI контейнерных образов на наличие уязвимых пакетов:```bash
# Scan a local or remote image
react2shell-guard scan-image myapp:latest
# Scan from a registry
react2shell-guard scan-image registry.example.com/myapp:v1.0
# Skip pulling (use local image only)
react2shell-guard scan-image myapp:latest --skip-pull
# With JSON output
react2shell-guard scan-image myapp:latest --json
# With SARIF output
react2shell-guard scan-image myapp:latest --sarif
Требования:
Блокируйте уязвимые развёртывания до того, как они попадут в продакшен:```bash
react2shell-guard vercel-check
{ "scripts": { "vercel-build": "react2shell-guard vercel-check && next build" } }
{ "buildCommand": "npx react2shell-guard vercel-check && npm run build" }
### Параметры Vercel Check
| Опция | Описание |
|--------|-------------|
| `--no-fail` | Предупреждать, но не завершать сборку ошибкой при обнаружении уязвимостей |
| `--ignore-path <patterns>` | Пути, которые следует игнорировать (glob-шаблоны) |
| `--debug` | Включить отладочный вывод |
## Автоматизация GitHub PR
Автоматическое создание pull request для исправления уязвимостей:```bash
# Preview what will be done
react2shell-guard create-pr --dry-run
# Create branch and PR
react2shell-guard create-pr
# Create branch but don't push/create PR
react2shell-guard create-pr --no-push
# Custom branch name
react2shell-guard create-pr --branch fix/security-update
| Option | Description |
|---|---|
--branch <name> | Имя ветки для исправления (по умолчанию: fix/cve-2025-55182) |
--dry-run | Показать, что будет сделано, без внесения изменений |
--no-push | Создать ветку и коммиты, но не пушить и не создавать PR |
Требования:
react2shell-guard - CVE-2025-55182 Scanner ──────────────────────────────────────────────────
Scanned 1 project(s)
✗ my-app [VULNERABLE] Path: /path/to/my-app Framework: nextjs v15.2.1 App Router: Yes (RSC enabled)
Vulnerabilities found: - react-server-dom-webpack @ 19.1.0 Upgrade to: 19.1.2 Advisory: https://react.dev/blog/2025/12/03/... - next @ 15.2.1 Upgrade to: 15.2.6 Advisory: https://react.dev/blog/2025/12/03/...
────────────────────────────────────────────────── VULNERABLE - Action required! Upgrade affected packages to patched versions immediately.
## Интеграция с GitHub Actions
> **Примечание:** Мы активно выпускаем новые версии с улучшенными шаблонами обнаружения и исправлениями. Используйте `@v1` для стабильных релизов или `@latest` для новейшей версии.
### GitHub Marketplace Action
Самый простой способ интеграции — использовать наш официальный GitHub Action:```yaml
name: Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Scan for CVE-2025-55182
uses: gensecaihq/react2shell-scanner@v1
with:
path: '.'
fail-on-vuln: true
name: Security Scan
on: [push, pull_request]
jobs: scan: runs-on: ubuntu-latest permissions: security-events: write # For SARIF upload pull-requests: write # For PR comments
steps:
- uses: actions/checkout@v4
- name: Scan for CVE-2025-55182
uses: gensecaihq/react2shell-scanner@v1
with:
path: '.'
format: sarif
fail-on-vuln: true
upload-sarif: true # Upload to GitHub Security tab
add-pr-comment: true # Comment on PRs with results
ignore-paths: 'examples/**,test/fixtures/**'
### Входные параметры действия
| Параметр | Описание | По умолчанию |
|-------|-------------|---------|
| `path` | Путь для сканирования | `.` |
| `scan-type` | Тип сканирования: `repo`, `sbom`, `container` | `repo` |
| `format` | Формат вывода: `text`, `json`, `sarif` | `text` |
| `fail-on-vuln` | Завершить с ошибкой при обнаружении уязвимостей | `true` |
| `upload-sarif` | Загрузить SARIF в GitHub Security | `false` |
| `add-pr-comment` | Добавить комментарий к PR с результатами | `false` |
| `ignore-paths` | Пути для игнорирования через запятую | `''` |
| `sbom-file` | Путь к файлу SBOM (когда scan-type равно sbom) | `''` |
| `container-image` | Docker-образ (когда scan-type равно container) | `''` |
### Выходные параметры действия
| Выходной параметр | Описание |
|--------|-------------|
| `vulnerable` | Были ли найдены уязвимости (`true`/`false`) |
| `findings-count` | Количество уязвимых пакетов |
| `scan-result` | Полный результат сканирования (формат JSON) |
| `sarif-file` | Путь к выходному файлу SARIF |
### Сканирование образов контейнеров```yaml
- name: Scan Docker image
uses: gensecaihq/react2shell-scanner@v1
with:
scan-type: container
container-image: myapp:latest
### Ручное использование CLI
Если вы предпочитаете использовать CLI напрямую:```yaml
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Scan for vulnerabilities
run: npx react2shell-guard@latest .
react2shell-guard автоматически обнаруживает и анализирует lock-файлы следующих менеджеров:
package-lock.json (форматы v2 и v3)pnpm-lock.yamlyarn.lock (форматы Classic и Berry)Автоматически обновит ваш package.json, чтобы использовать пропатченные версии:```bash
react2shell-guard fix --dry-run
react2shell-guard fix
react2shell-guard fix --install
## Pre-Commit Hooks
Установите git-хуки, чтобы предотвратить коммит уязвимых зависимостей:```bash
# Auto-detect hook framework and install
react2shell-guard init-hooks
# Preview what would be installed
react2shell-guard init-hooks --dry-run
# Force specific hook type
react2shell-guard init-hooks --hook-type husky
react2shell-guard init-hooks --hook-type lefthook
react2shell-guard init-hooks --hook-type standalone
Supported hook frameworks:
.husky/pre-commitlefthook.yml.git/hooks/pre-commitХук будет блокировать коммиты, когда package.json содержит уязвимые зависимости, и предложит запустить react2shell-guard fix для исправления.
Сканирование CycloneDX SBOM-файлов на наличие уязвимостей:```bash
react2shell-guard scan-sbom bom.json
react2shell-guard scan-sbom bom.json --json
react2shell-guard scan-sbom bom.json --sarif
## MCP-сервер (интеграция с ИИ-ассистентом)
Запустите MCP-сервер для интеграции с ИИ-ассистентом:```bash
react2shell-guard mcp-server
Доступные MCP-инструменты:
scan_repo - Сканировать репозиторий на наличие уязвимостейscan_sbom - Сканировать файл SBOM в формате CycloneDXНастройка с помощью MCP-совместимых клиентов (пример конфигурации):```json { "mcpServers": { "react2shell-guard": { "command": "npx", "args": ["react2shell-guard", "mcp-server"] } } }
## Промежуточное ПО защиты во время выполнения
Промежуточное ПО эшелонированной защиты, которое обнаруживает и блокирует попытки эксплуатации CVE-2025-55182 во время выполнения.
### Express.js```typescript
import express from 'express';
import { createExpressMiddleware } from 'react2shell-guard/middleware';
const app = express();
// Add raw body parser for RSC payloads
app.use(express.raw({ type: 'text/x-component' }));
app.use(express.json());
// Add protection middleware
app.use(createExpressMiddleware({
action: 'block', // 'block' | 'log' | 'alert'
onAlert: (result, req) => {
// Send to your alerting system (Slack, PagerDuty, etc.)
console.error('CVE-2025-55182 exploit attempt:', result);
},
skipPaths: ['/health', '/metrics'],
}));
// middleware.ts import { withReact2ShellGuard } from 'react2shell-guard/middleware';
export const middleware = withReact2ShellGuard({ action: 'block', rscEndpointsOnly: true, // Only check RSC endpoints (recommended) });
export const config = { matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'], };
**Обнаруженные паттерны:**
- Инъекция сериализованных функций
- Попытки загрязнения прототипа
- Некорректные ссылки на модули
- Вмешательство в серверные действия
- Закодированные вредоносные нагрузки
- Злоупотребление форматом потоковой передачи RSC
## Использование API```typescript
import { scan } from 'react2shell-guard';
const result = scan({
path: '/path/to/project',
ignorePaths: ['examples/**'],
debug: false,
});
console.log(result.vulnerable); // boolean
console.log(result.projects); // ProjectResult[]
{ "cve": "CVE-2025-55182", "vulnerable": true, "scanTime": "2025-12-04T10:30:00Z", "projects": [ { "name": "my-app", "path": "/path/to/my-app", "framework": { "type": "nextjs", "version": "15.2.1", "appRouterDetected": true }, "findings": [ { "package": "react-server-dom-webpack", "currentVersion": "19.1.0", "fixedVersion": "19.1.2", "severity": "critical", "advisoryUrl": "https://..." } ], "vulnerable": true } ], "errors": [] }
## Устранение
**Автоматическое исправление (рекомендуется):**```bash
react2shell-guard fix --install
Ручное обновление - пакеты React:```bash npm install [email protected] # or 19.0.1, 19.2.1
**Ручное обновление - Next.js:**```bash
npm install [email protected] # or other patched version for your release line
Исправленные версии Next.js по линиям релизов:
npm install
npm run build
npm test
npm run dev
## Лицензия
MIT
| Параметр | Описание |
|---|
--list | Обрабатывать цель как файл, содержащий URL-адреса |
--threads <n> | Количество параллельных потоков (по умолчанию: 10) |
--timeout <ms> | Тайм-аут запроса в миллисекундах (по умолчанию: 10000) |
--json | Выводить результаты в формате JSON |
--skip-ssl-verify | Пропустить проверку SSL-сертификатов |
--verbose | Показывать все результаты, включая незатронутые уязвимостью хосты |
| Опция | Описание |
|---|
--timeout <ms> | Тайм-аут операции в миллисекундах (по умолчанию: 120000) |
--skip-pull | Пропустить загрузку образа из реестра (использовать только локальный) |
--json | Выводить результаты в формате JSON |
--sarif | Выводить результаты в формате SARIF 2.1.0 |
--no-exit-on-vuln | Не завершаться с кодом 1 при обнаружении уязвимостей |
--debug | Включить вывод отладочной информации |