Обновление nginx 1.4.4 с устранением уязвимости

Выпущены внеплановое обновление стабильной ветки http-сервера nginx 1.4.4 и экспериментальный выпуск nginx 1.5.7 в которых устранена уязвимость (CVE-2013-4547), позволяющая обойти ограничения доступа к закрытым областям сайта, при наличии на сервере директорий c именем, заканчивающимся на символ пробела. Проблема выявлена командой Google Security Team и проявляется во всех выпусках начиная с версии 0.8.41.

Суть проблемы сводится к возможности обхода блоков «location» через косвенное обращения к ресурсу с использованием разрешённой директории с пробелом в конце имени. В частности, если на сервере публично доступна директория «foo » и закрыт доступ к директории «protected» с использованием правила «location /protected/ { deny all; }», то получить доступ к содержимому директории «protected» можно отправив запрос «/foo /../protected/file» вместо «/protected/fire». Другим проявлением может стать возможность обращения в форме «/file .php» к скриптам с пробелом в имени при наличии правила «location ~ .php$ { }».

При отправке таких запросов, сервер ограничивается проверкой маски в блоке до неэкранированного пробела. Причиной уязвимости является добавленный в версии nginx 0.8.41 код для обеспечения совместимости с некоторыми проблемными клиентскими приложениями, допускающий использование неэкранированных пробелов в URI, несмотря на недопустимость таких символов в протоколе HTTP (в URI должен фигурировать «%20″, а не » «).

Пользователям прошлых версий nginx предложено можно использовать патч или заблокировать проявление проблемы обходным путём, добавив в блок server{} конфигурации:

    if ($request_uri ~ " ") {
        return 444;
    } 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.