近日,图像处理库ImageMagick曝出Yahoobleed漏洞,雅虎邮箱个人邮件图片附件与身份凭证等面临泄露风险。漏洞曝出后,雅虎弃用了这个图像处理库。
ImageMagickImageMagick是一个广泛使用的开源图像处理库,自90年代就投入使用,可以让用户自主调整图像大小,缩放、裁剪,以及给图像加水印等。ImageMagick支持PHP,Python,Ruby,Perl,C ++等多种编程语言,可融入到各种项目、操作系统和应用之中,也包括雅虎、Facebook等大型网站。
这些年ImageMagick不断曝出漏洞。 2014年5月,安全研究人员发现ImageMagick允许“恶意构造图像强制Web服务器执行攻击代码”。2016年,又曝出了名为ImageTragick的0-day漏洞。利用这个漏洞,黑客可以往Web服务器上传恶意构造的图像,进而执行恶意代码。ImageMagick拥有很多“社交媒体和博客站点”用户,因此,其漏洞造成的影响也十分广泛。2016年10月,Facebook因为ImageMagick漏洞支付了40,000美元的奖金。
Yahoobleed上周,安全研究员Chris Evans又发现了ImageMagick的一个漏洞,仅需发送18个字节的利用代码,就能令雅虎服务器泄露邮箱用户的图片。Evans因此获得了Yahoo高达14,000美元的奖励,也就是每个字节奖励778美元。
Evans将这个漏洞命名为“Yahoobleed#1”(YB1,雅虎出血?),YB1会导致存储在服务器内存中的图片泄露。
该漏洞实际上存在于RLE(Utah Raster Toolkit Run Length Encoded)图像格式中。攻击者只需创建一个恶意的RLE图像,并将其发送到受害者的电子邮箱,然后创建空RLE协议命令循环,就能造成信息泄露。
Evans演示了该漏洞PoC,即利用该漏洞攻击雅虎电子邮件帐户。他创建了一个包含18字节漏洞利用代码的恶意图像,并将其作为电子邮件附件发送给自己。一旦附件送达雅虎的电子邮件服务器,ImageMagick就对图像进行处理,以生成缩略图和预览,但是由于执行了Evans的漏洞利用代码,Imagemagick生成的图像附件预览是损坏的。点击图像附件后,会启动图像预览窗格,展示仍储存在服务器内存中的部分图像信息,但不显示原始图像。
与越界读取的Heartbleed与Cloudbleed漏洞不同,Yahoobleed漏洞利用的是未初始化或以前释放过的内存内容。
Evans说:“以前的*bleed漏洞通常是越界读取,但是Yahoobleed却利用了未初始化的图像内容。未初始化的图像解码buffer是客户端呈现图像的基础。这就泄漏了服务器端的内存信息。与越界读取相比,利用未初始化内容获取信息更加隐蔽,因为它不会造成服务器崩溃。不过这种方式能够获取的信息也仅限于已释放的堆。”
此外,Evans还发现了Yahoobleed#2(YB2)漏洞。这个漏洞出现的原因是雅虎未能及时安装ImageMagick在2015年1月发布的关键补丁。YB1和YB2二者结合使用,可以让攻击者直接获得Yahoo Mail用户的浏览器Cookie,身份验证token和个人图片等信息。
Yahoobleed的修复也很简单,通过如下过程就能实现:
(void)ResetMagickMemory(pixels,0,pixel_info_length); 雅虎弃用ImageMagick在Evans向雅虎提交了18字节的PoC之后,雅虎认为ImageMagick的bug太多,修复很麻烦,因此决定不再进行修复,而是直接弃用。
向雅虎报告这个问题后,Evans又向ImageMagick团队报告了漏洞。事实上,两个月前,ImageMagick已经发布了ImageMagick 7.0.5-1版本,针对YB1和YB2漏洞进行修复。由于Yahoo Mail并未及时更新,才被Evans检测出漏洞。
现在,Linux和其他下游用户已经可以下载ImageMagick的新版本更新修复了。去年,与ImageMagick相关但独立的GraphicsMagick也已经修补了相同的bug。要注意的是,使用ImageMagick图片库的其他大型Web服务可商仍可能受漏洞影响,建议尽快进行修复,更新到最新版本。
相关阅读:
Linux下PHP支持ImageMagick和MagicWandForPHP
Linux系统上编译好的ImageMagick迁移到另一台机器