ImageMagick是一个免费开源的图像处理软件,用于创建、编辑、合成图片,可运行于大多数的操作系统,支持PHP、Ruby、NodeJS和Python等多种语言,使用非常广泛。
然而俄罗斯的安全研究员Andrew Leonov却在其上发现了一个漏洞,编号为CVE-2016-3714。ImageMagick处理的图片中可携带攻击代码,远程攻击者可利用它执行任意代码,甚至是控制服务器。2016年5月,该漏洞被公之于众,然而厄运由此开始,大量恶意攻击者利用它进行远程访问操作。
Andrew Leonov在一篇文章中描述了此次攻击并且提供POC。由于漏洞的危害程度极高,Facebook已经授予他4万美元奖金,这是至今为止Facebook给出的单个最高漏洞奖励。
Leonov透露发现漏洞的过程:十月份的某个星期六,当他正对一些大的服务进行测试(不是Facebook),一些重定向让他注意到了Facebook。这是一个分享到<Share on Facebook>的对话框
链接如下:
https://www.facebook.com/dialog/feed?app_id=APP_ID&link=link.example.tld&picture=http%3A%2F%2Fattacker.tld%2Fexploit.png&name=news_name&caption=news_caption&description=news_descriotion&redirect_uri=http%3A%2F%2Fwww.facebook.com&ext=1476569763&hash=Aebid3vZFdh4UF1H
Leonov解释:如果我们认真看,可以发现‘picture'参数其实是一个URL,然而页面内容上并没有如上文中提到的图像URL。服务将他重新定向到Facebook平台后他确定了漏洞的存在。
首先我想到了某种SSRF问题,但测试表明URL中的参数请求来自于 31.13.97.* network ,通过 facebookexternalhit/1.1参数。
在测试应用程序后,他又测试了ImageTragick 。
工作流程
1.获取‘picture'参数并发起请求——此请求是正确的,不易受攻击
2.通过转换器接受图片,其使用易受攻击的ImageMagick 库
Lenovo提交漏洞三天之后,Facebook 已经修复了此漏洞并表示在漏洞得到修复之前没有任何迹象表明有漏洞被攻击者利用。