The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Критическая уязвимость в пакете ImageMagick, используемом на многих сайтах

04.05.2016 10:00

В пакете ImageMagick, который часто используется web-разработчиками для преобразования изображений (например, создания миниатюр), устранена порция уязвимостей, среди которых имеется критическая проблема (CVE-2016-3714), позволяющая организовать выполнение кода при обработке специально оформленных изображений. В том числе проблеме подвержены пользователи пакетов PHP imagick, Ruby rmagick, Ruby paperclip и Node.js imagemagick. Уязвимости присвоено имя "ImageTragick".

Исследователями уже подготовлен рабочий прототип эксплоита, который вероятно уже взят злоумышленниками на вооружение для проведения атак (имеются сведения, что информация об уязвимости стала доступна посторонним до обнародования проблемы). Всем пользователям рекомендуется незамедлительно обновить ImageMagick, но на момент написания новости исправление доступно лишь в виде патча, сомнительного с точки зрения эффективности защиты. Обновления пакетов для дистрибутивов еще не сформированы: Debian, Ubuntu, RHEL/CentOS, SUSE, openSUSE, FreeBSD, Fedora.

В качестве обходного пути защиты пользователям ImageMagick рекомендуется отключить проблемные типы обработчиков (EPHEMERAL, URL, HTTPS, MVG, MSL) в файле конфигурации /etc/ImageMagick/policy.xml. Кроме того, предлагается реализовать проверку поступающих на обработку изображений на предмет соответствия расширения файла и его идентификатора в заголовке файла (GIF - "47 49 46 38", JPEG - "FF D8" и т.п.).

Уязвимость вызвана ненадлежащей проверкой имён файлов при вызове внешних обработчиков, которые запускаются при помощи функции system() с использованием одной строки, без разделения опций. Так как параметр с именем файла (%M) передаётся напрямую без чистки и имеется возможность передачи произвольных спецсимволов, не составляет труда осуществить подстановку любых shell-команд. Например, обработчик HTTPS оформлен как '"wget" -q -O "%o" "https:%M"', что позволяет вместо имени хоста указать "https://example.com`ls -la`" или "https://example.com|ls -la" и выполнить команду 'ls -la', например 'convert 'https://example.com"|ls "-la' out.png'.

Опасность проблемы усиливает то, что она проявляется не только при прямом вызове, но и при косвенном обращении к ресурсам. Например, типы SVG и MVG позволяют ссылаться на внешние ресурсы, что даёт возможность организовать атаку через передачу файлов SVG и MVG с нормальным именем, которое пройдёт первый уровень проверки в web-приложении. Например, для атаки можно загрузить SVG-файл с тегом '<image xlink:href="https://example.com/image.jpg"|ls "-la">' или файл exploit.mvg с командой 'url(https://example.com/image.jpg"|ls "-la)', что приведёт к выполнению 'ls -la' при их обработке в ImageMagick. Например:


   $ cat exploit.mvg
   push graphic-context
   viewbox 0 0 640 480
   fill 'url(https://example.com/image.jpg"|ls "-la)'
   pop graphic-context

   $ convert exploit.mvg out.png
   total 32
   drwxr-xr-x 6 user group 204 Apr 29 23:08 .
   drwxr-xr-x+ 232 user group 7888 Apr 30 10:37 ..
   ...

Более того, так как ImageMagick определяет тип по содержимому заголовка, а не расширению, атакующий может загрузить проблемные SVG- и MVG-файлы под видом других типов изображений, например, вместо вышеприведённого exploit.mvg загрузить файл exploit.jpg, который на деле будет обработан как файл MVG.

