ImageMagick堆栈溢出0day漏洞

作者:星期三, 二月 28, 20180
分享:

【0x00 背景】

2018年02月07日,中新网安安全研究院发现ImageMagick堆栈溢出0day漏洞(CVE-2018-6876)。中新网安安全研究院一直与ImageMagick保持积极沟通,积极推进该0day漏洞的修复,并择时披露漏洞相关信息。

ImageMagick是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布,它遵守GPL许可协议,可以运行于大多数的操作系统,ImageMagick的大多数功能的使用都来源于命令行工具。

PHP imagick、Ruby rmagick和paperclip以及NodeJS imagemagick等多个图片处理插件都依赖ImageMagick运行,当攻击者构造poc图片上传可导致使用ImageMagick组件的网站宕机。

ImageMagick是一个使用非常广的组件,包括腾讯、网易、赶集等各大互联网公司等大量厂商都在处理图片的时候调用这个程序进行处理,而且很多开源应用也在核心代码中包含了ImageMagick选项。采用了ImageMagick组件,且允许用户上传图像的网站,以及例如Wordpress、Drupal、Discuz等开源程序,都会受到DOS威胁。

【0x01 漏洞描述】

漏洞函数在ImageMagick 的附加库 libfpx fpx/f_fpxvw.cpp:1199 调用

漏洞在ole/oleprop.cpp:260行的重载函数,读取指针错误导致溢出,如下图,CY的大小是32个字节,FILETIME是16个字节,在给val赋值的时候多引用了16个字节导致异常,造成组件崩溃。

ASAN OUTPUT

root@v22017125319057172:/opt/lib_fuzz/test# convert not_kitty.bmp not_kitty.FPX===================================================================4302==ERROR: AddressSanitizer: stack-buffer-underflow on address 0xbfab3a78 at pc 0xaff403b8 bp 0xbfab39f8 sp 0xbfab39e8READ of size 16 at 0xbfab3a78 thread T0

#0 0xaff403b7 in OLEProperty::operator=(tagFILETIME const&) /opt/lib/libfpx-1.3.1-10/ole/oleprop.cpp:260

#1 0xafdece4b in PFileFlashPixView::InitSummaryInfoPropertySet() /opt/lib/libfpx-1.3.1-10/fpx/f_fpxvw.cpp:1199

#2 0xafdef6f9 in PFileFlashPixView::Init() /opt/lib/libfpx-1.3.1-10/fpx/f_fpxvw.cpp:237

#3 0xafdf3187 in PFileFlashPixView::PFileFlashPixView(FicNom&, char const*, mode_Ouverture, unsigned int) /opt/lib/libfpx-1.3.1-10/fpx/f_fpxvw.cpp:121

#4 0xafe27419 in PFlashPixImageView::PFlashPixImageView(FicNom&, int, int, float, FPXBaselineColorSpace, unsigned long, FPXCompressionOption, unsigned char, unsigned char) /opt/lib/libfpx-1.3.1-10/fpx/fpximgvw.cpp:282

#5 0xafe3df6c in CreateImageByFilename(FicNom&, unsigned int, unsigned int, unsigned int, unsigned int, FPXColorspace, FPXBackground, FPXCompressionOption, PFlashPixImageView**) /opt/lib/libfpx-1.3.1-10/fpx/fpxlibio.cpp:1411

#6 0xafe3e664 in FPX_CreateImageByFilename /opt/lib/libfpx-1.3.1-10/fpx/fpxlibio.cpp:1461

#7 0xb3c6ba79 in WriteFPXImage coders/fpx.c:865

#8 0xb63cd04f in WriteImage MagickCore/constitute.c:1117

#9 0xb63cec1f in WriteImages MagickCore/constitute.c:1336

#10 0xb5b97e4a in ConvertImageCommand MagickWand/convert.c:3280

#11 0xb5db7a35 in MagickCommandGenesis MagickWand/mogrify.c:183

#12 0x8049abe in MagickMain utilities/magick.c:149

#13 0x804907a in main utilities/magick.c:180    #14 0xb58bf636 in __libc_start_main (/lib/i386-linux-gnu/libc.so.6+0x18636)#15 0x80490fb  (/usr/bin/magick+0x80490fb)

【0x02 漏洞影响 】

ImageMagick 7.0.7-22 (最新版)

【0x03 修复建议】

由于目前官方还没有更新补丁,可重新编译暂时禁用libfpx库

【0x04漏洞poc】

https://github.com/ImageMagick/ImageMagick/issues/973

【0x05 时间线】

2018年02月07日  提交漏洞

2018年02月09日  ImageMagick 官方确认漏洞

2018年02月10日  CVE确认编号:CVE-2018-6876

2018年02月25日  中新网安发布漏洞预警

【0x06 参考链接】

1.http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6876

2.https://github.com/ImageMagick/ImageMagick/issues/973

 

 

分享:

相关文章

写一条评论

 

 

0条评论