Bypass de Middleware en Next.js (CVE-2025-29927)
Una vulnerabilidad crítica en Next.js anteriores a la 15.2.3 permite a atacantes saltarse completamente los checks de autenticación en middleware enviando un header interno especial.
Cómo Funciona
Next.js usa el header interno `x-middleware-subrequest` para rastrear la profundidad de invocación del middleware y evitar loops infinitos. Los atacantes descubrieron que podían enviar este header desde afuera para que el framework se saltara la ejecución del middleware, bypasseando cualquier guard de auth en middleware.ts.
// MAL: Next.js < 15.2.3 — el atacante envía:
// x-middleware-subrequest: middleware:middleware:middleware
// y este middleware se salta completamente
export function middleware(req: NextRequest) {
const token = req.cookies.get('session');
if (!token) return NextResponse.redirect('/login');
}// BIEN: actualiza Next.js a >= 15.2.3
// Además: nunca confíes solo en middleware para auth.
// Siempre verifica la sesión en la ruta o página.
export async function GET() {
const supabase = createClient();
const { data: { user } } = await supabase.auth.getUser();
if (!user) return Response.json({ error: 'No autorizado' }, { status: 401 });
}Ejemplo Real
CVE-2025-29927 — divulgado públicamente en marzo 2025. Afectó todas las versiones de Next.js que usan middleware para auth. Cualquier app donde el middleware era la única capa de auth quedó completamente expuesta. CVSS: 9.1 (Crítico).
Cómo Prevenirlo
- Actualiza Next.js a 15.2.3 o superior de inmediato
- Nunca uses middleware como tu única capa de auth — agrega verificación de sesión server-side en páginas y API routes
- Bloquea el header x-middleware-subrequest en tu CDN o proxy como mitigación temporal
- Usa Data Hogo para detectar versiones vulnerables de Next.js en tu repo
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
dangerouslySetInnerHTML Sin Sanitización
highUsar dangerouslySetInnerHTML de React con input de usuario sin sanitizar permite a atacantes inyectar scripts maliciosos que se ejecutan en los navegadores de otros usuarios.
Tokens de Autenticación en localStorage
highGuardar JWT tokens, tokens de sesión o API keys en localStorage los hace accesibles a cualquier JavaScript corriendo en la página, incluyendo payloads XSS.
Exposición de Secretos en __NEXT_DATA__
highLos props de página de Next.js pasados por getServerSideProps o getStaticProps filtran datos sensibles como API keys, URLs de base de datos o configuración interna a través del script tag __NEXT_DATA__.
Source Maps Expuestos en Producción
mediumLos archivos source map de JavaScript (.map) son públicamente accesibles en producción, revelando el código fuente original completo incluyendo comentarios, nombres de variables y lógica interna.