Кроме CVE-2016-3714, в ImageMagick также выявлено несколько менее опасных уязвимостей, принцип эксплуатации которых также основывается на манипуляции с файлами в формате MVG:

  • CVE-2016-3718 - возможность инициирования внешних запросов HTTP GET или FTP при обработке специально оформленных изображений. Например, для формата MVG можно указать 'url(http://example.com/)';
  • CVE-2016-3715 - возможность удаления файлов при обработке специально оформленных изображений. В MVG-файле может быть вызван обработчик 'ephemeral' (например, "image over 0,0 0,0 'ephemeral:/tmp/delete.txt'"), который удаляет файлы после их чтения;
  • CVE-2016-3716 - возможность перемещения файлов при обработке специально оформленных изображений через применение протокола msl. Например, доступен интересный эксплоит (secgeek.net/POC/POC.gif), позволяющий использовать данную уязвимость для установки PHP Shell;
  • CVE-2016-3717 - доступ к произвольным локальным файлам на сервере через использование псевдопротокола 'label' (например, "image over 0,0 0,0 'label:@/etc/passwd'"). После выполнения "convert file_read.mvg out.png" на результирующем изображении будет текст с содержимым файла.

Дополнение 1: Судя по всему проблеме также подвержен пакет GraphicsMagick, форк ImageMagick.

