
CTF_WRITEUPS/TryHackMe /CVE-2021-41773/
CTF_WRITEUPS/TryHackMe /CVE-2021-41773/
Краткая история
5 октября 2021 года был опубликован CVE, описывающий атаку обхода путей на Apache HTTP Server v2.4.49. Ему был присвоен номер CVE-2021-41773, и он был выпущен со следующим описанием:
Была обнаружена ошибка в изменении, внесенном в нормализацию путей в Apache HTTP Server 2.4.49. Злоумышленник может использовать атаку обхода путей для сопоставления URL с файлами за пределами ожидаемого корневого каталога документов. Если файлы за пределами корневого каталога документов не защищены директивой "require all denied", такие запросы могут быть успешными. Кроме того, эта ошибка может раскрыть исходный код интерпретируемых файлов, таких как CGI-скрипты. Известно, что эта уязвимость эксплуатируется в реальных условиях. Эта проблема затрагивает только Apache 2.4.49, но не более ранние версии.
Давайте разберем это и посмотрим, что это на самом деле значит для нас:
Много исправлений спустя...
Apache исправил эту ошибку и выпустил v2.4.50. Конец истории, верно? Ну, не совсем. Всего через 2 дня, 7 октября, был выпущен новый CVE, ссылающийся на предыдущий. В нем говорится, что исправление предыдущей атаки обхода путей было неполным, и мы все еще могли совершать обход, если в рассматриваемом пути использовалась директива alias для сопоставления URL с файловой системой. Этому CVE был присвоен номер CVE-2021-42013, с описанием:
Было обнаружено, что исправление для CVE-2021-41773 в Apache HTTP Server 2.4.50 было недостаточным. Злоумышленник может использовать атаку обхода путей для сопоставления URL с файлами за пределами каталогов, настроенных директивами типа Alias. Если файлы за пределами этих каталогов не защищены обычной конфигурацией по умолчанию "require all denied", такие запросы могут быть успешными. Если для этих псевдонимов также включены CGI-скрипты, это может позволить удаленное выполнение кода. Эта проблема затрагивает только Apache 2.4.49 и Apache 2.4.50, но не более ранние версии.
Как и ранее, мы можем узнать несколько вещей:
Пока мы осмысливаем это безумие, в следующем задании рассмотрим необходимую конфигурацию.
Ответьте на вопросы ниже
Немного теории
Эксплойт обхода путей — это атака, направленная на доступ к ресурсам, которые обычно недоступны, путем злоупотребления ошибками в разрешении и/или нормализации путей. Обычно мы используем этот тип атаки, перемещаясь (также известный как обход) назад за пределы предполагаемого корня с помощью синтаксиса ...
Нормализация? Что это?
Обычно при указании пути для поиска файла кодом требуется абсолютный путь. Назовем его каноническим путем. Если вместо него задан относительный путь, он должен быть нормализован до канонической формы, чтобы библиотеки ОС, использующие этот путь, могли найти соответствующий ресурс. Это, конечно, упрощение, но суть остается.
В целом существуют платформенные библиотеки для выполнения этой нормализации, но в C/C++ мы обычно всё делаем сами. Хотя это может дать некоторую гибкость, это также может легко привести к ошибкам, если наша реализация не идеальна.
Нормализация URL
HTTP-сервер должен преобразовать URL в канонический путь в файловой системе, чтобы найти правильный файл для обслуживания. Хотя существуют некоторые фильтры, предотвращающие обход корневого каталога документов, некоторые случаи могут быть легко упущены. В данном случае эксплойт использует не только URL-кодирование (мы к этому еще вернемся), но и ошибку в нормализации путей модуля Alias (предположительно).
Отступление о URL-кодировании
Определено в RFC 3986, раздел 2, URL-кодирование — это схема, используемая для кодирования специальных или зарезервированных символов в URL. Например, пробелы в URL кодируются как символ + (в частности, в параметрах запроса). Если мы хотим закодировать фактический плюс, мы должны закодировать его с помощью так называемого "процентного кодирования". Это просто включает добавление шестнадцатеричного кода символа US-ASCII с префиксом %. В нашем примере символ + может быть закодирован как %2B.
Любой символ может быть URL-закодирован, и URL, которые полностью закодированы, функционально эквивалентны незакодированной версии. Из RFC: Если два URI отличаются только регистром шестнадцатеричных цифр, используемых в процентно-закодированных октетах, они эквивалентны.
Итак, что произошло с Apache?
Недавнее изменение в модуле нормализации путей в сервере Apache позволило специально созданному URL обойти фильтры и выйти за пределы корневого каталога документов, что позволяет произвольное чтение файлов в системе, если конфигурация это допускает. Более того, если модуль CGI включен, возможно и произвольное выполнение файлов!
Ответьте на вопросы ниже
A) Включает произвольные удаленные файлы для обработки на сервере. B) Включает произвольные локальные файлы для обработки на сервере. C) Позволяет серверу раскрыть произвольные файлы. D) Ничего из вышеперечисленного.
Взлом Apache ради забавы
Итак, теория окончена, давайте перейдем к эксплуатации этой ошибки. Во-первых, нам нужна уязвимая версия Apache. К счастью, у нас есть Docker для этого :)```
user@machine$ docker pull httpd:2.4.49
2.4.49: Pulling from library/httpd
07aded7c29c6: Already exists
05bb40c8f148: Already exists
0827b74117da: Already exists
35a526fdcc7d: Pull complete
59fed288cd32: Pull complete
Digest: sha256:dcba0d12e2362fb0c50ec524ae8aa1cca4a4ba7216617a57e7bbca20767e79cc
Status: Downloaded newer image for httpd:2.4.49
docker.io/library/httpd:2.4.49
**Конфигурация**