🔴 CVSS 10.0 / 10.0 — МАКСИМАЛЬНАЯ УГРОЗА

React2Shell: Критическая RCE в React 19

CVE-2025-55182 — удалённое выполнение кода без аутентификации
Активная эксплуатация китайскими группами угроз в течение нескольких часов после раскрытия

CVE ID
CVE-2025-55182
CVSS Score
10.0 🔴
Раскрыта
3 декабря 2025
Статус
Активная эксплуатация
🔥

Критическая ситуация

Что происходит прямо сейчас

CVE-2025-55182
🔥 CRITICAL CVSS 10.0

3 декабря 2025 года была раскрыта критическая уязвимость Remote Code Execution в протоколе Flight, используемом React Server Components. React2Shell позволяет атакующему выполнить произвольный код на сервере без аутентификации через отправку специально сформированного HTTP-запроса.

Тип атаки
RCE (Remote Code Execution)
Аутентификация
НЕ ТРЕБУЕТСЯ ❌
Уязвимые версии
19.0.0 - 19.2.0
Исправлено в
19.0.1, 19.1.2, 19.2.1

Масштаб угрозы

11-55М
Уязвимых сайтов
10.0
CVSS Score
<24ч
До начала эксплуатации
100%
Успех атаки
🌍 Глобальная угроза

React используется на десятках миллионов сайтов по всему миру:

  • По консервативным оценкам: более 11 миллионов сайтов используют React (данные 2025 года)
  • По другим данным: свыше 55 миллионов сайтов построены на React
  • Популярные сервисы: Facebook, Instagram, Netflix, Airbnb, Uber, WhatsApp Web
  • Корпоративный сектор: тысячи enterprise-приложений
  • Государственные сервисы: множество правительственных порталов

Китайские группы угроз начали эксплуатировать уязвимость в течение нескольких часов после её публичного раскрытия, по данным Amazon AWS Security.

⚠️ Немедленные действия
  1. Проверьте версию React в вашем проекте немедленно
  2. Обновите до безопасной версии (19.0.1, 19.1.2 или 19.2.1)
  3. Проверьте логи сервера на предмет подозрительной активности
  4. Проверьте процессы — нет ли новых пользователей или майнеров
  5. Измените все пароли и ключи если обнаружена компрометация
💀

Реальный случай компрометации

Опыт администратора: от уязвимости до майнера

🎯 История взлома

Что произошло

Администратор сервера обнаружил компрометацию после эксплуатации уязвимости CVE-2025-55182. В системе был обнаружен:

  • Новый пользователь в системе — создан без ведома администратора
  • Криптомайнер XMRig — активно использовал CPU для майнинга Monero
  • Высокая нагрузка CPU — до 100% на всех ядрах
  • Подозрительные процессы — скрытые под легитимными именами
  • Backdoor для постоянного доступа — возможность повторного входа

Как это обнаружили

🔍 Команды для обнаружения компрометации Bash
# Проверка новых пользователей
cat /etc/passwd | tail -n 10

# Поиск подозрительных процессов
ps aux | grep -i xmrig
ps aux | grep -i miner
ps aux | sort -nrk 3,3 | head -n 10  # Топ по CPU

# Проверка сетевых соединений
netstat -tunlp | grep ESTABLISHED
ss -tunlp | grep :3333  # Порт майнинг-пула

# Поиск подозрительных файлов
find / -name "*xmrig*" 2>/dev/null
find / -name "*miner*" 2>/dev/null
find /tmp -type f -executable 2>/dev/null

# Проверка crontab
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/

# Проверка автозагрузки
systemctl list-units --type=service --state=running
ls -la /etc/systemd/system/

Типичные признаки майнера XMRig

  • Процесс с высоким CPU: 90-100% нагрузка на ядра
  • Подозрительные имена: kswapd0, systemd-journal, [kworker/0:1]
  • Сетевые соединения: к адресам майнинг-пулов (порты 3333, 5555, 7777)
  • Файлы в /tmp или /var/tmp: исполняемые без расширения
  • Скрытые процессы: начинаются с точки или пробела
  • Автозапуск: через cron, systemd или rc.local

