CVE-2025-67779: El parche de Next.js que necesitaba otro parche
El primer fix para CVE-2025-55184 era incompleto. CVE-2025-67779 es el parche del parche. Si actualizaste Next.js una vez después de React2Shell, es posible que todavía estés expuesto.
Enrique Alvarez
Security Engineer
Actualizaste Next.js. Viste el aviso de seguridad de React2Shell, corriste npm install next@latest, hiciste el deploy, y seguiste adelante. Listo. Ya estabas protegido.
O eso creías.
Lo que pasó en los meses siguientes a React2Shell (CVE-2025-55182) es un ejemplo textbook de algo que le pasa más seguido de lo que los vendors admiten: el parche está incompleto. Los investigadores encuentran una variante. Sale otro CVE. Developers que ya actualizaron se enteran, semanas después, de que en realidad nunca terminaron de tapar el hueco. CVE-2025-67779 es el tercero en esta cadena — el parche del parche del parche.
Si usás Next.js App Router y no revisaste tu versión en los últimos meses, este artículo es para ti.
La cadena de tres CVEs, en términos simples
Cuando salió React2Shell, el mundo de Next.js entró en modo pánico. CVSS 10. Ejecución remota de código. Sin autenticación. Todo. El equipo de Vercel/Next.js respondió rápido, lanzó un fix, y la mayoría de la comunidad actualizó y siguió adelante.
El problema: el fix inicial fue validado para bloquear el vector de ataque original. Pero los investigadores siguieron probando las versiones parcheadas. Y encontraron que algo seguía roto — solo que de otra forma.
La secuencia completa quedó así:
| CVE | Tipo | Severidad | Encontrado en | Corregido en |
|---|---|---|---|---|
| CVE-2025-55182 | Ejecución remota de código | CVSS 10 | Next.js App Router | 14.2.35+ / 15.2.4+ |
| CVE-2025-55184 | Denegación de servicio | — | Parche de CVE-2025-55182 | Fix posterior |
| CVE-2025-67779 | Denegación de servicio | — | Parche de CVE-2025-55184 | 14.2.35+ / 15.2.4+ |
Tres CVEs. Cada uno encontrado en el intento de corregir el anterior. La versión que finalmente cierra toda la cadena es la misma: 14.2.35+ o 15.2.4+. Pero hay una ventana de tiempo en la que developers que ya habían actualizado estaban corriendo versiones con CVE-2025-55184 o CVE-2025-67779 sin saberlo.
Qué corrigió CVE-2025-55184 — y qué dejó abierto
El fix para React2Shell modificó cómo el App Router maneja ciertos tipos de peticiones durante el procesamiento de Server Functions. La idea era cortar el vector de deserialización que permitía la ejecución de código arbitrario.
Lo que el fix no contempló bien: un atacante podía enviar peticiones con una estructura específica que ponía al worker del App Router en un loop de procesamiento. No era ejecución de código. Era algo más sutil: el servidor seguía intentando manejar la petición, consumiendo CPU y memoria, sin terminar ni responder.
Eso es CVE-2025-55184 — una vulnerabilidad de denegación de servicio (DoS) en el parche mismo. Un atacante con suficientes requests concurrentes podía degradar o tirar completamente una instancia de Next.js App Router.
El fix para CVE-2025-55184 ajustó la lógica de manejo de esas peticiones problemáticas. Cortó el loop. Pero no del todo.
Qué cambió en CVE-2025-67779
CVE-2025-67779 es otra variante DoS. Misma familia, distinto vector de entrada.
El segundo fix introdujo una condición de error que en ciertos casos no terminaba de limpiar el estado interno del request handler. Con una secuencia de peticiones diseñada para explotar esa condición, un atacante podía causar el mismo efecto que CVE-2025-55184: acumulación de recursos sin liberación, degradación de rendimiento, y eventual falla del servidor bajo carga.
La diferencia con CVE-2025-55184 no es dramática desde afuera. Ambas son DoS. Ambas apuntan al App Router. Ambas requieren que el servidor esté accesible públicamente. Pero son superficies de ataque distintas — por eso necesitaron dos CVEs separados.
Lo que importa en la práctica:
# Si tu versión está en este rango, sos vulnerable a CVE-2025-67779
# Next.js 14.x: cualquier versión antes de 14.2.35
# Next.js 15.x: cualquier versión antes de 15.2.4
# Esto incluye versiones que ya corregían React2Shell,
# como 14.2.33 o 14.2.34 — que solucionaban CVE-2025-55182
# pero todavía tenían CVE-2025-55184 o CVE-2025-67779Si actualizaste cuando salió React2Shell pero quedaste en una versión intermedia, es posible que hayas cruzado un CVE pero seguido expuesto al siguiente.
La versión que realmente lo corrige todo
Next.js 14.2.35 y 15.2.4 son las versiones que cierran la cadena completa. Las tres vulnerabilidades — CVE-2025-55182, CVE-2025-55184, y CVE-2025-67779 — están corregidas en estas releases.
No hay una versión "parcialmente segura" que valga la pena mantener. Si estás en 14.x, necesitás 14.2.35 o más nuevo. Si estás en 15.x, necesitás 15.2.4 o más nuevo.
Un dato importante: Next.js 13 y versiones anteriores están fuera de soporte activo. Si estás en Next.js 13 con App Router, no vas a recibir fixes de seguridad. La recomendación es migrar a 14.2.35+ o 15.2.4+. Si eso no es posible en el corto plazo, evaluar si podés desactivar features de Server Functions hasta migrar.
Por qué es fácil perderse esta actualización
El problema de los parches incompletos no es técnico — es de fatiga.
Cuando React2Shell salió, la urgencia era clara. CVSS 10. RCE. Todos actualizaron rápido. Pero CVE-2025-55184 y CVE-2025-67779 son denegaciones de servicio. Severidad más baja. Menos cobertura mediática. Menos sensación de urgencia.
El ciclo típico de alguien que se perdió la segunda o tercera actualización fue más o menos este:
- Recibió el aviso de React2Shell. Actualizó rápido a, digamos, 14.2.31.
- Semanas después sale CVE-2025-55184. El aviso llegó como una notificación de GitHub Dependabot, o como un post en la comunidad. Tal vez no lo vio. Tal vez lo vio y lo anotó para después.
- Antes de que actualizara, salió CVE-2025-67779. Ahora hay dos CVEs pendientes en su versión.
- Recién hoy, leyendo este artículo, se está enterando de que no alcanzó con actualizar una vez.
Esto pasa. No es negligencia. Es la realidad de mantener proyectos cuando hay otras cosas que hacer.
Lo que complica más el panorama: si usás un monorepo o heredaste un proyecto con muchas dependencias, npm install next@latest puede traer conflictos que te hacen postergarlo. Y mientras lo postponés, tu app sigue expuesta.
Cómo verificar y corregir ahora mismo
Primero, revisá qué versión de Next.js estás corriendo:
npm list nextLa salida debería verse algo así:
mi-proyecto@1.0.0 /ruta/a/tu/proyecto
└── next@14.2.31 # <-- si ves algo menor a 14.2.35, necesitás actualizarSi estás en 14.x por debajo de 14.2.35, o en 15.x por debajo de 15.2.4, actualizá:
# Para la línea 14.x
npm install next@14.2.35
# Para la línea 15.x
npm install next@15.2.4
# O simplemente latest si no tenés restricciones de versión
npm install next@latestDespués del update, verificá de nuevo:
npm list nextY revisá que tu package.json refleje la versión correcta:
{
"dependencies": {
"next": "^14.2.35"
}
}Ojo con el caret (
^):^14.2.35permite actualizaciones automáticas a futuras versiones 14.x, lo cual en general es lo que querés para recibir patches de seguridad. Si tenés~14.2.35o la versión exacta sin prefijo, solo recibirás patches de patch-level, no minor releases.
Si tu app está en producción y querés confirmar que el update está activo, podés verificar la versión en runtime:
// pages/api/version.ts o app/api/version/route.ts
// Solo para verificación interna — no expongas esto en producción
import { NextResponse } from 'next/server'
export async function GET() {
const { version } = await import('next/package.json')
return NextResponse.json({ nextVersion: version })
}Si querés un escaneo más completo — uno que revise tu repo en busca de dependencias desactualizadas, CVEs conocidos, y otros problemas de seguridad sin buscar manualmente CVE por CVE — Data Hogo hace exactamente eso. Conectás tu repo, el scanner revisa todo, y te dice qué está desactualizado y por qué importa.
TL;DR
- CVE-2025-67779 es el tercer CVE en una cadena que empezó con React2Shell (CVE-2025-55182).
- El primer parche para React2Shell introdujo CVE-2025-55184 (DoS por loop infinito). El fix de ese introdujo CVE-2025-67779 (otra variante DoS).
- Si actualizaste una vez cuando salió React2Shell pero no volviste a actualizar, es probable que sigas siendo vulnerable.
- Las versiones que cierran toda la cadena son Next.js 14.2.35+ o 15.2.4+.
- Correr
npm list nextte dice en qué versión estás. Si es menor a esas,npm install next@latestlo soluciona. - Las vulnerabilidades DoS no tienen la urgencia de un CVSS 10, pero siguen siendo explotables. Un atacante puede tirar tu servidor desde afuera sin necesidad de autenticación.
Posts Relacionados
CVE-2025-55183: Cuando tu Server Function de Next.js devuelve su propio código fuente
Una petición maliciosa hacía que las Server Functions de Next.js devolvieran su código fuente en la respuesta HTTP. Si tenías una API key hardcodeada — aunque fuera 'solo para probar' — era legible.
CVE-2025-55184: El DoS de loop infinito en Next.js que llegó con el parche de React2Shell
CVE-2025-55184 llegó en las mismas versiones de Next.js que corregían React2Shell. Una petición maliciosa desencadena un loop infinito que congela tu servidor — sin error, sin crash, solo silencio.
React2Shell: La vulnerabilidad crítica que afectó cada proyecto con Next.js App Router
CVE-2025-55182 permitió a atacantes ejecutar código arbitrario en tu servidor con una sola petición HTTP — CVSS 10. Si usas Next.js App Router con Server Actions, revisa tu versión ahora.