В плагине jQuery-File-Upload (https://github.com/blueimp/jQuery-File-Upload/) выявлена (https://blogs.akamai.com/sitr/2018/10/having-the-security-ru...) поучительная уязвимость CVE-2018-9206 (http://www.vapidlabs.com/advisory.php?v=204), показавшая удивительную беспечность web-разработчиков и web-администраторов. jQuery-плагин jQuery-File-Upload предоставляет функциональный web-виджет для организации загрузки файлов на сайты, поддерживающий групповую загрузку, индикатор прогресса и возобновление прерванных загрузок. Основная функциональность jQuery-File-Upload реализована на JavaScript и выполняется на стороне браузера, при этом в состав также входит набор примеров серверных обработчиков (https://github.com/blueimp/jQuery-File-Upload/tree/master/se...) для сохранения отправляемых файлов.
Суть уязвимости в том, что в предлагаемых серверных обработчиках полностью отсутствовали фильтры для блокирования загрузки потенциально опасных типов контента и загружаемые файлы сохранялись на сервере под исходными именами, которые определял пользователь на сайте. Данные загружались в каталог "./files", находящийся в рабочей иерархии каталогов web-сервера. Таким образом, при использовании предлагаемых сервреных обработчиков, пользователь мог сохранить любые типы файлов, например, "text.php", которые сохранялись в публично доступной директории и становились видимыми для внешних запросов (например, загруженный "text.php" можно было получить запросив "http://example.com/files/test.php").
В ситуации, если на сайте используется PHP и включено выполнение php-файлов во всей иерархии каталогов, подобный запрос без должного ограничения доступа к каталогу "./files" приведёт к выполнению кода сохранённого в файле test.php скрипта на стороне сервера, что позволяет полностью получить контроль за сайтом. Основной ошибкой разработчика jQuery-File-Upload стало то, что он не стал ограничивать допустимые для сохранения типы файлов, а попытался включить в поставку ".htaccess (https://github.com/blueimp/jQuery-File-Upload/blob/master/se...)", устанавливающий обработчик по умолчанию ("SetHandler default-handler", "ForceType application/octet-stream").
Разработчик jQuery-File-Upload почему-то полагал, что на всех web-серверах всегда включена обработка ".htaccess" и активен модуль mod_headers. В обсуждении разработчик дополнения попытался оправдаться (https://news.ycombinator.com/item?id=18267309), что на момент написания плагина по умолчанию в Apache httpd для всех каталогов выставлялась опция "AllowOverride All (https://httpd.apache.org/docs/2.2/en/mod/core.html#allowover...)", но начиная с выпуска 2.3.9 она была незаметно заменена на "AllowOverride None (https://httpd.apache.org/docs/2.4/en/mod/core.html#allowover...)".
Но данное объяснение не выдерживает критики, так как ветка 2.3.x являлась тестовой и сама по себе не использовалась на практике, а выступала основой для формирования следующего значительной ветки Apache httpd 2.4, в которой указанное поведение было документировано (http://httpd.apache.org/docs/2.4/upgrading.html) и преподносилось как одно из изменений для повышения безопасности и производительности. Кроме того, решение о включении или отключении по умолчанию ".htaccess" всегда лежало на операторах хостинга и мэйнтейнерах пактов в дистрибутивах, поэтому и во времена до появления Apache httpd 2.4 нельзя было с уверенностью утверждать, что .htaccess везде будет работать.
За время своего существования плагин jQuery-File-Upload был вошёл (https://www.theregister.co.uk/2018/10/22/jquery_file_flaw/) в состав сотен web-приложений и дополнений к системам управления web-контентом, и лишь единицы догадались ограничить список допустимых для загрузки файлов. В настоящее время на GitHub репозиторий jQuery-File-Upload насчитывает 7843 форков, проверка (https://github.com/lcashdol/Exploits/tree/master/CVE-2018-9206) 1000 из которых показала, что лишь 36 содержат должные исправления, блокирующие уязвимость.
Судя по всему, проблема уже давно известна в кругах атакующих, так как в сети найдено несколько руководств, первое из которых датируется 2015 годом, с демонстрацией взломов тех или иных систем через загрузку php-файла и его последующего открытия из каталога "./files". Всем web-мастерам рекомендуется срочно проверить наличие блокировки доступа к каталогу "./files" для внешних запросов и при необходимости внести изменения, отключающие выполнение PHP-скриптов в данной директории, на уровне настроек web-сервера.
URL: https://blogs.akamai.com/sitr/2018/10/having-the-security-ru...
Новость: https://www.opennet.ru/opennews/art.shtml?num=49483