启明星辰ADLab:CVE-2016-3714 ImageMagick RCE漏洞分析报告

 

ImageMagick存在一个远程命令执行漏洞,当用户访问并处理精心构造的恶意图片时,可能导致远程命令执行,影响范围广泛。启明星辰ADLab针对此漏洞连续推出了安全通告,漏洞检测工具并形成了详细的技术分析报告。...



一、

 漏洞描述

ImageMagick是一款流行的图像处理软件,支持多种编程语言,包括Perl、C++、PHP、Python和Ruby等。ImageMagick存在一个远程命令执行漏洞(CVE-2016-3714、CNNVD-201605-101),当用户访问并处理精心构造的恶意图片时,可能导致远程命令执行。该漏洞可影响网站、博客、社交媒体平台和内容管理系统(CMS) ,例如WordPress和Drupal。‍

二、

 漏洞成因

//注:以下分析均基于未补丁版本ImageMagick-6.9.1-10ImageMagick采用了一种delegate机制,通过system()函数执行delegates.xml配置文件中的命令。

其中,处理https请求的delegates命令为:
curl -s -k -L -o "%o" "https:%M"
%M为请求的URL链接。由于程序在处理%M参数时,未对URL进行充分过滤,可能导致了shell命令执行。例如构造如下URL:
'https://example.com"|ls "-la'
即可导致shell命令"ls -la"被执行:






shell命令的执行过程如下:


(1)首先,程序调用ReadImages函数,该函数调用ReadImage函数读取图片信息。

//convert.c
//convert.c



(2)ReadImage读取图片文件中的关键字read_info->magick("HTTPS"),然后调用InvokeDelegate函数。

//delegate.c



(3)首先,InvokeDelegate调用GetDelegateInfo函数,根据delegates.xml配置信息以及关键字"HTTPS",获取delegate命令参数。其函数输入参数"decode"为关键字"HTTPS",函数返回值为一个DelegateInfo结构体指针delegate_info,其成员变量delegate_info->commands字符串为:
"curl" -s -k -L -o "%o" "https:%M"。

//delegate.c





然后,InvokeDelegate调用InterpretImageProperties函数,根据delegate命令参数和图片信息,解析出完整的delegate命令:
"curl" -s -k -L -o "/tmp/magick-21222Wea8X4GUwXdE" "https://example.com"|ls "-la"

‍最后,根据解析出的delegate命令,调用ExternalDelegateCommand函数执行命令。


(4) ExternalDelegateCommand调用system函数,执行命令。



由于ImageMagick支持处理svg、mvg等多种格式图片文件,当用户使用ImageMagick访问并处理如下mvg文件,同样会执行mvg中包含的shell命令。

//exploit.MVG‍

push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|ls "-la)'
pop graphic-context



三、

 补丁分析

//以下分析均基于补丁版本ImageMagick-7.0.1-1

在安装了升级版本后,delegates.xml文件中添加了%F格式,并将HTTPS关键字的delegate命令参数%M修改为%F。


此时,调用GetDelegateInfo函数得到的delegate_info->commands为:
"curl" -s -k -L -o "%o" "https:%F"

‍调用InterpretImageProperties函数解析出的delegate命令为:
"curl" -s -k -L -o "/tmp/magick-15126nyqdnCOApyE7" "https://example.com_|ls__-la"

可以看出,程序在处理图片中的shell命令时,成功过滤shell命令,从而避免了命令执行。‍

四、

 修复措施

方案一:在“/etc/ImageMagick/policy.xml” 文件中添加如下代码,暂时禁用部分ImageMagick编码器。‍





方案二升级至最新版本ImageMagick-7.0.1。‍

五、

 漏洞检测

启明星辰ADLab基于目前已知的漏洞利用特征进行匹配,推出了相应的检测工具,检测工具的下载链接为:http://pan.baidu.com/s/1nvcoCYX ,密码:a6c7,后续将持续更新。

其他相关检测工具可参见:https://github.com/ImageTragick/PoCs。‍



    关注 ADLab


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册