ImageMagick远程命令执行漏洞分析及防护方案

目前所有版本的Graphicsmagick和ImageMagick都支持打开文件,当文件名的第一个字符为‘|’,则文件名会被传递给shell程序执行,导致(可能远程)代码执行。
文件打开操作位于源代码文件blob.c中的OpenBlob()函数,不同于CVE-2016-3714的是,此漏洞存在于软件处理的核心代码中,影响会更广。
目前此漏洞的编号为CVE-2016-5118。

31

基本概念

什么是ImageMagick?

ImageMagick软件是用C语言编写的,可用来显示、转换以及编辑图形,支持超过200种图像文件格式,并且可以跨平台运行。 ImageMagick软件被许多编程语言所支持,包括Perl,C++,PHP,Python和Ruby等,并被部署在数以百万计的网站、博客、社交媒体平台和流行的内容管理系统(CMS)。

什么是GraphicsMagick?

GraphicsMagick号称图像处理领域的瑞士军刀。 短小精悍的代码却提供了一个鲁棒、高效的工具和库集合,来处理图像的读取、写入和操作,支持超过88种图像格式,包括重要的DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM和TIFF,可以在绝大多数的平台上使用,如Linux、Mac、Windows等。GaphicsMagick不仅支持命令行的模式,同时也支持C、C++、Perl、PHP、Tcl、Ruby等的调用,是从ImageMagick 5.5.2 分支出来的。

影响范围

影响的版本

  • GraphicsMagick < 1.3.24
  • ImageMagick所有版本

不受影响的版本

  • GraphicsMagick = 1.3.24

漏洞分析

这次漏洞还是出现在SVG和MVG的处理上,不过和CVE-2016-3714不同,上次问题出在使用委托的时候,只进行了简单的字符串拼接并执行,没有任何安全过滤。可通过命令注入执行恶意命令。本次漏洞是ImageMagick原生方法支持文件名第一个字符是‘|’的时候将之后的字串当成是命令执行。 下面我们简单看一下漏洞的原理,漏洞出现在blob.c的2500行:

https://github.com/ImageMagick/ImageMagick/blob/master/MagickCore/blob.c#L2500

26

SanitizeString函数代码如下:

27

SanitizeString函数是过滤了不可打印字符,对这个漏洞利用没有影响。 如果文件名的第一个字符是‘|’,就把‘|’之后的字串传入shell被当成是系统命令来执行,没有任何过滤。

28

通过调试信息中可以很清晰的看到把‘|’之后的字串当成是命令来执行了。

漏洞修复

原作者给出的修复方案是在代码中删除这个方法,比较简单粗暴。

29

GraphicsMagick(和ImageMagick差不多)团队已经在最新的代码中修复了这个漏洞,使用的是原作者比较粗暴的方法!

ImageMagick目前没有修复这个漏洞,但是加了一条策略规则,不过注释过了,没有生效。

https://github.com/ImageMagick/ImageMagick/commit/18107aaa0d5f8b46e4740722678f1dffddbe4338

30

只需要把注释取消即可或者在/etc/ImageMagick/policy.xml 中添加如下规则:

 <policy domain="path" rights="none" pattern="|*" />

防护方案

  • GraphicsMagick版本升级到1.3.24(请跟踪后续版本升级,会修复其他安全问题)。 官方下载地址如下:http://www.graphicsmagick.org/
  • ImageMagick用户可以通过配置策略进行防护,全局策略文件通常位于“/etc/ImageMagick/policy.xml”,增加如下内容:
  • 使用绿盟科技防护类产品(WAF/IPS/NF/SG)进行防护。
  • 已经购买了绿盟科技防护类产品服务的客户可以通过产品升级进行防护。

WAF

  • 短期服务:绿盟科技工程师现场处理。确保第一时间消除网络内相关风险点,控制事件影响范围,提供事件分析报告。
  • 中期服务:提供 3-6个月的风险监控与巡检服务。根除风险,确保事件不复发。
  • 长期服务:基金行业业务风险解决方案(威胁情报+攻击溯源+专业安全服务)

声 明

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

关于绿盟科技

北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。

基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。

北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。

如果您需要了解更多内容,可以
加入QQ群:486207500、570982169
直接询问:010-68438880-8669

Spread the word. Share this post!

Meet The Author

Leave Comment