SSD安全公告–GraphicsMagick多个漏洞

Credit to Author: SSD / Maor Schwartz| Date: Tue, 21 Nov 2017 08:58:38 +0000

Want to get paid for a vulnerability similar to this one?
Contact us at: sxsxdx@xbxexyxoxnxdxsxexcxuxrxixtxy.xcom
See our full scope at: https://blogs.securiteam.com/index.php/product_scope

漏洞概要

以下安全公告描述了在GraphicsMagick中发现的两个漏洞。

GraphicsMagick是“图像处理方面的瑞士军刀。 基础包中的源码共有267K行(根据David A. Wheeler统计),它提供了强大而有效的工具和库,支持读,写超过88种主要图像处理格式,包括DPX,GIF,JPEG,JPEG-2000,PNG,PDF,PNM和TIFF等重要格式。

在GraphicsMagick中发现的两个漏洞是:

  • 内存信息泄露
  • 堆溢出

漏洞提交者
一位独立的安全研究人员Jeremy Heng(@nn_amon)和Terry Chia(Ayrx)向 Beyond Security 的 SSD 报告了该漏洞

厂商响应

厂商已经发布了这些漏洞的补丁(15237:e4e1c2a581d8 and 15238:7292230dd18)。获取更多信息: ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/snapshots/ChangeLog.txt

漏洞详细信息

内存信息泄露

GraphicsMagick易受到magick/describe.c文件的DescribeImage函数中存在内存信息泄露漏洞影响。

负责打印包含的IPTC配置文件信息的图像中的这一部分代码存在漏洞。

该漏洞可以通过特制的MIFF文件触发。

存在漏洞的代码路径如下:

profile_length变量中的值在MIFF头中的profile-iptc = 8字段设置

当访问profile [i]时,因为不检查i的值,所以会出现越界访问。

如果断在describe.c第738行,在执行strncpy操作的时候我们可以获取到堆中的内容。

0x08000a001c414141是我们植入MIFF文件中的payload。

检查与payload相邻的值0x00007ffff690fba8,发现它其实是libc中main_arena结构中的一个地址。

现在我们可以计算到libc base的偏移量 – 0x3c4b98

漏洞证明

$ python miff/readexploit.py
[+] Starting local process ‘/usr/bin/gm’: pid 20019
[+] Receiving all data: Done (1.27KB)
[*] Process ‘/usr/bin/gm’ stopped with exit code 0 (pid 20019)
[*] Main Arena Leak: 0x7f72948adb98
[*] libc Base: 0x7f72944e9000

堆溢出
GraphicsMagick容易受到magick/describe.c文件的DescribeImage()函数中发现的堆溢出漏洞的影响。

下面代码中855行的strncpy的调用,没有限制要复制到目的缓冲区,而是通过在目录名称中搜索换行符或空字节来计算大小。

由于ImageInfo结构中的filename字段是固定的2053字节,因此可以通过伪造超长的目录名,造成堆溢出。

触发此漏洞的一种方法是在带有verbose标志的MIFF格式文件上运行identify命令。

漏洞证明

使用下面的脚本就可以生成MIFF文件exploit.miff。

使用GDB带参数identify -verbose运行GraphicsMagick gm,当strncpy调用过后,中断程序的运行,然后检查被破坏的ImageInfo对象,以证明堆溢出利用成功。

Print Friendly, PDF & Email

https://blogs.securiteam.com/index.php/feed