ღ Miranda

CVE-2016-3714漏洞分析

ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩、切割、水印、格式转换等等。但近来有研究者发现,当用户传入一个包含特殊内容的图片的时候,就有可能触发命令注入漏洞。

原理分析

一种利用

与这个漏洞相关的CVE有CVE-2016-3714、CVE-2016-3715、CVE-2016-3716、CVE-2016-3717,其中最严重的就是CVE-2016-3714,利用这个漏洞可以造成远程命令执行的危害。

ImageMagick有一个功能叫做delegate(委托),作用是调用外部的lib来处理文件。而调用外部lib的过程是使用系统的system命令来执行的。我们在ImageMagick的默认配置文件里可以看到所有的委托:/etc/ImageMagick/delegates.xml

漏洞报告中给出的POC是利用了如下的这个委托:

它在解析https图片的时候,使用了curl命令将其下载,我们看到%M被直接放在curl的最后一个参数内。ImageMagick默认支持一种图片格式,叫mvg,而mvg与svg格式类似,其中是以文本形式写入矢量图的内容,而这其中就可以包含https处理过程。

所以我们可以构造一个.mvg格式的图片(但文件名可以不为.mvg,比如下图中包含payload的文件的文件名为vul.gif,而ImageMagick会根据其内容识别为mvg图片),并在https://后面闭合双引号,写入自己要执行的命令:

这样,ImageMagick在正常执行图片转换、处理的时候就会触发漏洞:

img

另一种利用

另外,经过分析,研究人员发现除了.mvg格式的图片以外,普通png格式的图片也能触发命令执行漏洞。我们看到前面委托中对%l,也就是exif label的处理:

它将%l拼接进入了/usr/bin/display命令中,所以我只需将正常的png图片,带上一个『恶意』的exif信息。在调用ImageMagick将其处理成.show文件的时候,即可触发命令注入漏洞:

同样也能执行id命令,但这个方法鸡肋之处在于,因为delegate.xml中配置的encode=”show”(或”win”),所以只有输出为.show或.win格式的情况下才会调用这个委托,而普通的文件处理是不会触发这个命令的。

影响分析

ImageMagick是一个使用非常广的组件,大量厂商都在处理图片的时候调用这个程序进行处理,而且很多开源应用也在核心代码中包含了ImageMagick选项。

WordPress是著名的个人博客/CMS厂商,其核心源码中使用了PHP扩展ImageMagick。同样的,Discuz、Drupal等常用CMS中也调用了ImageMagick扩展或ImageMagick库,CVE-2016-3714也可能会影响到他们。

我在阿里云装有WordPress的服务器就有如下漏洞预警:

时间 漏洞路径 漏洞名称
2016-07-28 07:20:41 /var/www/html/wordpress/wp-includes/media.php WP_Image_Editor_Imagick 指令注入漏洞

可经百度后发现WP_Image_Editor_Imagick并非主机或程序自带的一个漏洞,而是如果你的服务器环境中安装了ImageMagick组件且没有补丁的情况下才会被利用。也就是不安装ImageMagick就没有这个漏洞,算是误报吧。


如果安装了ImageMagick可以用如下方法修复:

  1. yum install ImageMagick -y升级组件
  2. 修改代码,为了防止WP_Image_Editor_Imagick扩展的指令注入风险,将wordpress的默认图片处理库优先顺序改为GD优先。

POC及利用方法

直接上传图片,然后在远程服务器监听相应的端口,反弹连接即可,下面是在网上找的POC:

这是监听的脚本传到你网站的根目录,比如http://www.baidu.com/x.py,POC:

修改IP及监听端口即可。

攻击端用nc监听12315端口:

受攻击端对图片处理:

即可反弹shell,实现如下:


漏洞更多信息可以访问ImageTragick

发表评论

电子邮件地址不会被公开。