
react CVE-2025-55182
Severidad: Crítica — CVSS 10.0
CWE: CWE-502 (Deserialización de Datos No Confiables)
Vendedor: Meta (Facebook)
Divulgado: 3 de diciembre de 2025
CVE-2025-55182 es una vulnerabilidad de ejecución remota de código (RCE) sin autenticación de máxima gravedad en los Componentes de Servidor React (RSC), apodada React2Shell. La falla reside en cómo React decodifica los payloads enviados a los endpoints de las Funciones de Servidor React a través del protocolo Flight. Un atacante puede enviar una única solicitud HTTP POST especialmente diseñada a un servidor vulnerable y ejecutar código arbitrario — sin credenciales, sin interacción del usuario requerida.
Las aplicaciones que no exponen endpoints explícitos de Funciones de Servidor aún son vulnerables si soportan Componentes de Servidor React.
| Paquete | Versiones Vulnerables | Versiones Parcheadas |
|---|---|---|
react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
Frameworks afectados (cuando usan paquetes React vulnerables): Next.js 15.x / 16.x (App Router), React Router, Waku, RedwoodSDK, Parcel RSC, plugin Vite RSC.
| Métrica | Valor |
|---|---|
| Vector de Ataque | Red |
| Complejidad de Ataque | Baja |
| Privilegios Requeridos | Ninguno |
| Interacción del Usuario | Ninguna |
| Alcance | Cambiado |
| Confidencialidad | Alta |
| Integridad | Alta |
| Disponibilidad | Alta |
| Puntuación Total | 10.0 (Crítica) |
Cadena de vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Los Componentes de Servidor React utilizan un formato de cable binario llamado protocolo Flight para transmitir árboles de componentes del servidor al cliente. El mismo protocolo maneja las Funciones de Servidor (anteriormente Acciones de Servidor) — endpoints invocables que aceptan argumentos serializados del navegador.
La vulnerabilidad está en el deserializador: cuando React procesa un payload Flight, puede ser engañado para instanciar objetos arbitrarios del lado del servidor, lo que lleva a un RCE completo. Debido a que el endpoint Flight se expone por defecto siempre que RSC está habilitado, y porque no existe una puerta de autenticación a nivel de protocolo, la explotación solo requiere acceso de red al servidor.
La plantilla incluida CVE-2025-55182.yaml utiliza tres métodos de detección complementarios.
Envía un POST mínimo con Content-Type: text/x-component a la ruta raíz. Un servidor RSC vulnerable (o accesible) responde con el mismo content-type y un cuerpo de flujo Flight cuyas filas comienzan con IDs de fila alfanuméricos seguidos de dos puntos (por ejemplo 0:, 1:) o sigilos de referencia de React ($L, $S, $I, $@).
POST / HTTP/1.1
Content-Type: text/x-component
Accept: text/x-component, */*
Condición de coincidencia: HTTP 200 + cabecera text/x-component + regex de flujo Flight en el cuerpo.
Next.js señaliza solicitudes RSC mediante la cabecera RSC: 1 y el parámetro de consulta ?_rsc=. Esta solicitud imita una precarga del navegador para confirmar que el endpoint Flight del App Router es accesible.
GET /?_rsc=1 HTTP/1.1
Accept: text/x-component
RSC: 1
Next-Router-State-Tree: %5B%22%22%2C%7B%7D%5D
Condición de coincidencia: HTTP 200 + cabecera text/x-component.
Envía un payload Flight mínimo malformado junto con una cabecera Next-Action (el mecanismo utilizado para invocar Funciones de Servidor). Un servidor vulnerable intenta deserializar el payload; incluso una respuesta de error que incluya cabeceras específicas de RSC confirma que el endpoint existe.
POST / HTTP/1.1
Content-Type: text/x-component
Next-Action: 0000000000000000000000000000000000000000
Condición de coincidencia: HTTP 200/400/500 + cabecera text/x-component o x-action-revalidated.
Escanea archivos *.json locales (por ejemplo package-lock.json, yarn.lock) en busca de los nombres de paquetes vulnerables combinados con una expresión regular de versión que coincida con 19.0.0, 19.1.0, 19.1.1 o 19.2.0. Útil para auditar repositorios o pipelines CI sin enviar tráfico de red.
# Instalar / Actualizar Nuclei
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -target CVE-2025-55182.yaml -u https://target.example.com
nuclei -target CVE-2025-55182.yaml -l targets.txt
nuclei -target CVE-2025-55182.yaml -target ./path/to/project
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -v -je results.json
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -rl 10 -timeout 10
Actualice inmediatamente a una versión parcheada:
# npm
npm install react-server-dom-webpack@latest
# yarn
yarn upgrade react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
# pnpm
pnpm update react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
Versiones mínimas seguras por rama:
| Rama | Versión Mínima Segura |
|---|---|
| 19.0.x | 19.0.1 |
| 19.1.x | 19.1.2 |
| 19.2.x | 19.2.1 |
Mitigaciones temporales (si la actualización no es posible de inmediato):
text/x-component en solicitudes POST entrantes (las reglas de Google Cloud Armor están disponibles públicamente para este CVE).package-lock.json, node_modules o un SBOM.