È stata scoperta una falla critica nella sicurezza nel popolare framework Next.js, che potrebbe avere un impatto su milioni di siti web e applicazioni.
I ricercatori di sicurezza Rachid Allam, noto online come zhero, e Yasser Allam (inzo_) hanno collaborato per scoprire la falla nella funzionalità middleware del framework.
Next.js, che vanta oltre 130.000 stelle su GitHub e quasi 10 milioni di download settimanali, è un framework costruito su React. Il suo ampio set di funzionalità lo rende una scelta popolare per gli sviluppatori, ma presenta anche un’ampia superficie di attacco per i ricercatori di sicurezza.
La vulnerabilità risiede nel modo in cui Next.js gestisce il middleware, una funzione che consente agli sviluppatori di eseguire codice prima che una richiesta sia completata.
Il middleware è un componente cruciale per diverse funzionalità, tra cui la riscrittura dei percorsi, i reindirizzamenti lato server, l’aggiunta di intestazioni di sicurezza come CSP e, soprattutto, l’autenticazione e l’autorizzazione.
Un esempio tipico fornito nel blog post illustra questo aspetto: “Quando un utente tenta di accedere a /dashboard/admin, la sua richiesta passa prima attraverso il middleware, che controlla se i suoi cookie di sessione sono validi e gli concede le autorizzazioni necessarie. In caso affermativo, il middleware inoltrerà la richiesta; altrimenti, il middleware reindirizzerà l’utente a una pagina di login”.
La scoperta dei ricercatori è avvenuta esaminando le versioni precedenti del framework. Analizzando la versione 12.0.7, hanno identificato un pezzo di codice specifico all’interno della funzione runMiddleware.
Questa funzione, responsabile dell’esecuzione del middleware, recupera il valore dell’intestazione x-middleware-subrequest. Questa intestazione serve a determinare se il middleware deve essere applicato a una determinata richiesta. Il valore di questa intestazione viene suddiviso in un elenco utilizzando i due punti (:) come separatore e il framework controlla se questo elenco contiene il valore middlewareInfo.name.
I ricercatori si sono resi conto che aggiungendo l’intestazione x-middleware-subrequest con un valore specifico a una richiesta, potevano effettivamente bypassare completamente il middleware.
“Ciò significa che se aggiungiamo l’intestazione x-middleware-subrequest con il valore corretto alla nostra richiesta, il middleware – qualunque sia il suo scopo – sarà completamente ignorato e la richiesta sarà inoltrata tramite NextResponse.next() e completerà il suo viaggio verso la destinazione originale senza che il middleware abbia alcun impatto/influenza su di essa”. L’intestazione e il suo valore agiscono come una chiave universale che consente di ignorare le regole”.
L’elemento cruciale era determinare il valore corretto per questa “chiave universale”, che dipende da middlewareInfo.name. Questo valore, si scopre, è il percorso del file middleware.
Nelle versioni precedenti di Next.js (prima della 12.2), i file middleware dovevano essere denominati _middleware.ts e risiedevano all’interno della directory pages a causa dell’uso esclusivo del router pages. Questo ha permesso ai ricercatori di dedurre il percorso esatto e quindi il valore dell’intestazione x-middleware-subrequest: pages/_middleware.
I test hanno confermato i loro sospetti. Quando si cercava di accedere a un percorso protetto come /dashboard/team/admin che era configurato per reindirizzare a /dashboard, l’aggiunta dell’intestazione x-middleware-subrequest: pages/_middleware consentiva di aggirare il reindirizzamento e di accedere direttamente alla pagina protetta.
Inoltre, le versioni precedenti alla 12.2 consentivano file middleware annidati, ognuno con il proprio ordine di esecuzione. Ciò significa che per un percorso come /dashboard/panel/admin, esistevano più valori potenziali per l’intestazione x-middleware-subrequest: pages/_middleware, pages/dashboard/_middleware o pages/dashboard/panel/_middleware.
Inizialmente, i ricercatori ritenevano che la vulnerabilità fosse limitata alle versioni precedenti alla 13, a causa di modifiche nella gestione del middleware. Tuttavia, il proseguimento delle indagini ha rivelato una realtà molto più preoccupante.
“Con grande sorpresa, due giorni dopo la scoperta iniziale, abbiamo scoperto che tutte le versioni di next.js, a partire dalla versione 11.1.4, erano vulnerabili”, ha dichiarato Allam.
Sebbene la posizione del codice e la logica di exploit siano leggermente cambiate nelle nuove versioni, la falla fondamentale è rimasta. A partire dalla versione 12.2, i file middleware sono denominati semplicemente middleware.ts e si trovano nella directory principale o nella directory /src, se utilizzata. Questo semplifica i valori potenziali per l’intestazione x-middleware-subrequest a middleware o src/middleware.
Nelle ultime versioni di Next.js, la logica si è evoluta nuovamente per evitare loop infiniti. Il framework ora controlla la profondità del valore dell’intestazione x-middleware-subrequest rispetto a un MAX_RECURSION_DEPTH (impostato a 5). Per aggirare il middleware in queste versioni, l’intestazione deve includere il percorso corretto ripetuto più volte.
I ricercatori hanno fornito esempi concreti di come questa vulnerabilità possa essere sfruttata in scenari reali:
- Bypass dell’autorizzazione/riscrittura: Aggiungendo l’header dannoso, sono stati in grado di accedere a un endpoint /admin/login altrimenti protetto da un rewrite basato su middleware.
- Bypass del CSP: Hanno dimostrato come la vulnerabilità potesse essere utilizzata per aggirare la Content Security Policy (CSP) e le impostazioni dei cookie applicate dal middleware.
- Denial-of-Service (DoS) tramite cache-poisoning: In determinate configurazioni, la vulnerabilità potrebbe essere sfruttata per causare un attacco DoS con avvelenamento della cache. Ciò potrebbe verificarsi se un sito riscrive i percorsi degli utenti in base alla posizione e non ha una risorsa nel percorso principale. L’aggiramento del middleware porterebbe a un errore 404 sulla radice, che potrebbe essere memorizzato nella cache da un CDN per rendere potenzialmente inutilizzabile il sito.
Impatto e rimedio
“Per essere chiari, l’elemento vulnerabile è il middleware. Se non viene utilizzato (o almeno non viene utilizzato per scopi sensibili), non c’è nulla di cui preoccuparsi… poiché bypassando il middleware non si bypassa alcun meccanismo di sicurezza. In caso contrario, le conseguenze possono essere catastrofiche”, avvertono i ricercatori.
È stato emesso un avviso di sicurezza, CVE-2025-29927, per risolvere questa falla critica, alla quale è stato assegnato un punteggio CVSS di 9,1 su 10. I ricercatori hanno osservato che le piattaforme come Vercel non sono in grado di risolvere il problema.
I ricercatori hanno notato che piattaforme come Vercel e Netlify hanno implementato delle mitigazioni, anche se Cloudflare ha inizialmente introdotto una regola che è stata poi resa opt-in a causa dei falsi positivi.
“Questa vulnerabilità è presente da diversi anni nel codice sorgente di next.js, evolvendosi con il middleware e le sue modifiche nel corso delle versioni”, ha dichiarato Allam.
“Una vulnerabilità critica può verificarsi in qualsiasi software, ma quando colpisce uno dei framework più popolari, diventa particolarmente pericolosa e può avere gravi conseguenze per l’ecosistema in generale”.
Il team di Vercel, gli sviluppatori di Next.js, ha reagito prontamente una volta a conoscenza del problema. Una correzione è stata implementata e rilasciata nel giro di poche ore, includendo backport alle vecchie versioni supportate.
Agli sviluppatori che utilizzano Next.js si consiglia vivamente di aggiornare alle versioni corrette o di implementare immediatamente la soluzione consigliata.















