Next.js: El colapso de seguridad

Una devastadora actualización de seguridad acaba de revelar 13 nuevas vulnerabilidades en Next.js, seis de ellas de alta gravedad. Analizamos los exploits y planteamos la pregunta crítica: ¿fueron los componentes de servidor un error?

Hero image for: Next.js: El colapso de seguridad
💡

Resumen / Puntos clave

Una devastadora actualización de seguridad acaba de revelar 13 nuevas vulnerabilidades en Next.js, seis de ellas de alta gravedad. Analizamos los exploits y planteamos la pregunta crítica: ¿fueron los componentes de servidor un error?

El día que se dispararon las alertas

Una nueva ola de pánico se extendió por la comunidad de desarrolladores tras un contundente anuncio de Vercel: 13 nuevas Common Vulnerabilities and Exposures (CVEs) afectaron simultáneamente a Next.js y React. Esta actualización de seguridad sin precedentes, detallada en el registro de cambios de mayo de 2026, puso inmediatamente en riesgo a innumerables aplicaciones en producción. El gran volumen de fallos llevó a voces destacadas, como el canal Better Stack, a declarar "I'm Done With NextJS...", señalando una frustración generalizada entre los desarrolladores.

Las clasificaciones de gravedad pintaron un panorama sombrío; seis de estas vulnerabilidades recibieron clasificaciones de gravedad 'alta', exigiendo atención urgente. Los fallos críticos incluyeron múltiples vectores de Denial of Denial of Service of Denial of Service, exploits severos de Server-Side Request Forgery (SSRF) —algunos señalados como de la más alta gravedad— y varias oportunidades de Cross-Site Scripting (XSS). Estas no eran debilidades teóricas, sino vías concretas para que los atacantes comprometieran datos de usuarios, deshabilitaran Denial of Services y eludieran las medidas de seguridad.

El impacto de estos CVEs abarcó múltiples versiones recientes de Next.js, haciendo que las actualizaciones inmediatas fueran innegociables para prácticamente todos los proyectos activos. Los parches abordaron problemas que iban desde bypasses de middleware, como la vulnerabilidad i18n de gravedad 7.5/10 en el Pages Router que exponía server-side props, hasta el envenenamiento de caché y otros problemas insidiosos. La resolución de Vercel fue clara: actualizar todas las instalaciones de Next.js sin demora para mitigar la exposición.

Esta última bomba de seguridad reaviva un debate persistente e inquietante dentro del ecosistema de React: ¿fueron los componentes de servidor un error? Muchas de las vulnerabilidades críticas, particularmente los ataques de Denial of Denial of Service of Denial of Service de gravedad 7.5/10, provienen directamente del React Flight Protocol, el formato de serialización subyacente para los componentes de servidor. Esto marca la tercera ola significativa de CVEs relacionados con componentes de servidor este año, planteando serias preguntas sobre la arquitectura de seguridad fundamental de este paradigma. Frameworks como TanStack Start, que evitan el paquete React Server DOM, permanecen inafectados, destacando una creciente divergencia en los perfiles de seguridad.

La puerta trasera desbloqueada: bypass de middleware i18n

Ilustración: La puerta trasera desbloqueada: bypass de middleware i18n
Ilustración: La puerta trasera desbloqueada: bypass de middleware i18n

Un crítico bypass de middleware i18n expuso aplicaciones construidas con el Pages Router de Next.js a acceso no autorizado a datos. Identificada como un CVE con una gravedad de 7.5 sobre 10, esta falla permitió a los atacantes eludir la lógica de autenticación diseñada para proteger datos sensibles del lado del servidor. La vulnerabilidad afectó específicamente a aplicaciones que utilizaban las características de internacionalización (i18n) de Next.js.

Explotar el bypass requería un esfuerzo mínimo. Un atacante primero obtenía el ID de compilación único de la aplicación (build ID), típicamente encontrado dentro del script `_next/data` en cualquier página renderizada. Con este ID, podían construir una URL directa, como `/_next/data/[build ID]/[page].json`, apuntando a páginas que dependían de `getServerSideProps` para la obtención de datos. Este acceso directo recuperaba la carga de datos de la página como JSON, eludiendo completamente cualquier verificación de autenticación implementada en el middleware de la aplicación.

