- Se descubrieron y divulgaron nuevas vulnerabilidades de denegación de servicio (DoS) y exposición de código fuente en React Server Components
- Estas vulnerabilidades no permiten ejecución remota de código (RCE), pero sí implican riesgo de caída del servidor o filtración de código
- Los paquetes afectados son
react-server-dom-webpack, react-server-dom-parcel y react-server-dom-turbopack en las versiones 19.0.0~19.2.2; las versiones corregidas son 19.0.3, 19.1.4 y 19.2.3
- La vulnerabilidad DoS (CVE-2025-55184, CVE-2025-67779) puede provocar un bucle infinito en el servidor mediante solicitudes HTTP maliciosas, y la vulnerabilidad de exposición de código fuente (CVE-2025-55183) puede devolver parte del código de funciones del servidor
- El equipo de React recomienda actualizar de inmediato y explica que esta divulgación adicional forma parte del proceso normal del ciclo de respuesta de seguridad
Resumen de las nuevas vulnerabilidades divulgadas
- Investigadores de seguridad descubrieron dos vulnerabilidades adicionales mientras verificaban el parche de una vulnerabilidad crítica divulgado la semana pasada
- Las nuevas vulnerabilidades no permiten ejecución remota de código (RCE), y el parche existente de React2Shell sigue siendo válido
- Las vulnerabilidades recién divulgadas son las siguientes
- Denegación de servicio (DoS) — CVE-2025-55184, CVE-2025-67779 (CVSS 7.5, gravedad alta)
- Exposición de código fuente — CVE-2025-55183 (CVSS 5.3, gravedad media)
- El equipo de React recomienda actualizar de inmediato
Incompletitud del parche anterior
- El parche de las versiones 19.0.2, 19.1.3 y 19.2.2 distribuido la semana pasada fue incompleto, por lo que se requiere otra actualización
- La corrección completa está incluida en las versiones 19.0.3, 19.1.4 y 19.2.3
- Deben seguirse las instrucciones de actualización de la publicación anterior
- Se divulgarán más detalles una vez finalice la distribución del parche
Paquetes y versiones afectadas
- Las vulnerabilidades existen en los mismos paquetes y versiones que CVE-2025-55182
- Versiones afectadas: 19.0.0~19.2.2
- Paquetes afectados:
react-server-dom-webpack
react-server-dom-parcel
react-server-dom-turbopack
- Versiones corregidas: 19.0.3, 19.1.4, 19.2.3
- Las aplicaciones que no usan servidor o no admiten React Server Components no están afectadas
Patrón general de divulgación de vulnerabilidades posteriores
- Después de la divulgación de un CVE crítico, a menudo se encuentran vulnerabilidades posteriores durante el análisis adicional de rutas de código relacionadas
- Se menciona como ejemplo el caso en que se reportaron CVE adicionales después de Log4Shell
- Estas divulgaciones adicionales significan que la respuesta de seguridad está funcionando con normalidad
Frameworks y bundlers afectados
- Los siguientes frameworks y bundlers incluyen o dependen de los paquetes vulnerables de React
next, react-router, waku, @parcel/rsc, @vitejs/plugin-rsc, rwsdk
- Deben seguirse las instrucciones de actualización de la publicación anterior
Medidas de mitigación de proveedores de hosting
- Se aplicaron medidas temporales de mitigación en colaboración con varios proveedores de hosting
- Sin embargo, no debe confiarse en estas medidas y es necesario actualizar de inmediato
Instrucciones relacionadas con React Native
- Los usuarios que solo usan React Native no necesitan acciones adicionales
- En un entorno monorepo, solo es necesario actualizar los siguientes paquetes
react-server-dom-webpack
react-server-dom-parcel
react-server-dom-turbopack
- No es necesario actualizar
react ni react-dom
- Los detalles relacionados pueden consultarse en el issue de GitHub de React Native
Gravedad alta: denegación de servicio (DoS)
- CVE-2025-55184, CVE-2025-67779, CVSS 7.5
- Si se envía una solicitud HTTP maliciosa al endpoint de funciones del servidor de React, puede producirse un bucle infinito durante la deserialización
- El proceso del servidor puede detenerse y consumir CPU de forma excesiva
- Incluso si no se implementa directamente el endpoint de funciones del servidor, una app que admita React Server Components puede ser vulnerable
- El parche distribuido hoy resuelve el problema al evitar el bucle infinito
- Como la corrección inicial fue incompleta, se complementó con una vulnerabilidad adicional (CVE-2025-67779)
Gravedad media: exposición de código fuente
- CVE-2025-55183, CVSS 5.3
- Una solicitud HTTP maliciosa puede devolver parte del código fuente de una función del servidor
- Ocurre cuando la función del servidor expone argumentos de tipo cadena de forma explícita o implícita
- En el código de ejemplo, podrían exponerse secretos hardcodeados como claves de conexión a base de datos
- El parche resuelve el problema al evitar la conversión a cadena del código fuente de funciones del servidor
- El alcance de la exposición se limita al código interno de la función del servidor, y los secretos de runtime (
process.env.SECRET, etc.) no están afectados
- Es necesario verificarlo con base en el bundle de producción
Línea de tiempo
- 3 de diciembre: Andrew MacPherson reporta la exposición de código a Vercel y Meta Bug Bounty
- 4 de diciembre: RyotaK reporta la vulnerabilidad DoS
- 6 de diciembre: El equipo de React confirma ambos problemas e inicia la investigación
- 7 de diciembre: Se redacta la corrección inicial y se establece el plan de validación
- 8 de diciembre: Se notifica a proveedores de hosting y proyectos open source
- 10 de diciembre: Se aplican medidas de mitigación y se completa la validación del parche
- 11 de diciembre: Shinsaku Nomura reporta un DoS adicional, y se divulgan CVE-2025-55183, 55184 y 67779
Reportantes
- Andrew MacPherson (AndrewMohawk) — reporte de exposición de código fuente
- RyotaK (GMO Flatt Security Inc) y Shinsaku Nomura (Bitforest Co., Ltd.) — reporte de vulnerabilidades de denegación de servicio
1 comentarios
Opiniones en Hacker News
React Server Components (RSC) siempre se sintió incómodo
Porque con solo ver el código JavaScript es difícil distinguir qué parte se ejecuta en el cliente y qué parte se ejecuta en el servidor
Además, para implementar esto se necesita un mecanismo RPC de serialización profundo, que es opaco para los desarrolladores y aumenta el riesgo de vulnerabilidades de seguridad
Pero al cambiar al app router, todo se volvió confuso. Como el código podía ejecutarse en ambos lados, objetos como Headers no siempre existían y era difícil saber qué se ejecuta y dónde
Cuando React+Next funciona bien, se siente como magia, pero al trabajar en equipo el problema es que la previsibilidad desaparece cada vez más
Los roles están claros, el trabajo es simple, y creo que es la opción más segura para la mayoría de los proyectos
Para landing pages o páginas de marketing, SSR puede ser útil, pero en apps como un dashboard SaaS común casi no aporta beneficios frente a la complejidad que añade
Queda la duda de si React solo recibe más atención por su popularidad o si estructuralmente es más riesgoso
La semana pasada estuve revisando RSC y la complejidad era demasiado alta, además de que casi no había documentación
React dice que todavía es una función experimental, pero NextJS ya lo desplegó ampliamente
Parece probable que aparezcan más problemas de seguridad, y el sistema de build de Next es tan complejo que hasta depurarlo resultó difícil
El costo es demasiado alto para los beneficios que ofrece
Por eso yo también dejé Next. La carga cognitiva era demasiado alta para lo poco que ofrecía a cambio
No solo con RSC, sino en general: las guías claras llegaron tarde y ni siquiera reconocían oficialmente herramientas como CRA
Recién ahora la documentación de useEffect mejoró, pero ya es demasiado tarde
Incluso en 2025, aunque sigo usándolo en el trabajo, todavía falta documentación clara
La idea central de un SPA era “enviar toda la app al cliente y solo intercambiar datos con el servidor”
Como en los antiguos .aspx Web Forms, cada clic e interacción se envía al servidor, y luego baja de nuevo el DOM modificado
En la práctica, es como haber vuelto al modelo anterior, y resulta algo absurdo
Da pena que se haya perdido ese “criterio para elegir la herramienta adecuada”
En este aviso de seguridad, la frase que más me llamó la atención fue que “cuando se descubre un CVE crítico, a menudo salen a la luz vulnerabilidades relacionadas”
Antes de explicar el alcance, el impacto o cómo mitigar el problema, parecía que intentaban justificar el CVE, y eso me inquietó
Artículo relacionado en Wikipedia
Hace 15 años, Opa ya había intentado algo parecido
Separaba automáticamente el código del cliente y del servidor, e introdujo una sintaxis similar a JSX
Pero al reforzar el análisis de seguridad, el compilador se volvió enorme, y al final quedó claro que era más importante una separación explícita que la idea de una sola app unificada
Tal vez algún día un LLM pueda generar este tipo de código automáticamente, pero por ahora creo que una estructura simple es mejor
Se están aplicando parches para bloquear problemas como la contaminación de prototipos en JS,
toStringen funciones y la sobrescritura de PromiseRSC distingue los entornos mediante validación estática con cosas como
import "server-only"oimport "client-only", así que a nivel estructural es un enfoque seguroReact era mejor cuando originalmente era pequeño y simple, cumpliendo solo el papel de View en MVC
Ahora tiene demasiadas funciones y da la impresión de haberse hinchado
git checkout v15.0.0RSC nunca debió existir
Para la mayoría de las apps basta con renderizar HTML en el servidor, y los casos donde realmente hace falta un SPA son muy pocos
RSC solo ha aumentado la complejidad y las vulnerabilidades de seguridad
Proyectos como Bun y Vercel venden la ilusión de una “utopía JS donde todo funciona perfecto”, así que parece difícil que esta tendencia desaparezca pronto
Hace tiempo discutí con Dan Abramov en X sobre RSC
Él decía que era una función innovadora, pero yo lo llamé una "pistola para dispararte en el pie". Al final, la realidad terminó yendo por ese camino
Pero se subestimó la posibilidad de errores a nivel de protocolo. Esta vulnerabilidad se concentra en el protocolo de serialización
La comunidad de seguridad apenas ahora lo está examinando a fondo, así que ojalá el equipo hubiera reaccionado antes
React pasó de ser una simple librería de renderizado a un runtime, y la complejidad explotó
En cambio, creo que Vue y Vite tienen un diseño mucho más elegante → sitio personal de Evan You
A veces los intentos audaces sí terminan siendo un home run
Si RSC es un intento de que el frontend se trague al backend, HTMX sería lo contrario
HTMX mantiene el límite cliente-servidor, así que del lado del backend es más seguro, pero en el frontend existe riesgo de XSS
Artículo relacionado
El equipo de Next anunció una nueva actualización de seguridad → NextJS Security Update 2025-12-11
Afecta a las versiones 14.x, 15.x y 16.x