Найден новый вектор атаки на 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/.%2e/.%2e/.%2e/.%2e/.%2e/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/.%2e/.%2e/.%2e/.%2e/.%2e/etc/passwd'
curl 'http://192.168.0.1/aliaseddir/.%2e/.%2e/.%2e/.%2e/.%2e/usr/local/apache2/cgi-bin/test.cgi'
Проблема затрагивает в основном непрерывно обновляемые дистрибутивы, такие как Fedora, Arch Linux и Gentoo, а также порты FreeBSD. Пакеты в стабильных ветках консервативных серверных дистрибутивов Debian, RHEL, Ubuntu и SUSE уязвимости не подвержены. Проблема не проявляется, если доступ к каталогам явно запрещён при помощи настройки "require all denied", которая по умолчанию установлена для корня в типовой конфигурации httpd, поставляемой в Debian и многих других дистрибутивах.
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
Дополнение: 6 и 7 октября компания Cloudflare зафиксировала более 300 тысяч попыток эксплуатации уязвимости CVE-2021-41773 в день. Чаще всего в результате автоматизированных атак запрашивают содержимое "/cgi-bin/.%2e/.git/config", "/cgi-bin/.%2e/app/etc/local.xml", "/cgi-bin/.%2e/app/etc/env.php" и "/cgi-bin/.%2e/%2e%2e/%2e%2e/etc/passwd".
По своей сути новая проблема (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/.%2e/.%2e/.%2e/.%2e/.%2e/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/.%2e/.%2e/.%2e/.%2e/.%2e/etc/passwd'
curl 'http://192.168.0.1/aliaseddir/.%2e/.%2e/.%2e/.%2e/.%2e/usr/local/apache2/cgi-bin/test.cgi'
Проблема затрагивает в основном непрерывно обновляемые дистрибутивы, такие как Fedora, Arch Linux и Gentoo, а также порты FreeBSD. Пакеты в стабильных ветках консервативных серверных дистрибутивов Debian, RHEL, Ubuntu и SUSE уязвимости не подвержены. Проблема не проявляется, если доступ к каталогам явно запрещён при помощи настройки "require all denied", которая по умолчанию установлена для корня в типовой конфигурации httpd, поставляемой в Debian и многих других дистрибутивах.
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
Дополнение: 6 и 7 октября компания Cloudflare зафиксировала более 300 тысяч попыток эксплуатации уязвимости CVE-2021-41773 в день. Чаще всего в результате автоматизированных атак запрашивают содержимое "/cgi-bin/.%2e/.git/config", "/cgi-bin/.%2e/app/etc/local.xml", "/cgi-bin/.%2e/app/etc/env.php" и "/cgi-bin/.%2e/%2e%2e/%2e%2e/etc/passwd".