El análisis de la causa raíz reveló una lógica defectuosa dentro de la integración i18n de Next.js. Cuando i18n estaba habilitado, el `middleware matcher` del framework no protegía adecuadamente la ruta base de una página (por ejemplo, `/secret`). Mientras que las variantes específicas de cada idioma como `/en/secret` o `/fr/secret` activaban correctamente la autenticación del `middleware`, el `endpoint` de datos sin procesar y no localizado permanecía desprotegido. Esto creó una brecha, permitiendo el acceso directo a información que de otro modo estaría protegida.

Las implicaciones fueron significativas para las aplicaciones que pasaban información sensible a través de `getServerSideProps`. Los usuarios no autorizados podían recuperar datos confidenciales —como correos electrónicos de usuarios, indicadores internos o titulares propietarios— sin iniciar sesión. Esto socavó los supuestos de seguridad fundamentales, demostrando cómo un sutil descuido en la configuración podría conducir a una grave filtración de datos en entornos de producción.

Tu lógica de autenticación es una mentira

El reciente bypass del `middleware` de i18n, un CVE con una calificación de severidad de 7.5, expuso una vulnerabilidad arquitectónica más profunda dentro de muchas aplicaciones Next.js. Los desarrolladores frecuentemente malinterpretan el `middleware` como un perímetro de seguridad definitivo, una idea errónea que el video "I'm Done With NextJS" desafía directamente. La propia documentación de Next.js aconseja no depender únicamente del `middleware` para la autorización crítica.

Las funciones de `middleware`, por diseño, sirven principalmente para la modificación de solicitudes, la redirección o el control de acceso básico. Operan en una capa `edge`, lo que las hace susceptibles a vectores de bypass específicos como la vulnerabilidad de i18n o el acceso directo a los `endpoints` de obtención de datos. Esta limitación inherente exige una estrategia de defensa en profundidad para una seguridad robusta de la aplicación.

La verdadera seguridad requiere verificaciones en cada capa, no solo en el `pipeline` de solicitud inicial. Implementa una autenticación y autorización completas directamente dentro de tus rutas de API del lado del servidor y funciones `getServerSideProps` o `getStaticProps`. Esto asegura que, incluso si el `middleware` falla o es eludido, los datos sensibles permanezcan protegidos por una validación explícita a nivel de servidor.

Depender exclusivamente del `middleware` para la autorización crítica crea vulnerabilidades peligrosas. Los atacantes pueden explotar los bypasses para: - Acceder a datos de usuario sensibles, como correos electrónicos o indicadores internos, desde las cargas útiles JSON de `_next/data`. - Eludir los controles de acceso basados en roles, obteniendo entrada no autorizada a interfaces administrativas. - Manipular el estado de la aplicación o realizar acciones típicamente restringidas a usuarios autenticados.

Para obtener más información sobre cómo estas vulnerabilidades pueden afectar las aplicaciones web, consulta recursos como Security Update: Multiple vulnerabilities in Next.js and React - Netlify. Este enfoque multicapa evita que un único punto de fallo comprometa la integridad de toda tu aplicación.

Colapsando servidores con una sola solicitud

Los atacantes también encontraron una vulnerabilidad crítica de Denial of Denial of Service of Denial of Service, dirigida a los componentes de servidor de Next.js y a cualquier framework que utilice el paquete React Server DOM. Esta falla, con una calificación de severidad de 7.5 sobre 10, expone las aplicaciones a ralentizaciones debilitantes con un esfuerzo mínimo. Los desarrolladores que utilizaban incluso las acciones de servidor más simples en sus aplicaciones Next.js eran vulnerables.

El mecanismo de explotación implica enviar una carga útil masivamente inflada al servidor. Los atacantes elaboran solicitudes que contienen miles de claves y punteros, específicamente diseñados para estresar las capacidades de procesamiento del servidor durante la fase de deserialización del React Flight Protocol. Este protocolo estandariza cómo React serializa los árboles de componentes y los datos entre el servidor y el cliente.

Esta estructura de datos aparentemente inofensiva desencadena un colapso algorítmico. El proceso de deserialización, cuando se enfrenta a una carga útil tan sobredimensionada y compleja, degenera en una complejidad cuadrática (K * N) de comparaciones de cadenas. Esto resulta en la asombrosa cifra de 200 millones de operaciones para una única solicitud malformada, superando con creces las cargas de procesamiento esperadas.

