
Обнаружение уязвимости CVE-2025-55182 (React2Shell) RCE в React Server Components. Быстрый и точный сканер с нулём ложных срабатываний.
Критическая RCE-уязвимость с CVSS 10.0 в React Server Components. Уязвимо ли ваше приложение на React 19?
Быстрый и точный сканер для CVE-2025-55182 (React2Shell) — критической уязвимости удалённого выполнения кода, эксплуатируемой в реальных атаках. Ноль ложных срабатываний благодаря интеллектуальному определению Server Components.
React2Shell — это уязвимость максимальной степени серьёзности (10.0 CVSS) в React Server Components, которая позволяет неаутентифицированное удалённое выполнение кода. Злоумышленники могут эксплуатировать её с помощью специально crafted HTTP-запросов к конечным точкам Server Functions.
Ключевые факты:
⚠️ Важное примечание: Уязвим только React 19.x. React 18.x и более ранние версии НЕ затронуты.
# Вариант A: сканер на Node.js (рекомендуется — кроссплатформенный, без зависимостей)
npx react2shell-scanner /path/to/your/project
# Вариант B: прямое скачивание и запуск
curl -sSL https://raw.githubusercontent.com/nxgn-kd01/react2shell-scanner/main/scan.js > scan.js
node scan.js /path/to/your/project
# Вариант C: клонирование и запуск
git clone https://github.com/nxgn-kd01/react2shell-scanner.git
cd react2shell-scanner
node scan.js /path/to/your/project
Результат за секунды: 🚨 Уязвим | ⚠️ Предупреждения | ✅ Безопасен
Этот инструмент выполняет интеллектуальное определение уязвимостей:
'use server''use server'React:
19.0.0, 19.1.0, 19.1.1, 19.2.0Пакеты React Server DOM:
react-server-dom-webpack 19.0.0 — 19.2.0react-server-dom-parcel 19.0.0 — 19.2.0react-server-dom-turbopack 19.0.0 — 19.2.0Next.js:
14.0.0 — 14.2.3414.3.0-canary.0 — 14.3.0-canary.8715.0.0 — 15.0.615.1.0 — 15.1.815.2.0 — 15.2.515.3.0 — 15.3.515.4.0 — 15.4.715.5.0 — Дополнительно затронутые фреймворки (согласно официальному бюллетеню React):
react-router 7.0.0 — 7.1.3waku 0.21.0 — 0.21.5@parcel/rsc 2.12.0 — 2.13.2@vitejs/plugin-rsc 0.1.0 — 0.2.0rwsdk (Redwood SDK) 0.1.0 — 0.4.0expo 52.0.0 — 52.0.9React: 19.2.1 или новее
Next.js:
14.2.35+, 14.3.0-canary.88+15.0.7+, 15.1.9+, 15.2.6+, 15.3.6+, 15.4.8+, 15.5.7+16.0.10+Другие фреймворки:
react-router: 7.1.4+waku: 0.21.6+@parcel/rsc: 2.13.3+@vitejs/plugin-rsc: 0.2.1+rwsdk: 0.4.1+expo: 52.0.10+Сканер на Node.js (рекомендуется):
Bash-сканер:
# Установка jq (при использовании Bash-сканера)
# macOS
brew install jq
# Ubuntu/Debian
sudo apt-get install jq
# RHEL/CentOS
sudo yum install jq
Вариант A: Клонирование (рекомендуется для пользователей)
# Клонирование репозитория
git clone https://github.com/nxgn-kd01/react2shell-scanner.git
cd react2shell-scanner
# Делаем скрипты исполняемыми
chmod +x scan.sh scan.js
Вариант B: Форк (рекомендуется для контрибьюторов)
# Создайте форк на GitHub (нажмите кнопку "Fork" на странице репозитория)
# Затем клонируйте свой форк
git clone https://github.com/YOUR_USERNAME/react2shell-scanner.git
cd react2shell-scanner
# Делаем скрипты исполняемыми
chmod +x scan.sh scan.js
# Добавьте upstream-удалённый репозиторий для получения обновлений
git remote add upstream https://github.com/nxgn-kd01/react2shell-scanner.git
Вариант C: Прямое скачивание
# Версия на Node.js (рекомендуется — кроссплатформенная)
curl -O https://raw.githubusercontent.com/nxgn-kd01/react2shell-scanner/main/scan.js
chmod +x scan.js
# Версия на Bash (только Unix/Linux/macOS)
curl -O https://raw.githubusercontent.com/nxgn-kd01/react2shell-scanner/main/scan.sh
chmod +x scan.sh
🔍 Сканирование текущего каталога:
# Используя Node.js (рекомендуется)
node scan.js
# Используя Bash
./scan.sh
📁 Сканирование конкретного проекта:
node scan.js /path/to/project
./scan.sh /path/to/project
🗂️ Рекурсивное сканирование (все подкаталоги):
node scan.js -r
./scan.sh -r
Вывод в JSON (для автоматизации):
node scan.js --json
./scan.sh --json
Режим CI/CD (выход с кодом 1 при обнаружении уязвимости):
node scan.js --ci
./scan.sh --ci
Подробный вывод:
node scan.js -v
./scan.sh -v
Комбинирование параметров:
node scan.js /path/to/projects -r --json --ci
./scan.sh /path/to/projects -r --json --ci
| Код | Значение |
|---|---|
| 0 | Уязвимости не обнаружены |
| 1 | Уязвимости обнаружены (при использовании флага --ci) |
| 2 | Произошла ошибка сканирования |
$ node scan.js ~/my-react-app
╔════════════════════════════════════════════════════════════╗
║ CVE-2025-55182 Scanner (React2Shell) ║
╚════════════════════════════════════════════════════════════╝
Severity: CRITICAL (CVSS 10.0)
Description: Unauthenticated RCE in React Server Components
Scan Summary:
Total projects: 1
Vulnerable: 1
Safe: 0
⚠ VULNERABLE PROJECTS FOUND:
1. /Users/user/my-react-app
└─ react 19.0.0 → 19.2.1
└─ next 15.0.3 → 15.0.5
Fix command:
$ cd /Users/user/my-react-app
$ npm install [email protected] [email protected]
$ node scan.js ~/projects -r --json > results.json
{
"vulnerability": "CVE-2025-55182",
"severity": "CRITICAL",
"cvss": 10.0,
"scanned": 5,
"vulnerable": 2,
"results": [
{
"path": "/Users/user/projects/app1",
"vulnerable": true,
"packages": [
{
"name": "react",
"version": "19.0.0",
"fixVersion": "19.2.1"
}
],
"packageManager": "npm",
"fixCommands": [
"cd /Users/user/projects/app1",
"npm install [email protected]"
]
}
]
}
.github/workflows/security-scan.yml
name: CVE-2025-55182 Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Download CVE-2025-55182 Scanner
run: |
curl -O https://raw.githubusercontent.com/nxgn-kd01/cve-2025-55182-scanner/main/scan.js
chmod +x scan.js
- name: Scan for vulnerabilities
run: node scan.js --ci
GitLab CI (.gitlab-ci.yml)
security-scan:
stage: test
image: node:18
script:
- curl -O https://raw.githubusercontent.com/nxgn-kd01/cve-2025-55182-scanner/main/scan.js
- chmod +x scan.js
- node scan.js --ci
allow_failure: false
Сканер выполняет следующие проверки:
package.jsondependencies и devDependencies'use server' в исходных файлах'use server' (указывает на использование Server Functions)Сканер включает интеллектуальное определение для предотвращения ложных срабатываний:
output: 'export', помечаются как вероятно безопасные'use server' для подтверждения фактического использования Server ComponentsПример вывода:
✓ No vulnerable projects found
ℹ Projects with analysis notes:
1. /path/to/project
ℹ Next.js ^15.1.3 is in vulnerable range, but using React 18 (safe - only React 19 affected)
2. /path/to/another-project
ℹ Next.js 16.0.5 with React 19 detected, but no 'use server' directives found (likely safe).
Note: dynamically imported Server Functions require manual review.
node scan.js -r
Для каждого уязвимого проекта выполните предложенную команду исправления:
cd /path/to/project
npm install [email protected] [email protected] # Пример
Или с yarn:
yarn upgrade [email protected] [email protected]
Или с pnpm:
pnpm update [email protected] [email protected]
npm test
npm run build
node scan.js --ci
О: В настоящее время сканер проверяет прямые зависимости в package.json. Для глубокого сканирования зависимостей используйте npm audit или yarn audit в сочетании с этим инструментом.
О: Нет, React 18 НЕ затронут ✅
CVE-2025-55182 затрагивает только Server Components в React 19.x. Сканер корректно определит приложения на React 18 как безопасные, даже если они используют Next.js 15.x или 16.x в уязвимом диапазоне версий.
О: Да! Используйте флаг --ci, чтобы сканер завершался с кодом 1 при обнаружении уязвимостей, что приведёт к провалу конвейера. См. примеры интеграции с CI/CD выше.
О: Временные меры смягчения (обновление — единственное окончательное решение):
⚠️ Важно: Это лишь временные меры. Обновитесь до исправленных версий как можно скорее.
О: Очень точен благодаря интеллектуальному предотвращению ложных срабатываний:
'use server' для подтверждения фактической уязвимостиО: Сканер определяет директивы 'use server' в ваших исходных файлах. Однако динамически импортируемые Server Functions (загружаемые во время выполнения через import()) могут не обнаруживаться статически. Если сканер сообщает «директивы 'use server' не найдены», но вы используете динамические импорты для Server Functions, вам следует вручную просмотреть эти файлы. Сканер включит примечание, напоминающее об этом.
Вклад приветствуется! Пожалуйста, не стесняйтесь отправлять issues или pull request.
# Тестирование на тестовых проектах
./test-scanner.sh
Этот сканер определяет все основные фреймворки с поддержкой RSC согласно официальному бюллетеню React:
Для дополнительных фреймворков, пожалуйста, создайте issue или отправьте PR.
Лицензия MIT — см. файл LICENSE
Этот инструмент предоставляется сообществу как есть, чтобы помочь выявить уязвимые проекты. Всегда проверяйте результаты сканирования и тестируйте обновления в безопасной среде перед развёртыванием в production.
Если вы находите этот инструмент полезным, пожалуйста:
Будьте в безопасности и следите за обновлениями зависимостей!
| Свойство | Значение |
|---|
| ID CVE | CVE-2025-55182 |
| Название | React2Shell |
| Оценка CVSS | 10.0 (КРИТИЧЕСКАЯ) |
| Вектор CVSS | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Вектор атаки | Сеть |
| Аутентификация | Не требуется |
| Воздействие | Полная компрометация системы |
15.5.616.0.0 — 16.0.9| Параметр | Описание |
|---|
-r, --recursive | Сканировать все подкаталоги на наличие Node.js-проектов |
-v, --verbose | Показать подробный вывод |
--json | Вывести результаты в формате JSON |
--ci | Выход с кодом 1 при обнаружении уязвимостей (для CI/CD) |
-h, --help | Показать справочное сообщение |