该仓库包含一个完全容器化的三层实验环境,旨在演示、利用并验证 CVE-2023-43804(跨源重定向期间发生的 urllib3 Cookie 泄露)的修复方案。
该实验使用 Docker Compose 进行编排,由三个通过内部桥接网络通信的隔离服务组成:
victim_client:基于 Python 的容器,执行复现与利用脚本(exploit.py)。target_app:Flask Web 应用程序,模拟一个存在漏洞的目标服务器,该服务器会触发指向外部源的 HTTP 302 跨源重定向。attacker_app:Flask 日志记录服务器,旨在捕获传入的 HTTP 请求并提取泄露的头部信息。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 予以确认。