El impacto es inmediato y severo. Una solicitud que normalmente se resolvería en apenas 0.02 segundos se extiende a seis segundos después de una sola ejecución del exploit. Encadenar múltiples solicitudes de este tipo puede bloquear eficazmente los hilos del servidor, dejando la aplicación sin respuesta e inaccesible para los usuarios legítimos.

La Solución que Salvó el Protocolo de React

Ilustración: La Solución que Salvó el Protocolo de React
Ilustración: La Solución que Salvó el Protocolo de React

Los ingenieros de React y Next.js desarrollaron rápidamente un parche sofisticado para mitigar la vulnerabilidad de Denial of Denial of Service of Denial of Service (DoS) dentro del React Flight protocol. Este exploit permitía anteriormente a los atacantes sobrecargar los servidores con una única solicitud maliciosamente elaborada. La solución se centró principalmente en el proceso de deserialización, que antes tenía dificultades con estructuras de datos complejas.

Los desarrolladores implementaron un novedoso cursor-based system para deserializar flujos de datos entrantes. Este ingenioso enfoque procesa los intrincados árboles de componentes y datos del protocolo con una eficiencia notable. En lugar de analizar toda la carga útil varias veces, el sistema de cursor navega inteligentemente por los datos, optimizando el uso de recursos.

Esta hazaña de ingeniería mejoró drásticamente la complejidad computacional. El antiguo método de deserialización sufría de una complejidad K * N, donde K representaba la profundidad de los objetos anidados y N el número total de elementos, lo que provocaba ralentizaciones exponenciales. El nuevo sistema logra una complejidad lineal altamente eficiente, operando en N + K. Este cambio fundamental modificó radicalmente la forma en que el servidor procesa las cargas útiles.

El impacto en el rendimiento y la seguridad fue inmediato y profundo. Los puntos de referencia revelaron una asombrosa reducción en las operaciones para cargas útiles maliciosas. Lo que antes desencadenaba más de 200 millones de operaciones, llevando a los servidores a su punto de ruptura, ahora requería solo aproximadamente 200,000 operaciones. Esta acción decisiva neutralizó eficazmente la amenaza DoS, salvaguardando las aplicaciones construidas sobre el React Flight protocol de ataques similares.

La Traición Definitiva: Server-Side Request Forgery

Entre el conjunto de vulnerabilidades, una destacó con la puntuación de severidad más alta: un 8.6/10 de Server-Side Request Forgery (SSRF) que afectaba a las aplicaciones Next.js autoalojadas. Esta falla crítica representó una profunda violación de la confianza, permitiendo a los atacantes convertir un servidor de cara al público en un cómplice involuntario para el reconocimiento y la explotación internos.

SSRF fundamentalmente engaña a un servidor para que realice solicitudes en nombre de un atacante a Denial of Services internos que de otro modo serían inaccesibles. Imagine un servidor, típicamente protegido por robustos firewalls, realizando de repente conexiones a sus propias bases de datos internas, capas de caché o APIs privadas, todo bajo el mando de un actor malicioso externo. Esta es la esencia de un ataque SSRF.

Explotar esta vulnerabilidad de Next.js resultó alarmantemente sencillo. Los atacantes crearon una solicitud `curl` que contenía un encabezado `Upgrade: websocket` y un objetivo de solicitud personalizado. Esta combinación aparentemente inofensiva manipuló el servidor para iniciar conexiones arbitrarias dentro de sus redes internas, eludiendo las defensas externas.

El peligro que presentaba este SSRF fue catastrófico. Proporcionó un firewall bypass directo, otorgando a los atacantes una puerta de entrada sin precedentes a la infraestructura más sensible de una organización. Bases de datos internas, instancias de Redis y otras APIs privadas, normalmente aisladas y protegidas, quedaron directamente expuestas a través de la aplicación Next.js comprometida.

