Компания Nginx сообщила о выпуске патча для недавно обнаруженной уязвимости CVE-2013-4547.
Баг в Nginx, найденный сотрудником компании Google, позволяет злоумышленнику обойти ограничения безопасности в некоторых конфигурациях веб-сервера с помощью специально составленного запроса. Баг может иметь и другие возможности его эксплуатации.
Проблема в том, что Nginx некорректно обрабатывает URI с пробелами. Символ пробела запрещено использовать по стандарту HTTP, но веб-сервер Nginx ради обратной совместимости обрабатывает пробелы с версии 0.8.41. При этом некоторые проверки URI не осуществляются, если часть URI находится за пробелом.
Предположим, что в настройках веб-сервера запрещен доступ к части сайта:
location /protected/ {
deny all;
}
Так вот, кто угодно через интернет может получить доступ к закрытой части сервера, если запросит файл, используя пробел.
/foo /../protected/file
Способ работает со статическими файлами, если директория "foo " существует и имеет пробел на конце.
Другой вариант эксплуатации уязвимости — запуск на исполнение файла с завершающим пробелом в имени в конфигурации:
location ~ \.php$ {
fastcgi_pass ...
}
Его можно запустить запросом "/file \0.php".
Баг присутствует во всех версиях Nginx, начиная с 0.8.41 и заканчивая 1.5.6, но патч выпущен только с версиями 1.5.7 и 1.4.4.
В качестве временной защитной меры можно запретить использование пробелов через конфигурационный файл.
if ($request_uri ~ " ") {
return 444;
}