CVE-2025-55182 – Deserialization RCE en React Server Components (Next.js)
1. Contexto técnico
CVE-2025-55182 es una vulnerabilidad de deserialización que afecta implementaciones de React Server Components (RSC) en entornos Next.js.
El problema surge en la forma en que el servidor interpreta datos serializados enviados por el cliente hacia Server Actions. Cuando el backend procesa estructuras manipuladas, se produce una condición donde código arbitrario puede ser evaluado dentro del runtime de Node.js.
No es un bug superficial. Es un fallo de diseño en el manejo de datos confiados en un canal que debería ser estrictamente tipado y validado.
2. Raíz del problema: deserialización insegura
En arquitecturas modernas con RSC, el cliente envía estructuras serializadas que el servidor reconstruye dinámicamente. Si el mecanismo de reconstrucción no valida correctamente:
-
El tipo esperado
-
La forma del objeto
-
El contexto permitido
-
Los identificadores de acción
entonces se abre la puerta a invocar constructores inesperados o funciones dinámicas.
La clave aquí es el abuso de referencias internas como:
#constructor
y la posibilidad de inducir la evaluación de contenido dinámico en el contexto del servidor.
En entornos Node.js, cualquier punto que permita ejecución dinámica termina interactuando indirectamente con:
-
(
Function()) -
(
eval) -
(
import()) -
(
child_process) -
(
dynamic binding de módulos)
Y ahí es donde el riesgo escala a RCE.
3. ¿Por qué es/fue crítica?
Porque:
-
No requiere autenticación.
-
Se ejecuta con los privilegios del proceso Node.
-
Permite interacción directa con el sistema operativo si no hay sandboxing.
Si el servidor corre como www-data, ese es el nivel inicial. Si corre con permisos elevados en contenedores mal configurados, el impacto es mayor. Si existe mala segmentación, puede convertirse en pivot lateral.
Este tipo de vulnerabilidad no es solo “ejecución remota”. Es ruptura del modelo de confianza de Server Components.
4. Superficie técnica afectada
Requisitos típicos para que sea explotable:
-
Node.js backend.
-
React Server Components habilitado.
-
Server Actions expuestas.
-
Deserialización permisiva.
-
Ausencia de validación estricta del identificador de acción.
En términos arquitectónicos, el problema ocurre en el boundary entre cliente y servidor donde se asume que el payload serializado respeta el contrato interno.
Cuando ese contrato se rompe, el servidor termina ejecutando lógica que nunca debió estar expuesta.
5. Análisis del vector
El patrón observado consiste en:
-
Envío de estructura multipart manipulada.
-
Inserción de payload serializado que referencia constructor dinámico.
-
Evaluación del payload dentro del runtime.
-
Posible ejecución de comandos del sistema si se logra acceso a child_process.
Aquí el verdadero problema no es child_process. El problema es permitir que datos controlados por el usuario influyan en qué código se ejecuta.
Eso es textbook deserialización insegura.
6. Cierre
Este tipo de vulnerabilidad demuestra algo interesante: Las arquitecturas modernas abstraen complejidad, pero cada capa de abstracción introduce un nuevo límite de confianza.
React Server Components prometen eficiencia y simplicidad pero si el modelo de serialización no está blindado, se convierte en un canal de ejecución. El aprendizaje no fue “Node es inseguro” mas bien cualquier sistema que reconstruya objetos dinámicamente desde datos externos debe asumir hostilidad por defecto.
Deserialización insegura no es un bug raro. Es una categoría recurrente en la historia de la seguridad desde 2016-2017.
7. Agradecimiento
Como lo hemos visto en todos mis post’s honor a quien honor merece.
Primero los que publicaron deserializacion por primera vez, me refiero a deserialization - Alvaro Muñoz, PDF.
Como lo puse en mi publicacion Repositorio con codigo automatizado, yo solo aporte a mi amigo Emiyelbarto, gracias a el tuvimos la primera PoC completa.
Tambien desarrolle una herramienta para automatizar la busqueda de deserializacion, recordemos que la premisa de estas vulnerabilidades dependen de alguna lectura de archivos o una prueba de caja blanca-gris que te permita ver el codigo Tool Desearch.
Muchas gracias ala persona que lo encontro sobre todo.
hacktheplanet