
Aviso y análisis de CVE-2025-55182 (React2Shell), RCE por deserialización de RSC Flight, con desglose de la causa raíz, flujo de ataque, diff del parche y reglas de detección para Sigma/Suricata/WAF.
Fecha de última verificación: 2026-11-04 (KST). Cada cifra se ha consignado únicamente con el valor confirmado en las fuentes de la sección References inferior, y cuando los valores difieren entre fuentes se han indicado todos.
Function y ejecutar JavaScript arbitrario.react-server-dom-webpack / -parcel / -turbopack 19.0.0, 19.1.0, 19.1.1, 19.2.0 y los frameworks que los utilizan — representativamente Next.js 15.x / 16.x App Router. Aunque no se definan Server Functions directamente, basta con que se soporte RSC para verse afectado.| Elemento | Contenido |
|---|---|
| ID de CVE | CVE-2025-55182 (React) / CVE-2025-66478 para Next.js fue rechazado por duplicado (Rejected) |
| Alias | React2Shell |
| Fecha de divulgación | 2025-12-03 (aviso del equipo de React, parche publicado el mismo día) |
| Descubridor | Lachlan Davidson (reportado el 2025-11-29 mediante Meta Bug Bounty) |
| Productos/versiones afectados | react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack 19.0.0, 19.1.0, 19.1.1, 19.2.0 / Next.js 14.3.0-canary.77 y posteriores canary, 15.x, 16.x (App Router) |
| Versiones parcheadas | Corrección de RCE: React 19.0.1 / 19.1.2 / 19.2.1, Next.js 15.0.5 / 15.1.9 / 15.2.6 / 15.3.6 / 15.4.8 / 15.5.7 / 16.0.7 Versión final recomendada (incluye vulnerabilidades posteriores): React 19.0.3 / 19.1.4 / 19.2.3 (véase "Vulnerabilidades posteriores" más abajo) |
| CVSS v3.1 | 10.0 Crítico — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| CVSS v4.0 | No confirmado en fuentes primarias en el momento de redacción de este documento |
| CWE | CWE-502 Deserialization of Untrusted Data (Vercel GHSA-9qr9-h5gf-34mp, GitLab Advisory DB). La entrada de CISA KEV no indica CWE |
| Explotación real | Explotación confirmada. Incluido en CISA KEV el 2025-12-05, plazo de actuación para agencias federales el 2025-12-12, uso en campañas de ransomware: Known. AWS observó intentos de explotación en cuestión de horas tras la divulgación |
| Componente | Versiones afectadas | Versión corregida |
|---|---|---|
react-server-dom-webpack / -parcel / -turbopack | 19.0.0 | 19.0.1 (recomendado 19.0.3) |
| 〃 | 19.1.0, 19.1.1 | 19.1.2 (recomendado 19.1.4) |
| 〃 | 19.2.0 | 19.2.1 (recomendado 19.2.3) |
| Next.js 15.x (App Router) | Anterior al parche 15.0 ~ 15.5 | 15.0.5 / 15.1.9 / 15.2.6 / 15.3.6 / 15.4.8 / 15.5.7 |
| Next.js 16.x (App Router) | Inferior a 16.0.7 | 16.0.7 |
| Next.js canary | 14.3.0-canary.77 o superior | 15.6.0-canary.58 / 16.1.0-canary.12 (los usuarios de 14.3 canary deben degradar a 14.x stable) |
| Otras herramientas de integración RSC | React Router (unstable RSC API), Waku, plugin RSC de Parcel, plugin RSC de Vite (@vitejs/plugin-rsc), RedwoodSDK, Expo, etc. | La versión más reciente de cada herramienta + react-server-dom-* parcheado |
No afectados: aplicaciones React puramente de cliente que no usan servidor, Next.js 13.x / 14.x stable, aplicaciones con Pages Router, despliegues en Edge Runtime.
Tras el parche de React2Shell, investigaciones adicionales sobre RSC revelaron de forma consecutiva vulnerabilidades que no son RCE. El RCE en sí se corrigió en 19.0.1 / 19.1.2 / 19.2.1, pero para bloquear también las vulnerabilidades siguientes se requiere la versión más reciente.
| CVE | Tipo | CVSS v3.1 | Publicado | Versión corregida |
|---|---|---|---|---|
| CVE-2025-55184 | Denegación de servicio (DoS) | 7.5 | 2025-12-11 | 19.0.2 / 19.1.3 / 19.2.2 (incompleto) |
| CVE-2025-55183 | Exposición de código fuente | 5.3 | 2025-12-11 | 19.0.2 / 19.1.3 / 19.2.2 |
| CVE-2025-67779 | DoS debido al parche incompleto de CVE-2025-55184 | 7.5 | 2025-12-12 | 19.0.3 / 19.1.4 / 19.2.3 |
Algunos artículos de proveedores de seguridad (por ejemplo, la actualización de Zscaler) afirman que "el parche original de CVE-2025-55182 era incompleto". Sin embargo, según los avisos de React y GitLab, lo que era incompleto era la corrección del DoS (CVE-2025-55184), y no se ha podido confirmar ninguna fuente primaria que indique que la corrección del RCE fue eludida. En cualquier caso, la acción recomendada es actualizar a 19.0.3 / 19.1.4 / 19.2.3 o superior.
| Fecha | Evento |
|---|---|
| 2025-11-29 | Lachlan Davidson lo reporta a través de Meta Bug Bounty |
| 2025-11-30 | Los investigadores de seguridad de Meta lo confirman e inician la corrección con el equipo de React |
| 2025-12-03 | Se publican el aviso y el parche de React (19.0.1 / 19.1.2 / 19.2.1) y el aviso de Next.js (CVE-2025-66478). Los proveedores de nube y WAF, tras recibir información previa, despliegan reglas de protección |
| 2025-12-03 ~ 04 | AWS observa intentos de explotación por parte de grupos vinculados a China (Earth Lamia, Jackpot Panda) en cuestión de horas tras la divulgación. Zscaler observa más de 4.100 intentos de explotación durante las primeras 2 horas |
| 2025-12-05 | Inclusión en CISA KEV (fecha límite 12-12). Microsoft detecta actividad de explotación real a partir de este día |
| 2025-12-11 | Se publican las vulnerabilidades posteriores CVE-2025-55184 / 55183 |
| 2025-12-12 | Se publica CVE-2025-67779 (parche incompleto) y se distribuyen 19.0.3 / 19.1.4 / 19.2.3 |
| 2025-12-15 | Microsoft publica el análisis de la actividad posterior a la explotación y una guía de hunting |
RSC intercambia datos entre cliente y servidor mediante un protocolo de serialización propio llamado Flight. Cuando el cliente invoca una Server Function, el navegador envía los argumentos en una solicitud POST multipart/form-data, y cada campo del formulario se convierte en un chunk numerado.
$<id> es una referencia al valor de otro chunk, $@<id> es una referencia al propio objeto chunk, y $B<id> indica el procesamiento de un Blob.then(). Cuando await de JavaScript encuentra un thenable, llama a then(), y si el resultado es a su vez otro thenable, continúa llamándolo de forma recursiva.getOutlinedModel()getOutlinedModel() del manejador de respuestas Flight del lado del servidor (packages/react-server/src/ReactFlightReplyServer.js) divide las referencias con forma $<id>:<prop1>:<prop2> tomando : como separador y recorre las propiedades del chunk destino en el orden chunk[prop1][prop2].
En este punto, no se validaba si el nombre de la propiedad era una propiedad propia (own property) del objeto. Por lo tanto, era posible acceder a propiedades heredadas con nombres como __proto__, constructor o prototype.