В библиотеке ImageMagick (http://www.imagemagick.org/), которая часто используется web-разработчиками для преобразования изображений (например, создания миниатюр), устранена (http://openwall.com/lists/oss-security/2016/05/03/13) порция уязвимостей (http://www.openwall.com/lists/oss-security/2016/05/03/18), среди которых имеется критическая проблема (CVE-2016-3714), позволяющая организовать выполнение кода при обработке специально оформленных изображений. В том числе проблеме подвержены пользователи пакетов PHP imagick, Ruby rmagick, Ruby paperclip и Node.js imagemagick. Уязвимости присвоено имя "ImageTragick (https://imagetragick.com/)".Исследователями уже подготовлен (http://www.openwall.com/lists/oss-security/2016/05/03/18) рабочий прототип эксплоита, который вероятно уже взят злоумышленниками на вооружение для проведения атак (имеются сведения, что информация об уязвимости стала доступна посторонним до обнародования проблемы). Всем пользователям рекомендуется незамедлительно обновить ImageMagick, но на момент написания новости исправление доступно в виде сомнительного с точки зрения надёжности патча (https://github.com/ImageMagick/ImageMagick/commit/a347456a1e...). Обновления пакетов для дистрибутивов еще не сформированы: Debian (https://security-tracker.debian.org/tracker/CVE-2016-3714), Ubuntu (https://people.canonical.com/~ubuntu-security/cve/2016/CVE-2...), RHEL/CentOS (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2016-3714), SUSE (https://bugzilla.novell.com/show_bug.cgi?id=CVE-2016-3714), openSUSE (https://lists.opensuse.org/opensuse-security-announce/2016-05/), FreeBSD (http://www.vuxml.org/freebsd/), Fedora (https://bodhi.fedoraproject.org/updates/?releases=F23&type=s...).
В качестве обходного пути защиты пользователям ImageMagick рекомендуется отключить проблемные типы обработчиков в файле конфигурации /etc/ImageMagick/policy.xml (https://gist.github.com/rawdigits/d73312d21c8584590783a5e07e...). Кроме того, предлагается реализовать проверку поступающих на обработку изображений на предмет соответствия расширения файла и его идентификатора в заголовке файла (GIF - "47 49 46 38", JPEG - "FF D8" и т.п.).
Уязвимость вызвана (http://www.openwall.com/lists/oss-security/2016/05/03/18) ненадлежащей проверкой имён файлов при вызове внешних обработчиков, которые вызываются при помощи функции system() с использованием одной строки, без разделения опций. Так как параметр с именем файла (%M) передаётся напрямую без чистки и имеется возможность передачи произвольных спецсимволов, не составляет труда осуществить подстановку любых shell-команд. Например, обработчик HTTPS оформлен как '"wget" -q -O "%o" "https:%M"', что позволяет вместо имени хоста указать '"https://example.com" |ls "-la"' и выполнить команду 'ls -la'.URL: http://openwall.com/lists/oss-security/2016/05/03/13
Новость: http://www.opennet.me/opennews/art.shtml?num=44371
стоп. т.е. если файл был получен от пользователя в request и его сохранили локально не под его настоящим именем, а под автогенерированным(с сохранением расширения), а потом обработали imageMagick-ом, то серверу ничего не будет?
если да, то это тогда webMonkeyTragick.
охохох. если все так и обстоит с svg и ко, то это просто дыра космического масштаба=(
Речь только о "формате" MVG, содержимое которого является набором команд Imagemagick, которые могут принимать активное содержимое.Чтобы оказаться уязвимым, нужно принимать и обрабатывать это файло со стороны.
Все равно, что shell-доступ без пароля.
Можно назвать это photo.jpg, далее image magic при попытке сконвертировать казалось бы жыпег немного выполнит команды, не только свои но и системные.
> а под автогенерированным(с сохранением расширения), а потом обработали imageMagick-ом, то серверу ничего не будет?Нет, замены имени файла недостаточно.
>Кроме того, предлагается реализовать проверку поступающих на обработку изображений на предмет соответствия расширения файла и его идентификатора в заголовке файла (GIF - "47 49 46 38", JPEG - "FF D8" и т.п.).
Навеяло kotyata.jpg.exe
ну, imagemagick мне бы в любом случае было бы страшно в веб пускатьуж лучше py-PIL / py-Pillow
> уж лучше py-PIL / py-Pillowкоторый обвязка над ImageMagick? (шутка)
Нет, он вообще никак не связан с imagemagick.
В pillow я за неделю зарепортил 3 серьезных бага, и еще пару не очень серьезных, которые хз как решать.> ну, imagemagick мне бы в любом случае было бы страшно в веб
> пускать
> уж лучше py-PIL / py-Pillow
они позволяют выполнить произвольный код на системе?
> они позволяют выполнить произвольный код на системе?хз, там были ошибки обработки форматов, приводящие в том числе к некорректному изображению на выходе или даже сегфолту, но критичное поправлено уже с пол года как, если не больше.
Вы по ходу вообще не одупляете о чем речь и путаете глюки с уязвимостями.
каждый сегфолт - это потенциальный проезд по памяти с дальнейшим RCE.
Это же буратина, он вечно всякую херню к себе тащит.
> A file with an extension of .MVG is known as a Image Magick proprietary vector graphics format.)))
А GraphicsMagick подвержен?
Да, там в delegate.c тот же system(command) используется, только через обёртку.
НЕА!$ gm convert exploit.mvg exploit.png
gm convert: Unrecognized color (url(https://example.com/image.jpg"|ls "-la)).
Мда. А ведь совсем недавно такой же баг выловили из ffmpeg
ЕМНИП, выловили тоже мейлрушники.
Вот такой вот удочкой вестимо удили: grep -rw 'system'
> для формата MVG можно указать 'url(http://example.com/)';Странный CVE, это же штатная возможность, как она может быть багом?
Security Circus
Так вот чем thumbnail-ы в Linux создавать! Я всегда обходил стороной эту программу, потому что в моём первом дистре её криво собрали. А сейчас почитал описание, и оказалось что интересно! А им можно заменить GIMP?Про новость. Эй, они что, запускают ImageMagick от root?
На большинстве установок прав процесса сервера приложений вполне достаточно.
У gimp'а и IMM разные назначения. Эта фигня удобна в качестве "швейцарского ножа", для использования из консоли и скриптов. В качестве библиотеки оно несколько жирновато, обычно поддержки такого зоопарка экзотики не требуется.А /etc/passwd можно прочитать от любого юзера.
> А /etc/passwd можно прочитать от любого юзера.И что с ним делать? Паролей там нет.
Список пользователей разве что, но эта инфа не вотпрям критична.
Там есть точное имя юзера (не надо угадывать), их список (можно подбирать пароль сразу для нескольких) и видно у кого есть валидный шелл. Кроме того, в geckos может быть полезная инфа, имя, фамилия, телефоны, ...Не так уж и мало.
Процессы запускаются от имени пользователя nginx или apache.
а зачем запускать из-под рута? достаточно запустить от имени клиента хостинга, который владеет на нём рядом сайтов.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, содержащие центральную часть изображений).
>ls *.jpg | sed -r 's/^(.*)\.jpg$/ca зачем когда есть православный find? ls дуба не даст в директории с мульоном джипежек?
>>ls *.jpg | sed -r 's/^(.*)\.jpg$/c
> a зачем когда есть православный find? ls дуба не даст в директории
> с мульоном джипежек?Даст. 4 гига размер командной строки :)
>>ls *.jpg | sed -r 's/^(.*)\.jpg$/c
> a зачем когда есть православный find? ls дуба не даст в директории
> с мульоном джипежек?Преждевременную замечаю я в тебе оптимизацию не к месту, молодой падаван. Светлая сторона find ничто рядом с мулионом жипижок в 1 директории. Не позволяй тобой Злу овладеть. Грустно видеть, г[o]невом затуманен взор твой. >?<
> которые запускаются при помощи функции system()Так делать - признак дичайшего быдл_окода. Как это могли пропустить, код ревью где?
Справедливости ради желательно учитывать цели и юзкейзы самого проекта. А то с особо продвинутых "веб разработчиков" станется bash или перл с eval прикрутить и потом удивляться "дырам".
а что именно в полиси вписывать?
> а что именно в полиси вписывать?С сайта в шапке 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>
> Кроме того, предлагается реализовать проверку поступающих на обработку изображений на предмет соответствия расширенияТак это... кто вообще по расширению тип файла определяет? Это же кривожопие) libmagic (в php - fileinfo) на что дана?
> ... кто вообще по расширению тип файла определяет?Ты не поверишь...
"сержант, вы не поверите в то, что я сейчас вам скажу" - "не поверю" (грань будущего)
> кто вообще по расширению тип файла определяет?Ведузоеды.
нахрена они вообще что-то через system запускают, ё-моё
Нахрена они вообще что-то запускают?
>обработчиков, которые запускаются при помощи функции system()ССЗБ
ох… уберите уже детей из интернетов. и из разработки вообще.это, если кто не понял, я не про imagemagick, а про дегенератов, которых в детстве не научили использовать вещи по назначению и не тянуть в рот что попало.
> это, если кто не понял, я не про imagemagick, а про дегенератов,
> которых в детстве не научили использовать вещи по назначению и не тянуть в рот что попало.System() интересная функция. Для грепания. В 90% случаев найдется или бэкдор или эксплойтабельная "фича".
а главное никто не заметил - у мейлрушечного Karim Valiev почта на жимейле <valievkarim@...il.com> :)