Что делать при обнаружении

🛡️ Немедленные действия Bash
# 1. Остановить подозрительные процессы
killall -9 xmrig
pkill -9 -f miner

# 2. Удалить созданного пользователя
userdel -r suspicious_user

# 3. Найти и удалить майнер
find / -name "*xmrig*" -exec rm -f {} \;
find /tmp /var/tmp -type f -executable -delete

# 4. Очистить crontab
crontab -r
rm -f /etc/cron.d/*suspicious*

# 5. Удалить systemd сервисы
systemctl stop suspicious.service
systemctl disable suspicious.service
rm /etc/systemd/system/suspicious.service

# 6. Проверить SSH ключи
cat ~/.ssh/authorized_keys
rm ~/.ssh/authorized_keys  # если есть неизвестные ключи

# 7. Изменить все пароли
passwd root
passwd your_user

# 8. Проверить и восстановить файлы
rpm -Va  # для CentOS/RHEL
debsums -c  # для Debian/Ubuntu

# 9. Обновить систему
apt update && apt upgrade -y  # Debian/Ubuntu
yum update -y  # CentOS/RHEL

# 10. Перезагрузить сервер
reboot
🚨 Важно: После компрометации

Если ваш сервер был скомпрометирован:

  • Считайте, что все данные могли быть украдены
  • Измените все пароли к базам данных, API, сервисам
  • Ротируйте все SSH ключи и сертификаты
  • Проверьте логи за последние недели
  • Рассмотрите полное восстановление системы из бэкапа
  • Уведомите пользователей о возможной утечке данных
🔍

Как проверить свой проект

Пошаговая диагностика

Шаг 1: Проверка версии React

📦 Проверка установленных пакетов Bash
# Проверить версию React
npm list react react-dom

# Или через package.json
cat package.json | grep -E "react|react-dom"

# Пример УЯЗВИМОГО вывода:
# ├── react@19.0.0  ❌ УЯЗВИМО!
# └── react-dom@19.0.0  ❌ УЯЗВИМО!

# Пример БЕЗОПАСНОГО вывода:
# ├── react@19.2.1  ✅ БЕЗОПАСНО
# └── react-dom@19.2.1  ✅ БЕЗОПАСНО
🔐 Автоматическая проверка безопасности Bash
# NPM audit
npm audit

# Yarn audit
yarn audit

# PNPM audit
pnpm audit

# Вывод покажет CVE-2025-55182 если уязвимо

Шаг 2: Проверка использования RSC

💡 Важно

Уязвимость затрагивает только проекты с React Server Components. Обычные клиентские React приложения (без 'use server') не уязвимы.

🔍 Поиск серверных компонентов Bash
# Поиск файлов с 'use server'
grep -r "use server" src/ app/

# Проверка RSC пакетов
npm list | grep "react-server-dom"

# Проверка Next.js конфигурации
cat next.config.js | grep -i server

# Проверка React Router
npm list react-router

Шаг 3: Проверка сервера на компрометацию

🕵️ Проверка признаков взлома Bash
# 1. Проверка новых пользователей (создан за последние 7 дней)
find /home -maxdepth 1 -type d -mtime -7

# 2. Проверка подозрительных процессов
ps aux | grep -E "xmrig|miner|crypto"
top -b -n 1 | head -20

# 3. Проверка сетевых соединений к майнинг-пулам
netstat -tunlp | grep -E "3333|5555|7777|14444"

# 4. Проверка недавно измененных файлов
find /tmp /var/tmp -type f -mtime -7
find /usr/bin /usr/local/bin -type f -mtime -7

# 5. Проверка cron jobs
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/

# 6. Проверка systemd сервисов
systemctl list-units --type=service --state=running | grep -v "loaded active"

# 7. Проверка логов на подозрительную активность
journalctl -u node --since "1 week ago" | grep -i error
tail -n 1000 /var/log/syslog | grep -E "unauthorized|failed|invalid"

# 8. Проверка истории команд
history | grep -E "wget|curl|chmod|useradd"
🛠️

Как исправить уязвимость

Обновление до безопасной версии

✅ Безопасные версии
  • React 19.0.1+ (для ветки 19.0.x)
  • React 19.1.2+ (для ветки 19.1.x)
  • React 19.2.1+ (для ветки 19.2.x — рекомендуется)

Способ 1: Быстрое обновление (NPM)

⚡ Обновление через NPM Bash
# 1. Обновить React до последней безопасной версии
npm install react@19.2.1 react-dom@19.2.1

# 2. Автоматическое исправление всех уязвимостей
npm audit fix

# 3. Если требуется force update
npm audit fix --force

# 4. Обновить зависимости
npm update

# 5. Проверить что уязвимость устранена
npm audit

# Должно вывести:
# found 0 vulnerabilities ✅

Способ 2: Обновление через Yarn

🧶 Обновление через Yarn Bash
# 1. Обновить React
yarn upgrade react@19.2.1 react-dom@19.2.1

# 2. Проверить уязвимости
yarn audit

# 3. Переустановить все зависимости
yarn install

# 4. Проверка
yarn audit

Способ 3: Ручное обновление package.json

📝 Редактирование package.json JSON
{
  "dependencies": {
    // ❌ БЫЛО (уязвимо):
    // "react": "^19.0.0",
    // "react-dom": "^19.0.0"

    // ✅ СТАЛО (безопасно):
    "react": "^19.2.1",
    "react-dom": "^19.2.1",

    // Также обновите связанные пакеты:
    "react-router": "^6.28.0",
    "react-router-dom": "^6.28.0",
    "next": "^15.1.0"  // если используете Next.js
  },
  "devDependencies": {
    "@types/react": "^19.0.2",
    "@types/react-dom": "^19.0.2"
  }
}
🔄 После изменения package.json Bash
# 1. Удалить старые зависимости
rm -rf node_modules package-lock.json

# 2. Переустановить
npm install

# 3. Проверить безопасность
npm audit

# 4. Пересобрать проект
npm run build

# 5. Перезапустить приложение
pm2 restart all  # если используете PM2
# или
systemctl restart your-app

Проверка после обновления

✅ Финальная проверка Bash
# 1. Проверить установленные версии
npm list react react-dom

# Вывод должен показать:
# ├── react@19.2.1 ✅
# └── react-dom@19.2.1 ✅

# 2. Запустить audit
npm audit
# found 0 vulnerabilities ✅

# 3. Проверить работу приложения
npm run dev
# или
npm start

# 4. Проверить логи
tail -f logs/app.log
journalctl -u your-app -f

⚡ Обновите немедленно!

Активная эксплуатация происходит прямо сейчас.
Каждая минута увеличивает риск полной компрометации сервера

Заключение

Критически важная информация

🚨 Ключевые выводы
  • CVE-2025-55182 (React2Shell) — критическая уязвимость с CVSS 10.0/10.0
  • Активная эксплуатация происходит прямо сейчас
  • 11-55 миллионов сайтов потенциально уязвимы
  • Не требуется аутентификация для эксплуатации
  • Полная компрометация сервера возможна за считанные секунды
  • Реальные случаи взлома с установкой майнеров XMRig

🔥 Действуйте немедленно!

Если вы используете React 19.0.0, 19.1.0, 19.1.1 или 19.2.0 с Server Components:

  1. Немедленно обновите React до 19.2.1
  2. Проверьте сервер на признаки компрометации
  3. Измените все критичные пароли и ключи
  4. Настройте мониторинг и алерты
  5. Включите WAF с правилами против React2Shell

💡 Помните

Безопасность — это не одноразовое действие, а непрерывный процесс. После обновления продолжайте следить за новостями безопасности, используйте автоматические инструменты проверки зависимостей и регулярно обновляйте все компоненты вашего приложения.