Esta vulnerabilidad significaba que un atacante podía mapear una red interna, extraer datos sensibles o incluso activar acciones en sistemas internos sin tocar directamente esos Denial of Services. Para los desarrolladores que buscan más orientación sobre cómo proteger sus aplicaciones, recursos como Guides: Data Security - Next.js ofrecen información valiosa. La facilidad de explotación combinada con el potencial de acceso interno profundo hizo de este SSRF una de las revelaciones más preocupantes en el Next.js security release.

El 'Security Tax' de los Server Component

El video de Better Stack, "I'm Done With NextJS... 13 NEW vulnerabilities", preguntó provocativamente si los server components eran un error. Esta pregunta cristaliza una creciente preocupación dentro de la comunidad de desarrollo con respecto a la sobrecarga de seguridad inherente de los React Server Components (RSCs). El cambio de paradigma introduce un "security tax" significativo—un aumento innegable en la complejidad arquitectónica y una superficie de ataque expandida.

La implementación de RSCs redefine fundamentalmente el contrato servidor-cliente, yendo más allá de los ciclos tradicionales de solicitud-respuesta HTTP. Este nuevo modelo requiere un manejo meticuloso de la serialización y deserialización de datos, a menudo a través de custom protocols. El conmovedor tweet de Primeagen, citado en el video, encapsula perfectamente este desafío: "It's hard to make custom serialization protocols." El React Flight protocol, fundamental para los RSCs, sirve precisamente como una capa personalizada de este tipo, y su naturaleza intrincada hace que una implementación robusta y segura sea excepcionalmente difícil.

El análisis de los recientes 13 CVEs revela un patrón distinto. Muchas vulnerabilidades, incluidas fallas críticas de Denial of Denial of Service of Denial of Service, se remontan directamente a la novedosa arquitectura de los RSCs y las complejidades del Flight protocol. La DoS vulnerability, por ejemplo, explotó el paquete `React Server DOM`, un elemento fundamental para los RSCs. Esto no fue un API bug convencional; aprovechó cómo los árboles de componentes y el flujo de datos entre el servidor y el cliente.

Este patrón subraya los desafíos de seguridad únicos inherentes a los sistemas que difuminan la lógica del servidor y del cliente. El middleware bypass, aunque no es directamente un problema del Flight protocol, contribuye al "security tax" general al demostrar cómo los nuevos paradigmas de enrutamiento, especialmente con características como i18n, pueden introducir vectores de ataque inesperados en un framework complejo. Los desarrolladores ahora deben tener en cuenta las amenazas profundas dentro de la serialización e hidratación de componentes, más allá de la validación tradicional de solicitudes HTTP. Esto exige un mayor nivel de escrutinio y una comprensión más amplia de los posibles exploits en toda la pila, trasladando la carga del análisis de seguridad a un nivel mucho más profundo y abstracto de la aplicación.

Una historia de dos frameworks: La TanStack Exemption

Ilustración: Una historia de dos frameworks: La TanStack Exemption
Ilustración: Una historia de dos frameworks: La TanStack Exemption

TanStack Start salió completamente ileso de la reciente ola de vulnerabilidades de Next.js. Mientras Next.js lidiaba con 13 CVEs, incluyendo derivaciones críticas de middleware y Server-Side Request Forgery, TanStack Start permaneció inafectado. Este sorprendente contraste ofrece un estudio de caso crucial sobre la arquitectura de frameworks y su impacto directo en la postura de seguridad.

La distinción radica en filosofías de diseño fundamentales. Next.js a menudo prioriza la conveniencia del desarrollador a través de la "magia", abstraiendo los límites del servidor y los flujos de datos implícitos. Este enfoque, aunque potente, puede introducir superficies de ataque ocultas cuando los mecanismos subyacentes —como el React Flight protocol o i18n routing— se comportan de manera inesperada.

TanStack Start, por el contrario, defiende un enfoque explícito y de tipo seguro con loaders y acciones claramente definidos. Los desarrolladores declaran explícitamente las operaciones del lado del servidor, haciendo que el límite servidor-cliente sea inequívoco. Esta claridad arquitectónica minimiza el potencial de configuraciones erróneas o exposiciones de datos no intencionadas, ya que el comportamiento del framework se alinea de manera más predecible con las expectativas del desarrollador.

