The OpenNET Project / Index page

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

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

В пакете 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
Тип: Интересно / Проблемы безопасности
Ключевые слова: imagemagick
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | 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, содержимое которого является набором команд Imagema... весь текст скрыт [показать]
     
     
  • 4.54, Аноним (-), 02:41, 09/05/2016 [^] [ответить]    [к модератору]  
  • +/
    Можно назвать это photo.jpg, далее image magic при попытке сконвертировать казалось бы жыпег немного выполнит команды, не только свои но и системные.
     
  • 2.28, Аноним (-), 13:47, 04/05/2016 [^] [ответить]     [к модератору]  
  • +/
    Нет, замены имени файла недостаточно ... весь текст скрыт [показать]
     
  • 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 серьезных бага, и еще пару не очень серьезных,... весь текст скрыт [показать]
     
     
  • 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 создавать Я всегда обходил стороной эту програм... весь текст скрыт [показать]
     
     
  • 2.17, Аноним (-), 12:34, 04/05/2016 [^] [ответить]    [к модератору]  
  • +/
    На большинстве установок прав процесса сервера приложений вполне достаточно.
     
  • 2.18, Аноним (-), 12:44, 04/05/2016 [^] [ответить]     [к модератору]  
  • +/
    У gimp а и IMM разные назначения Эта фигня удобна в качестве швейцарского ножа... весь текст скрыт [показать]
     
     
  • 3.23, playnet0 (?), 13:21, 04/05/2016 [^] [ответить]    [к модератору]  
  • +/
    > А /etc/passwd можно прочитать от любого юзера.

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

     
     
  • 4.44, Аноним (-), 01:11, 05/05/2016 [^] [ответить]     [к модератору]  
  • +2 +/
    Там есть точное имя юзера не надо угадывать , их список можно подбирать пароль... весь текст скрыт [показать]
     
  • 3.45, АнОНим (?), 02:47, 05/05/2016 [^] [ответить]    [к модератору]  
  • +/
    Процессы запускаются от имени пользователя nginx или apache.
     
  • 2.24, Аноним (-), 13:21, 04/05/2016 [^] [ответить]     [к модератору]  
  • +1 +/
    а зачем запускать из-под рута достаточно запустить от имени клиента хостинга, к... весь текст скрыт [показать]
     
     
  • 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 +/
    Преждевременную замечаю я в тебе оптимизацию не к месту, молодой падаван Светла... весь текст скрыт [показать]
     
  • 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 code policymap policy domain co... весь текст скрыт [показать]
     
  • 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 [^] [ответить]     [к модератору]  
  • +/
    System интересная функция Для грепания В 90 случаев найдется или бэкдор или... весь текст скрыт [показать]
     
  • 1.49, абвгдейка (ok), 21:37, 05/05/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    а главное никто не заметил - у мейлрушечного Karim Valiev почта на жимейле <valievkarim@...il.com> :)
     

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


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