
CVE-2023-43804 urllib3のクロスオリジンリダイレクトによるCookie漏洩を再現するコンテナ化された3層ラボ。エクスプロイトスクリプトとパッチ検証付き。
このリポジトリには、完全にコンテナ化された3層のラボ環境が含まれており、CVE-2023-43804(クロスオリジンリダイレクト時に発生するurllib3のCookie漏洩)の実証、悪用、および修正の検証を目的としています。
このラボはDocker Composeを使用してオーケストレーションされ、内部ブリッジネットワークを介して通信する3つの分離されたサービスで構成されています:
victim_client: 再現およびエクスプロイトスクリプト(exploit.py)を実行するPythonベースのコンテナ。target_app: 外部オリジンへのHTTP 302クロスオリジンリダイレクトをトリガーする、脆弱なターゲットサーバーをシミュレートするFlaskウェブアプリケーション。attacker_app: 受信したHTTPリクエストをキャプチャし、漏洩したヘッダーを抽出するために設計されたFlaskログサーバー。git clone [https://github.com/deepanshu-khurana/cve-2023-43804-lab.git](https://github.com/deepanshu-khurana/cve-2023-43804-lab.git)
cd cve-2023-43804-lab
docker compose up -d --build
docker compose up -d
docker compose down --volumes
CVE-2023-43804)urllib3< 1.26.17 または < 2.0.5urllib3は、異なるオリジン間でHTTP 302リダイレクトを追跡する際に、機密性の高い認証ヘッダー(Cookieなど)を削除できませんでした。これにより、信頼できないリダイレクトエンドポイントが機密性の高いセッショントークンを傍受できる可能性がありました。urllib3がインストールされていることを確認します:docker exec -it victim_client pip install urllib3==1.26.16
docker exec -it victim_client python3 -u /lab/exploit.py
"status": "EXFILTRATED"が表示されます。docker logs attacker_appに、キャプチャされた機密性の高いCookieヘッダーが表示されます。エクスプロイトを確認した後、パッチを検証するには:
urllib3をパッチ適用済みバージョンにアップグレードします:docker exec -it victim_client pip install urllib3==1.26.17
docker exec -it victim_client python3 -u /lab/exploit.py
"status": "SECURE", "stolen_cookie": "None / Stripped"が表示されます。attacker_appのログで、受信リクエストにLeaked Cookie Header: Noneが含まれていることが確認されます。requirements.txt内の依存関係を更新して、安全なバージョンを強制します:urllib3>=1.26.17
Retry設定でremove_headers_on_redirectを介してヘッダー管理ポリシーを明示的に構成します。victim_client、target_app、attacker_app)を正確に指定していることを確認してください。docker psを使用して、アクティブなコンテナ名を確認してください。5000および5001が他のローカルサービスによって占有されていないことを確認してください。脆弱なurllib3==1.26.16でラボを実行すると、機密性の高い認証Cookieがクロスオリジンリダイレクトを介して傍受され、攻撃者サーバーによって正常にログに記録されます。
exploit.pyが漏洩したセッショントークンとともに"status": "EXFILTRATED"を表示し、attacker_appのログ出力によって検証されています。urllib3をパッチ適用済みバージョン(1.26.17)にアップグレードした後、ライブラリはクロスオリジンリダイレクト時に機密性の高いCookieヘッダーを自動的に削除します。
パッチ適用済みバージョンへのパッケージアップグレード:

pip install urllib3==1.26.17を介してvictim_client内のurllib3をアップグレードしています。安全なクライアント出力と削除されたログ:

exploit.pyが"status": "SECURE"と"stolen_cookie": "None / Stripped"を返し、サーバーログがLeaked Cookie Header: Noneを示すことで確認されています。