Los frameworks que reducen la "magia" a menudo mejoran la seguridad al obligar a los desarrolladores a confrontar directamente el flujo de datos y los entornos de ejecución. Las decisiones de diseño de TanStack Start, que enfatizan las funciones explícitas del servidor y la robusta verificación de tipos, fomentan inherentemente una experiencia de desarrollo más segura y auditable. Esta previsibilidad se convierte en una poderosa defensa contra los tipos de derivaciones y vulnerabilidades de fuga de datos que asolaron a Next.js en su reciente lanzamiento de seguridad.

En última instancia, esto no es una declaración de superioridad general de un framework, sino una lección arquitectónica. La exención de TanStack subraya cómo el diseño explícito, los límites claros del servidor y la seguridad de tipos robusta pueden reducir radicalmente la superficie de ataque de un framework. Desafía tanto a desarrolladores como a autores de frameworks a considerar las implicaciones de seguridad de la conveniencia frente al control.

Su Plan de Acción Inmediato

Los desarrolladores de Next.js se enfrentan a un mandato urgente. La reciente divulgación de 13 CVEs exige una acción inmediata y decisiva para salvaguardar las aplicaciones y los datos de los usuarios. La procrastinación introduce un riesgo inaceptable, dada la gravedad de problemas como las derivaciones de middleware y el Server-Side Request Forgery.

Primero, identifique con precisión sus versiones actuales de Next.js y React. Este paso fundamental determina su nivel de exposición a las vulnerabilidades recientemente parcheadas. Use `npm list next` y `npm list react` o inspeccione su `package.json` para confirmar estas dependencias críticas.

Actualice inmediatamente todas las aplicaciones afectadas a las versiones parcheadas. Apunte a Next.js 15.5.18 o superior, y React 19.0.6 o superior. Estas versiones contienen correcciones cruciales para las fallas de seguridad generalizadas, incluyendo la Denegación de Servicio (Denial of Service) a través del React Flight protocol. Para obtener más detalles técnicos sobre dichas vulnerabilidades, consulte recursos como CVE-2026-23864: React and Next.js Denial of Denial of Service of Denial of Service via Memory Exhaustion | Akamai.

Realice una auditoría exhaustiva del código de su aplicación, centrándose en las áreas donde la seguridad depende de las abstracciones del framework. Preste especial atención a la lógica de middleware, verificando que las comprobaciones de autenticación y autorización sean robustas y no susceptibles a derivaciones como la falla de i18n. Examine críticamente los patrones de obtención de datos para prevenir el Server-Side Request Forgery y otros riesgos de exposición de datos.

Inicie una discusión exhaustiva en equipo sobre el architectural risk y las futuras elecciones de frameworks. Este incidente subraya la necesidad de una comprensión profunda de la seguridad más allá del uso superficial de la API. Evalúe si las selecciones actuales de frameworks se alinean con la postura de seguridad y la tolerancia al riesgo de su organización.

La encrucijada para el desarrollo web

Las revelaciones recientes, particularmente el diluvio sin precedentes de 13 CVEs que impactan a Next.js y React, marcan una encrucijada crítica para el desarrollo web. Este evento obliga a una reevaluación esencial de los paradigmas arquitectónicos que han llegado a dominar la construcción de aplicaciones modernas. La magnitud de las vulnerabilidades, desde sutiles bypasses de middleware hasta graves Server-Side Request Forgery, exige introspección.

Los frameworks de UI integrados y controlados por el servidor prometen una experiencia de desarrollador y un rendimiento inigualables, pero ¿han superado inadvertidamente las mejores prácticas de seguridad fundamentales? La tesis del "server component 'security tax'" cobra un peso significativo cuando una sola solicitud mal formada puede desencadenar un Denial of Denial of Service of Denial of Service a través del React Flight protocol, o un fallo de configuración de i18n expone sensitive server-side props.

Los desarrolladores adoptaron la conveniencia de unificar la lógica del servidor y del cliente, sin embargo, este acoplamiento estrecho crea inherentemente nuevas superficies de ataque. La difuminación de las líneas entre lo que se ejecuta dónde y bajo qué contexto, introduce complejidades que los modelos de seguridad actuales podrían no abordar completamente. Esto hace que el modelado de amenazas robusto sea más desafiante que nunca.

