Неосмотрительное использование плагина jQuery-File-Upload делает многие сайты уязвимыми

В плагине jQuery-File-Upload выявлена поучительная уязвимость CVE-2018-9206, показавшая беспечность web-разработчиков и web-администраторов. jQuery-плагин jQuery-File-Upload предоставляет функциональный web-виджет для организации загрузки файлов на сайты, поддерживающий групповую загрузку, индикатор прогресса и возобновление прерванных загрузок. Основная функциональность jQuery-File-Upload реализована на JavaScript и выполняется на стороне браузера, при этом в состав также входит набор примеров серверных обработчиков для сохранения отправляемых файлов.

Суть уязвимости в том, что в предлагаемых серверных обработчиках полностью отсутствовали фильтры для блокирования загрузки потенциально опасных типов контента и загружаемые файлы сохранялись на сервере под исходными именами, которые определял пользователь на сайте. Данные загружались в каталог «./files», находящийся в рабочей иерархии каталогов web-сервера. Таким образом, при использовании предлагаемых серверных обработчиков, пользователь мог сохранить любые типы файлов, например, «text.php», которые сохранялись в публично доступной директории и становились видимыми для внешних запросов (например, загруженный «text.php» можно было получить запросив «http://example.com/files/test.php»).

В ситуации, если на сайте используется PHP и включено выполнение php-файлов во всей иерархии каталогов, подобный запрос без должного ограничения доступа к каталогу «./files» приведёт к выполнению кода скрипта, сохранённого в файле test.php, на стороне сервера, что позволит полностью получить контроль за сайтом. Основной ошибкой разработчика jQuery-File-Upload стало то, что он не стал ограничивать допустимые для сохранения типы файлов, а попытался включить в поставку «.htaccess«, отключающий выполнение PHP-файлов через возврат обработчика по умолчанию («SetHandler default-handler», «ForceType application/octet-stream»).

Разработчик jQuery-File-Upload полагал, что на всех web-серверах всегда включена обработка «.htaccess» и активен модуль mod_headers. В обсуждении разработчик дополнения попытался оправдаться, что на момент написания плагина по умолчанию в Apache httpd для всех каталогов выставлялась опция «AllowOverride All«, но начиная с выпуска 2.3.9 она была незаметно заменена на «AllowOverride None«.

Но данное объяснение не выдерживает критики, так как ветка 2.3.x являлась тестовой и сама по себе не использовалась на практике, а выступала основой для формирования следующего значительной ветки Apache httpd 2.4, в которой указанное поведение было документировано и преподносилось как одно из изменений для повышения безопасности и производительности. Кроме того, решение о включении или отключении по умолчанию «.htaccess» всегда лежало на операторах хостинга и мэйнтейнерах пактов в дистрибутивах, поэтому и во времена до появления Apache httpd 2.4 нельзя было с уверенностью утверждать, что .htaccess везде будет работать.

За время своего существования плагин jQuery-File-Upload вошёл в состав сотен web-приложений и дополнений к системам управления web-контентом, и лишь единицы догадались ограничить список допустимых для загрузки файлов. В настоящее время на GitHub репозиторий jQuery-File-Upload насчитывает 7843 форков, проверка 1000 из которых показала, что лишь 36 содержат должные исправления, блокирующие уязвимость.

Судя по всему, проблема уже давно известна в кругах атакующих, так как в сети найдено несколько руководств, первое из которых датируется 2015 годом, с демонстрацией взломов тех или иных систем через загрузку php-файла в форме на сайте и последующего запроса этого файла из каталога «./files». Всем web-мастерам сайтов с формами загрузки на базе jQuery-File-Upload рекомендуется проверить наличие блокировки доступа к каталогу «./files» для внешних запросов и при необходимости внести изменения, отключающие выполнение PHP-скриптов в данной директории, на уровне настроек web-сервера.

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

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

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