
Контейнеризированная трёхуровневая лаборатория, воспроизводящая утечку cookie в urllib3 CVE-2023-43804 через кросс-доменные перенаправления, со скриптом эксплуатации и проверкой патча.
Репозиторий включает полностью контейнеризованную трёхуровневую лабораторную среду, предназначенную для демонстрации, эксплуатации и проверки исправлений для CVE-2023-43804 (утечка Cookie в urllib3, возникающая при кросс-доменных перенаправлениях).
Лаборатория оркестрируется с помощью Docker Compose и состоит из трёх изолированных сервисов, взаимодействующих через внутреннюю bridge-сеть:
victim_client: контейнер на базе Python, выполняющий скрипт воспроизведения и эксплуатации (exploit.py).target_app: веб-приложение на Flask, имитирующее уязвимый целевой сервер, который инициирует кросс-доменное перенаправление 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 не удалял конфиденциальные заголовки аутентификации (такие как Cookie) при следовании перенаправлениям HTTP 302 между разными источниками, что позволяло недоверенным конечным точкам перенаправления перехватывать конфиденциальные токены сессий.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
remove_headers_on_redirect в пользовательских конфигурациях Retry, если необходимо поддерживать устаревшие среды выполнения.victim_client, target_app, attacker_app), назначенные Docker Compose. Используйте docker ps для проверки имён активных контейнеров.5000 и 5001 не заняты другими локальными сервисами перед запуском стека Docker.При запуске лаборатории на уязвимой версии urllib3==1.26.16 конфиденциальный cookie аутентификации перехватывается при кросс-доменных перенаправлениях и успешно логируется сервером атакующего.
exploit.py отображает "status": "EXFILTRATED" вместе с утёкшим токеном сессии, что подтверждается выводом логов attacker_app.После обновления urllib3 до исправленной версии (1.26.17) библиотека автоматически удаляет конфиденциальный заголовок Cookie при кросс-доменных перенаправлениях.
Обновление пакета до исправленной версии:

urllib3 внутри victim_client через pip install urllib3==1.26.17.Безопасный вывод клиента и очищенные логи:

exploit.py возвращает "status": "SECURE" с "stolen_cookie": "None / Stripped", что подтверждается логом сервера, показывающим Leaked Cookie Header: None.