El desarrollo futuro podría ver un énfasis renovado en arquitecturas explícitas y desacopladas. Límites claros entre cliente y servidor, quizás con contratos de API bien definidos y dominios de seguridad distintos, podrían volver a ganar favor como una forma de simplificar el razonamiento de seguridad y reducir el riesgo sistémico. La simplicidad a menudo se correlaciona directamente con la seguridad.

Por el contrario, frameworks como Next.js podrían madurar y estabilizarse, incorporando primitivas de seguridad más robustas y sometiéndose a auditorías más rigurosas y proactivas. La ingeniosa solución de ingeniería implementada para la vulnerabilidad del React Flight protocol Denial of Denial of Service of Denial of Service demuestra la capacidad del equipo para una remediación rápida y efectiva bajo presión.

La notable exención de TanStack Start de estas vulnerabilidades generalizadas ofrece una perspectiva alternativa convincente. Sus elecciones arquitectónicas, específicamente evitando el paquete React Server DOM, sugieren que diferentes filosofías de diseño inherentemente producen diferentes perfiles de seguridad. Esto presenta un fuerte argumento a favor de la diversidad en los enfoques de frameworks.

Cualquiera que sea el camino que finalmente tome el ecosistema, este episodio sirve como un crudo recordatorio: la seguridad no puede seguir siendo una ocurrencia tardía. Cuestione cada decisión arquitectónica, examine cada dependencia y priorice una postura de seguridad resiliente desde la primera línea de código en su próximo proyecto. La responsabilidad recae en cada desarrollador.

Preguntas frecuentes

¿Cuáles son las vulnerabilidades más críticas de Next.js de la versión de May 2026?

Las vulnerabilidades más críticas incluyen un Server-Side Request Forgery (SSRF) de alta gravedad (8.6/10), múltiples Middleware Bypasses (7.5/10) y un ataque de Denial of Service (DoS) dirigido al React Flight protocol (7.5/10).

¿Son los React Server Components (RSCs) inherentemente inseguros?

Los RSCs no son inherentemente inseguros, pero introducen un nuevo y complejo paradigma que expande significativamente la superficie de ataque. Este 'security tax' requiere más diligencia tanto de los autores de frameworks como de los desarrolladores para prevenir vulnerabilidades como unsafe deserialization.

¿Cómo protejo mi aplicación Next.js de estas vulnerabilidades?

La única solución garantizada es actualizar inmediatamente sus dependencias de Next.js y React a las versiones parcheadas especificadas en el aviso de seguridad oficial de Vercel. Confiar únicamente en un WAF no es suficiente.

¿TanStack Start se vio afectado por estas vulnerabilidades de Next.js?

No, TanStack Start no se vio afectado por estos CVEs específicos porque no utiliza el paquete React Server DOM ni los mismos patrones arquitectónicos que Next.js, lo que destaca los beneficios de seguridad de su diseño más explícito.

Preguntas frecuentes

¿Cuáles son las vulnerabilidades más críticas de Next.js de la versión de May 2026?
Las vulnerabilidades más críticas incluyen un Server-Side Request Forgery de alta gravedad , múltiples Middleware Bypasses y un ataque de Denial of Service dirigido al React Flight protocol .
¿Son los React Server Components (RSCs) inherentemente inseguros?
Los RSCs no son inherentemente inseguros, pero introducen un nuevo y complejo paradigma que expande significativamente la superficie de ataque. Este 'security tax' requiere más diligencia tanto de los autores de frameworks como de los desarrolladores para prevenir vulnerabilidades como unsafe deserialization.
¿Cómo protejo mi aplicación Next.js de estas vulnerabilidades?
La única solución garantizada es actualizar inmediatamente sus dependencias de Next.js y React a las versiones parcheadas especificadas en el aviso de seguridad oficial de Vercel. Confiar únicamente en un WAF no es suficiente.
¿TanStack Start se vio afectado por estas vulnerabilidades de Next.js?
No, TanStack Start no se vio afectado por estos CVEs específicos porque no utiliza el paquete React Server DOM ni los mismos patrones arquitectónicos que Next.js, lo que destaca los beneficios de seguridad de su diseño más explícito.
🚀Descubre más

Mantente a la vanguardia de la IA

Descubre las mejores herramientas de IA, agentes y servidores MCP seleccionados por Stork.AI.

Volver a todas las publicaciones