+38/044/257-2444
+38/067/502-3306
+38/050/370-3627
Новости

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

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

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

Суть уязвимости в том, что в предлагаемых серверных обработчиках полностью отсутствовали фильтры для блокирования загрузки потенциально опасных типов контента и загружаемые файлы сохранялись на сервере под исходными именами, которые определял пользователь на сайте. Данные загружались в каталог "./files", находящийся в рабочей иерархии каталогов web-сервера. Таким образом, при использовании предлагаемых серверных обработчиков, пользователь мог сохранить любые типы файлов, например, "test.php", которые сохранялись в публично доступной директории и становились видимыми для внешних запросов (например, загруженный "test.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-сервера.

Другие новости