Retour aux bulletins
Critique2025-03-21CVSS 9.1CVE-2025-29927 (2025-03-21)nextjsjavascriptauthentificationmiddlewareweb

CVE-2025-29927 — Next.js : contournement du middleware d'authentification

Une faille dans le mécanisme de routage interne de Next.js permet à un attaquant d'injecter un header HTTP spécifique pour contourner entièrement le middleware d'authentification et accéder à des routes protégées sans aucun credential valide.

Contexte

Le 21 mars 2025, l'équipe Next.js a divulgué une vulnérabilité critique affectant le système de middleware du framework. La faille permet à un attaquant distant de contourner toute logique d'authentification ou d'autorisation implémentée dans les fichiers middleware.ts / middleware.js en forgeant un header HTTP interne utilisé par Next.js pour son routage.

La vulnérabilité est particulièrement sévère car de nombreuses applications Next.js utilisent exclusivement le middleware pour protéger leurs routes — sans couche d'autorisation additionnelle côté serveur ou dans les API routes.

Elle est inscrite sur la liste des vulnérabilités activement exploitées de la CISA (Known Exploited Vulnerabilities).

Versions affectées

  • Next.js 12.x < 12.3.5
  • Next.js 13.x < 13.5.9
  • Next.js 14.x < 14.2.25
  • Next.js 15.x < 15.2.3

Mécanisme d'exploitation

Next.js utilise en interne le header x-middleware-subrequest pour distinguer les requêtes traitées par le middleware des sous-requêtes internes, afin d'éviter les boucles infinies.

La faille : ce header n'est pas filtré côté serveur sur les requêtes entrantes. Un attaquant peut l'injecter dans sa requête HTTP pour faire croire à Next.js que la requête provient déjà d'un traitement middleware interne, causant le bypass complet du middleware.

GET /admin/dashboard HTTP/1.1
Host: example.com
x-middleware-subrequest: middleware

Cette unique ligne suffit à contourner n'importe quel middleware.ts qui protège /admin.

Impact

Toute logique de protection implémentée dans le middleware est contournable :

  • Authentification — accès à des routes réservées aux utilisateurs connectés
  • Autorisation par rôle — accès à des sections admin ou premium
  • Vérification de tokens JWT / sessions — bypass complet
  • Géo-restriction ou IP allowlist — contournement
  • Redirections de maintenance — accès au site en mode maintenance

L'impact dépend de la criticité des routes protégées : tableau de bord admin, API privées, données utilisateurs, etc.

Détection

Vérifiez si votre version est vulnérable :

# Vérifier la version Next.js installée
cat package.json | grep '"next"'
# ou
npx next --version

Recherchez des accès suspects dans vos logs :

# Nginx — requêtes avec le header x-middleware-subrequest
grep -i "x-middleware-subrequest" /var/log/nginx/access.log

# Rechercher des accès anormaux à des routes protégées
# (IPs sans session valide accédant à /admin, /api/admin, etc.)
grep "/admin" /var/log/nginx/access.log | grep -v "302\|301"

Remédiation

  1. Mettez à jour Next.js vers une version corrigée :

    • 12.x → 12.3.5
    • 13.x → 13.5.9
    • 14.x → 14.2.25
    • 15.x → 15.2.3
    npm install next@latest
    # ou version spécifique
    npm install next@14.2.25
    
  2. Ne reposez pas exclusivement sur le middleware pour l'autorisation — ajoutez une vérification de session/token dans chaque route API et Server Component sensible :

    // Dans une API route ou Server Component
    import { getServerSession } from "next-auth/next";
    
    const session = await getServerSession(authOptions);
    if (!session) {
      return new Response("Unauthorized", { status: 401 });
    }
    
  3. Bloquez le header au niveau du reverse proxy si la mise à jour est impossible immédiatement (mesure palliative) :

    # Nginx — supprimer le header avant de passer à Next.js
    proxy_set_header x-middleware-subrequest "";
    
    # Apache
    RequestHeader unset x-middleware-subrequest
    

Recommandations

  • Principe de défense en profondeur — le middleware est un premier filtre, pas l'unique rempart : vérifiez toujours les autorisations au plus près des données
  • Mettez à jour Next.js régulièrement — abonnez-vous aux alertes de sécurité du dépôt GitHub (vercel/next.js)
  • Revue des routes protégées — auditez quelles routes sont protégées uniquement par middleware et ajoutez une couche d'autorisation serveur sur les plus critiques
  • Tests d'intrusion sur le middleware — intégrez des tests vérifiant que les routes protégées retournent bien 401/403 en l'absence de credentials valides