Как взломать сайт друпал, используя новую уязвимость
5 (100%) 1 vote[s]

Сервер возвращает содержимое загруженных файлов без заголовка Content‐Type, а современные браузеры пытаются определить тип содержимого автоматически. Такое поведение и позволит провести XSS‐атаку. Для этого достаточно загрузить код на JS.

Дальше используем еще одну возможность в комментариях — ссылки.

Формируем ссылку на загруженный файл с XSS.

Теперь администратору достаточно перейти по ссылке, и код будет выполнен.

Успешная XSS‐атака на Drupal 8.6.5

уязвимость друпала

Кстати, необязательно использовать загрузку картинок через комментарии. Для тех же целей можно приспособить назначение аватара в профиле пользователя. В этом случае путь будет немного другим: /sites/default/files/ pictures/<ГГГГ‐ММ>/.

ВЫПОЛНЯЕМ ПРОИЗВОЛЬНЫЙ КОД

Давай теперь посмотрим на другую проблему — PHAR‐десериализацию. В панели администратора есть раздел File system. Там можно задать папку для хранения временных файлов (Temporary directory), а также время их жизни.

При сохранении данных формы срабатывает функция system_check_directory, которая проверяет существование указанной директории и наличие необходимых прав на нее.

Здесь отсутствует проверка введенных данных и можно указать враппер phar:// и путь до PHAR‐архива с полезной нагрузкой. Любая функция, которая поддерживает работу с потоками, может триггерить уязвимость.

Для генерации я воспользуюсь классной утилитой phpggc. В ней есть джентльменский набор гаджетов для популярных фреймворков, CMS и различных библиотек. Список постоянно пополняется.

Drupal использует библиотеку Guzzle, в которой есть известная цепочка гаджетов, ведущая к RCE.

Выбираем гаджет Guzzle/RCE1. Здесь ты сразу можешь сгенерировать архив PHAR, указав ключ ‐p и имя архива через ‐o.

Далее переименовываем rce.phar в rce.png и загружаем на сервер как картинку. Если теперь указать путь до файла через враппер PHAR в качестве временной папки, топейлоад отработает и код выполнится.

Указанный путь попадает в функцию is_dir без какой‐либо фильтрации

Успешная эксплуатация RCE в Drupal через PHAR Unserialize

ОБЪЕДИНЯЕМ АТАКИ В ЦЕПОЧКУ

Чтобы получить окончательный вектор атаки, нужно объединить XSS и RCE от администратора.

Сначала загружаем архив PHAR с полезной нагрузкой как PNG и запоминаем путь до него. Далее нам понадобится код на JavaScript, который будет подгружать от админа страницу с настройками и отправлять форму. В ней в качестве file_temporary_path будет указан путь до архива.

Скрипт должен будет получать ответ от сервера. Чтобы легче его парсить, я поместил результат работы команды ls ‐l в тег <shell>.

poc.html

Загружаем этот код через первую уязвимость. Теперь остается только заставить администратора перейти по нужной ссылке. Но это уже совсем другая история.

Что делать? Защищать сайт от уязвимостей, за помощью обращайтесь [email protected]