Хабрахабр

[Перевод] Уходящая от вас безопасность

Я ожидал лучшей погоды, чтобы побродить по городу, насладиться конференцией, и широким выбором еды на районе. Я посетил встречу Messaging, Malware and Mobile Anti-Abuse Working Group (m3aawg.org) в Бруклине, Нью-Йорк. И всю неделю шел дождь. Я настолько был уверен в ясности неба, что даже не взял с собой ничего от дождя. Я решил потратить это время за исследованием Node.js и их сопутствующих пакетов, доступных на https://www.npmjs.com. Это вынудило меня оставаться в моем номере в отеле с бесплатным WiFi и моим рабочим ноутбуком.

Я поискал в NPM по популярным названиям пакетов, таких как file, backup, download, или upload. Там есть тысячи пакетов от пользователей, доступные для скачивания и установки в ваш проект. Его описание показалось достаточно интересным, чтобы скачать и исследовать его. Последний поисковый запрос показал мне проект под названием jQuery file upload от пользователя Blueimp.

Поддерживает кросс-доменные запросы, частичный и возобновляемый механизм загрузки файлов с ресайзом изображений на клиентской стороне. Виджет загрузки файлов для jQuery, с поддержкой выбора нескольких файлов, drag & drop, индикатора прогресса, валидации и предпросмотра изображений, аудио и видео. Работает в любой серверной платформой (PHP, Python, Ruby on Rails, Java, Node.js, Go и т.д.), которая поддерживает стандартную загрузку файлов через HTML-форму.

Файлы назывались upload.php и UploadHandler.php. Я начал смотреть на исходники пакета и остановил свое внимание на паре PHP-файлов в директории server/php. Я также заметил, что файлы загружались в директорию files/ в корне веб-сервера. upload.php вызывал UploadHandler.php, где находился основной код загрузки файлов. Я написал простую команду с 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);?>

Я предположил, что эта уязвимость не прошла незамеченной и быстрый поиск в Google подтвердил мне, что другие проекты, которые использовали этот код или его производные, оказались уязвимы. Открытие в браузере страницы с параметром cmd=id с тестового сервера вернуло мне id пользователя, от которого запускался процесс сервера. Нашлось также и несколько видео, показывающих как атаковать похожие программные пакеты.

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

3. После сравнения наших тестовых конфигураций по email, мы обнаружили, что разработчики Apache выключили поддержку .htaccess файлов начиная с версии 2. Оказывается, это было сделано для улучшения производительности, чтобы серверу не приходилось проверять этот файл каждый раз, когда он обращается к соответствующей директории. 9. Более того, это изменение также было сделано для предотвращения переопределения пользователями настроек безопасности, которые были сконфигурированы на сервере.

Таким образом, Apache имели благие намерения при отключении .htaccess, но их изменения также подставили некоторых разработчиков и их проекты под удар, в частности, если они рассчитывали на настройки безопасности, сделанные в .htaccess.

В случае этой библиотеки, для правильной обработки этой ситуации и исправления уязвимости загрузки файлов CVE-2018-9206, разработчик изменил код так, чтобы он разрешал загружать только файлы изображений.

Эта проблема больше, чем одного проекта

Здесь также стоит заметить, что из-за изменений в Apache, часть из 7,800 остальных проектов могут быть уязвимы к проблеме с загрузкой файлов.

В некоторых случаях уязвимость остается даже после того, как разработчик отредактировал оригинальный код от Blueimp чтобы встроить его в свой проект, так что проекты все еще уязвимы к моему примеру атаки с небольшими вариациями. Большинство из этих форков все еще несут оригинальную уязвимость в своем коде.

Открывая возможности для кражи данных из приложения, инжекции malware, дефейсу и другим возможностям навредить. Это значит, что если какой-то из этих проектов используется в продакшене, то он подвержен уязвимости загрузки файла с его последующим исполнением.

Также нет возможности определить, где именно форкнутые проекты используются в продакшене, если такие есть. К сожалению, нет возможности точно определить, сколько проектов, форкнутых от оригинального jQuery File Upload все еще активно поддерживаются и применяют изменения, сделанные в основном проекте. Более того, старые версии проекта также были уязвимы для проблемы с загрузкой файлов, вплоть до 2010 года.

Заключение

Если один из этих механизмов внезапно пропадет, это может подвергнуть риску безопасность пользователей и разработчиков, рассчитывающих на него. Интернет опирается на множество механизмов защиты, чтобы держать наши системы, данные и транзакции в надежности и безопасности.

В этой статье механизм безопасности, который удалили Apache, повлиял не только на Blueimp-овский Jquery file upload, но и на все его форки и ответвления. Для разработчиков будет хорошей идеей просматривать изменения в системах и библиотеках, на которых они базируют свой проект. Уязвимость повлияла на множество проектов, которые зависят от него, начиная от самостоятельных веб-приложений и заканчивая плагинами к WordPress и другим CMS.

Теги
Показать больше

Похожие статьи

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

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

Кнопка «Наверх»
Закрыть