Дополнение 2: Разработчики GraphicsMagick проанализировали подверженность их пакета уязвимостям в ImageMagick. Несмотря на дополнительные проверки аргументов, в GraphicsMagick также возможна эксплуатация с выполнением команд в shell. Атака может быть организована через формат "gplt", который обрабатывается через запуск gnuplot, который производится функцией system().

  1. Главная ссылка к новости (http://openwall.com/lists/oss-...)
  2. OpenNews: В FFmpeg устранена уязвимость, которая может привести к утечке локальных файлов
  3. OpenNews: Опасная уязвимость в реализациях LZO/LZ4, затрагивающая ядро Linux, FFmpeg, OpenVPN и другие проекты
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/44371-imagemagick
Ключевые слова: imagemagick
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (48) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, анон (?), 10:08, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    стоп. т.е. если файл был получен от пользователя в request и его сохранили локально не под его настоящим именем, а под автогенерированным(с сохранением расширения), а потом обработали imageMagick-ом, то серверу ничего не будет?
    если да, то это тогда webMonkeyTragick.
     
     
  • 2.3, анон (?), 10:41, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    охохох. если все так и обстоит с svg и ко, то это просто дыра космического масштаба=(
     
     
  • 3.46, Ухаха (?), 10:05, 05/05/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Речь только о "формате" MVG, содержимое которого является набором команд Imagemagick, которые могут принимать активное содержимое.

    Чтобы оказаться уязвимым, нужно принимать и обрабатывать это файло со стороны.

    Все равно, что shell-доступ без пароля.

     
     
  • 4.54, Аноним (-), 02:41, 09/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Можно назвать это photo.jpg, далее image magic при попытке сконвертировать казалось бы жыпег немного выполнит команды, не только свои но и системные.
     
  • 2.28, Аноним (-), 13:47, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > а под автогенерированным(с сохранением расширения), а потом обработали imageMagick-ом, то серверу ничего не будет?

    Нет, замены имени файла недостаточно.
    >Кроме того, предлагается реализовать проверку поступающих на обработку изображений на предмет соответствия расширения файла и его идентификатора в заголовке файла (GIF - "47 49 46 38", JPEG - "FF D8" и т.п.).

     

  • 1.2, dgdsgfsadfgsdfgsdfg (?), 10:08, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Навеяло kotyata.jpg.exe
     
  • 1.5, бедный буратино (ok), 10:44, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    ну, imagemagick мне бы в любом случае было бы страшно в веб пускать

    уж лучше py-PIL / py-Pillow

     
     
  • 2.6, Аноним (-), 10:54, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > уж лучше py-PIL / py-Pillow

    который обвязка над  ImageMagick? (шутка)

     
     
  • 3.10, бедный буратино (ok), 11:12, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Нет, он вообще никак не связан с imagemagick.
     
  • 2.20, playnet0 (?), 13:11, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В pillow я за неделю зарепортил 3 серьезных бага, и еще пару не очень серьезных, которые хз как решать.

    > ну, imagemagick мне бы в любом случае было бы страшно в веб
    > пускать
    > уж лучше py-PIL / py-Pillow

     
     
  • 3.22, бедный буратино (ok), 13:19, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    они позволяют выполнить произвольный код на системе?
     
     
  • 4.25, playnet0 (?), 13:23, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > они позволяют выполнить произвольный код на системе?

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

     
     
  • 5.34, Pahanivo (ok), 15:20, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Вы по ходу вообще не одупляете о чем речь и путаете глюки с уязвимостями.
     
     
  • 6.35, igelko (?), 16:08, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +4 +/
    каждый сегфолт - это потенциальный проезд по памяти с дальнейшим RCE.
     
  • 3.43, Аноним (-), 01:07, 05/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это же буратина, он вечно всякую херню к себе тащит.
     

  • 1.8, Аноним (-), 10:58, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > A file with an extension of .MVG is known as a Image Magick proprietary vector graphics format.

    )))

     
  • 1.9, Аноним (-), 10:59, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А GraphicsMagick подвержен?
     
     
  • 2.11, Аноним (-), 11:12, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Да, там в delegate.c тот же system(command) используется, только через обёртку.
     
  • 2.36, vitalif (ok), 16:11, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    НЕА!

    $ gm convert exploit.mvg exploit.png
    gm convert: Unrecognized color (url(https://example.com/image.jpg"|ls "-la)).

     

  • 1.12, anonymous (??), 11:15, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Мда. А ведь совсем недавно такой же баг выловили из ffmpeg
     
     
  • 2.15, Аноним (-), 11:50, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    ЕМНИП, выловили тоже мейлрушники.
     
     
  • 3.21, Буратино (?), 13:13, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Вот такой вот удочкой вестимо удили: grep -rw 'system'
     

  • 1.13, Аноним (-), 11:29, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > для формата MVG можно указать 'url(http://example.com/)';

    Странный CVE, это же штатная возможность, как она может быть багом?

     
  • 1.14, Аноним (-), 11:38, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Security Circus
     
  • 1.16, Аноним (-), 12:12, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так вот чем thumbnail-ы в Linux создавать! Я всегда обходил стороной эту программу, потому что в моём первом дистре её криво собрали. А сейчас почитал описание, и оказалось что интересно! А им можно заменить GIMP?

    Про новость. Эй, они что, запускают ImageMagick от root?

     
     
  • 2.17, Аноним (-), 12:34, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    На большинстве установок прав процесса сервера приложений вполне достаточно.
     
  • 2.18, Аноним (-), 12:44, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    У gimp'а и IMM разные назначения. Эта фигня удобна в качестве "швейцарского ножа", для использования из консоли и скриптов. В качестве библиотеки оно несколько жирновато, обычно поддержки такого зоопарка экзотики не требуется.

    А /etc/passwd можно прочитать от любого юзера.

     
     
  • 3.23, playnet0 (?), 13:21, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > А /etc/passwd можно прочитать от любого юзера.

    И что с ним делать? Паролей там нет.
    Список пользователей разве что, но эта инфа не вотпрям критична.

     
     
  • 4.44, Аноним (-), 01:11, 05/05/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Там есть точное имя юзера (не надо угадывать), их список (можно подбирать пароль сразу для нескольких) и видно у кого есть валидный шелл. Кроме того, в geckos может быть полезная инфа, имя, фамилия, телефоны, ...

    Не так уж и мало.

     
  • 3.45, АнОНим (?), 02:47, 05/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Процессы запускаются от имени пользователя nginx или apache.
     
  • 2.24, Аноним (-), 13:21, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а зачем запускать из-под рута? достаточно запустить от имени клиента хостинга, который владеет на нём рядом сайтов.

    imagemagick удобен для обработки сразу множества изображений, если запускать его из sh в цикле или выполнить что-то вроде такого:
    ls *.jpg | sed -r 's/^(.*)\.jpg$/convert "\1.jpg" -scale 60x60^ -gravity Center -crop 60x60+0+0 "thumb-\1.jpg"/;' | sh
    (должно из всех *.jpg в данной директории создать thumb-*.jpg размером 60x60, содержащие центральную часть изображений).

     
     
  • 3.48, Возмущенная общественность (?), 16:21, 05/05/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >ls *.jpg | sed -r 's/^(.*)\.jpg$/c

    a зачем когда есть православный find? ls дуба не даст в директории с мульоном джипежек?

     
     
  • 4.51, Аноним (-), 00:12, 06/05/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >>ls *.jpg | sed -r 's/^(.*)\.jpg$/c
    > a зачем когда есть православный find? ls дуба не даст в директории
    > с мульоном джипежек?

    Даст. 4 гига размер командной строки :)

     
  • 4.52, Andrey Mitrofanov (?), 07:06, 06/05/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >>ls *.jpg | sed -r 's/^(.*)\.jpg$/c
    > a зачем когда есть православный find? ls дуба не даст в директории
    > с мульоном джипежек?

    Преждевременную замечаю я в тебе оптимизацию не к месту, молодой падаван. Светлая сторона find ничто рядом с мулионом жипижок в 1 директории. Не позволяй тобой Злу овладеть. Грустно видеть, г[o]невом затуманен взор твой.  >?<

     

  • 1.19, Аноним (19), 13:05, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > которые запускаются при помощи функции system()

    Так делать - признак дичайшего быдл_окода. Как это могли пропустить, код ревью где?

     
     
  • 2.40, Аноним (-), 20:31, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Справедливости ради желательно учитывать цели и юзкейзы самого проекта. А то с особо продвинутых "веб разработчиков" станется bash или перл с eval прикрутить и потом удивляться "дырам".
     

  • 1.26, playnet0 (?), 13:26, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    а что именно в полиси вписывать?
     
     
  • 2.29, Аноним (-), 13:50, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > а что именно в полиси вписывать?

    С сайта в шапке https://imagetragick.com/


    <policymap>
      <policy domain="coder" rights="none" pattern="EPHEMERAL" />
      <policy domain="coder" rights="none" pattern="URL" />
      <policy domain="coder" rights="none" pattern="HTTPS" />
      <policy domain="coder" rights="none" pattern="MVG" />
      <policy domain="coder" rights="none" pattern="MSL" />
    </policymap>



     

  • 1.31, vitalif (ok), 14:19, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Кроме того, предлагается реализовать проверку поступающих на обработку изображений на предмет соответствия расширения

    Так это... кто вообще по расширению тип файла определяет? Это же кривожопие) libmagic (в php - fileinfo) на что дана?

     
     
  • 2.39, scorry (ok), 18:41, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > ... кто вообще по расширению тип файла определяет?

    Ты не поверишь...

     
     
  • 3.42, vitalif (ok), 21:19, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    "сержант, вы не поверите в то, что я сейчас вам скажу" - "не поверю" (грань будущего)
     
  • 2.41, Led (ok), 20:31, 04/05/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > кто вообще по расширению тип файла определяет?

    Ведузоеды.

     

  • 1.32, vitalif (ok), 14:20, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    нахрена они вообще что-то через system запускают, ё-моё
     
     
  • 2.53, Аноним (-), 09:57, 06/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Нахрена они вообще что-то запускают?
     

  • 1.33, Нанобот (ok), 14:42, 04/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >обработчиков, которые запускаются при помощи функции system()

    ССЗБ

     
  • 1.47, arisu (ok), 14:47, 05/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    ох… уберите уже детей из интернетов. и из разработки вообще.

    это, если кто не понял, я не про imagemagick, а про дегенератов, которых в детстве не научили использовать вещи по назначению и не тянуть в рот что попало.

     
     
  • 2.56, Аноним (-), 02:49, 09/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > это, если кто не понял, я не про imagemagick, а про дегенератов,
    > которых в детстве не научили использовать вещи по назначению и не тянуть в рот что попало.

    System() интересная функция. Для грепания. В 90% случаев найдется или бэкдор или эксплойтабельная "фича".

     

  • 1.49, абвгдейка (ok), 21:37, 05/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а главное никто не заметил - у мейлрушечного Karim Valiev почта на жимейле <valievkarim@...il.com> :)
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру