Ещё одна уязвимость в Apache httpd, позволяющая обратиться за пределы корневого каталога

Найден новый вектор атаки на 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«.

Источник: http://www.opennet.ru/opennews/art.shtml?num=55939