- PVSM.RU - https://www.pvsm.ru -
Я посетил встречу Messaging, Malware and Mobile Anti-Abuse Working Group (m3aawg.org) в Бруклине, Нью-Йорк. Я ожидал лучшей погоды, чтобы побродить по городу, насладиться конференцией, и широким выбором еды на районе. Я настолько был уверен в ясности неба, что даже не взял с собой ничего от дождя. И всю неделю шел дождь. Это вынудило меня оставаться в моем номере в отеле с бесплатным WiFi и моим рабочим ноутбуком. Я решил потратить это время за исследованием Node.js и их сопутствующих пакетов, доступных на https://www.npmjs.com [1].
Там есть тысячи пакетов от пользователей, доступные для скачивания и установки в ваш проект. Я поискал в NPM по популярным названиям пакетов, таких как file, backup, download, или upload. Последний поисковый запрос показал мне проект под названием jQuery file upload [2] от пользователя Blueimp. Его описание показалось достаточно интересным, чтобы скачать и исследовать его.
Виджет загрузки файлов для jQuery, с поддержкой выбора нескольких файлов, drag & drop, индикатора прогресса, валидации и предпросмотра изображений, аудио и видео. Поддерживает кросс-доменные запросы, частичный и возобновляемый механизм загрузки файлов с ресайзом изображений на клиентской стороне. Работает в любой серверной платформой (PHP, Python, Ruby on Rails, Java, Node.js, Go и т.д.), которая поддерживает стандартную загрузку файлов через HTML-форму.
Я начал смотреть на исходники пакета и остановил свое внимание на паре PHP-файлов в директории server/php. Файлы назывались upload.php и UploadHandler.php. upload.php вызывал UploadHandler.php, где находился основной код загрузки файлов. Я также заметил, что файлы загружались в директорию files/ в корне веб-сервера. Я написал простую команду с curl и примитивным PHP-скриптом, которые подтвердили мне, что я могу загрузить файл на сервер и затем использовать его, чтобы исполнять команды на сервере.
$ curl -F "files=@shell.php" http://example.com/jQuery-File-Upload-9.22.0/server/php/index.php
Где файл shell.php содержит:
<?php $cmd=$_GET['cmd']; system($cmd);?>
Открытие в браузере страницы с параметром cmd=id с тестового сервера вернуло мне id пользователя, от которого запускался процесс сервера. Я предположил, что эта уязвимость не прошла незамеченной и быстрый поиск в Google подтвердил мне, что другие проекты, которые использовали этот код или его производные, оказались уязвимы. Нашлось также и несколько видео, показывающих как атаковать похожие программные пакеты.
Я уведомил автора jQuery File Upload и начал документировать то, что я нашел, для присвоения номера CVE. Вскоре на следующий день несколько смущенный автор ответил мне, спрашивая больше информации, так как он не смог воспроизвести уязвимость в своем тестовом окружении.
После сравнения наших тестовых конфигураций по email, мы обнаружили, что разработчики Apache выключили поддержку .htaccess файлов начиная с версии 2.3.9. Оказывается, это было сделано для улучшения производительности [3], чтобы серверу не приходилось проверять этот файл каждый раз, когда он обращается к соответствующей директории. Более того, это изменение также было сделано для предотвращения переопределения пользователями настроек безопасности [4], которые были сконфигурированы на сервере.
Таким образом, Apache имели благие намерения при отключении .htaccess, но их изменения также подставили некоторых разработчиков и их проекты под удар, в частности, если они рассчитывали на настройки безопасности, сделанные в .htaccess.
В случае этой библиотеки, для правильной обработки этой ситуации и исправления уязвимости загрузки файлов CVE-2018-9206, разработчик изменил код так [5], чтобы он разрешал загружать только файлы изображений.
Здесь также стоит заметить, что из-за изменений в Apache, часть из 7,800 остальных проектов могут быть уязвимы к проблеме с загрузкой файлов.

Большинство из этих форков все еще несут оригинальную уязвимость в своем коде. В некоторых случаях уязвимость остается даже после того, как разработчик отредактировал оригинальный код от Blueimp чтобы встроить его в свой проект, так что проекты все еще уязвимы к моему примеру атаки с небольшими вариациями.
Это значит, что если какой-то из этих проектов используется в продакшене, то он подвержен уязвимости загрузки файла с его последующим исполнением. Открывая возможности для кражи данных из приложения, инжекции malware, дефейсу и другим возможностям навредить.
К сожалению, нет возможности точно определить, сколько проектов, форкнутых от оригинального jQuery File Upload все еще активно поддерживаются и применяют изменения, сделанные в основном проекте. Также нет возможности определить, где именно форкнутые проекты используются в продакшене, если такие есть. Более того, старые версии проекта также были уязвимы для проблемы с загрузкой файлов, вплоть до 2010 года.
Интернет опирается на множество механизмов защиты, чтобы держать наши системы, данные и транзакции в надежности и безопасности. Если один из этих механизмов внезапно пропадет, это может подвергнуть риску безопасность пользователей и разработчиков, рассчитывающих на него.
Для разработчиков будет хорошей идеей просматривать изменения в системах и библиотеках, на которых они базируют свой проект. В этой статье механизм безопасности, который удалили Apache, повлиял не только на Blueimp-овский Jquery file upload, но и на все его форки и ответвления. Уязвимость повлияла на множество проектов, которые зависят от него, начиная от самостоятельных веб-приложений и заканчивая плагинами к WordPress и другим CMS.
Автор: Борис Сердюк
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/bezopasnost/296451
Ссылки в тексте:
[1] https://www.npmjs.com: https://www.npmjs.com
[2] jQuery file upload: https://github.com/blueimp/jQuery-File-Upload
[3] для улучшения производительности: https://httpd.apache.org/docs/current/en/howto/htaccess.html
[4] предотвращения переопределения пользователями настроек безопасности: https://httpd.apache.org/docs/2.4/misc/security_tips.html
[5] изменил код так: https://github.com/blueimp/jQuery-File-Upload/commit/aeb47e51c67df8a504b7726595576c1c66b5dc2f
[6] Оригинальный баг-репорт: https://github.com/blueimp/jQuery-File-Upload/pull/3514
[7] Запись CVE-2018-9206: https://nvd.nist.gov/vuln/detail/CVE-2018-9206
[8] Статья на ZDNet: https://www.zdnet.com/article/zero-day-in-popular-jquery-plugin-actively-exploited-for-at-least-three-years/
[9] Источник: https://habr.com/post/427171/?utm_source=habrahabr&utm_medium=rss&utm_campaign=427171
Нажмите здесь для печати.