【漏洞分析】Foxit Reader BMP biWidth 堆溢出漏洞(CVE-2017-17557)
0x00 前言
总体来说,坑不多,走下来很平坦。毕竟只是简单的整数溢出漏洞,没有太多知识点。
0x01 简介
Foxit Reader 在2018年5月18日的安全公告中提及修复了因恶意调用特定函数,导致程序可能遭受堆缓冲区溢出远程代码执行漏洞攻击的问题(CVE-2017-17557/ZDI-CAN-5472/ZDI-CAN-5895/ZDI-CAN-5473。
受影响版本为Foxit Reader and PhantomPDF 8.3.5版本及更低版本
0x02 漏洞原理
Foxit Reader的 ConvertToPDF_x86.dll模块在转化一个恶意构造的biWidth 属性数值超长的bmp文件时,会导致堆溢出。
0x03 漏洞分析
运行环境:
- windows 7 sp1 64bit
- windbg 6.12 32 bit
- FoxitReader_8.2.1
- 010editor
- IDA 7.0
poc 如下图所示,biWidth属性设置为超大值40 00 00 01h,途中的数值是小字节序。(poc传送门)
使用windbg调试前需要通过windbg安装目录中自带的gflags.exe开启page heap,命令需要在windows命令行中执行。page heap是将进程中使用的堆空间独立开,一旦出现越界操作就会报错。开启page heap的同时,会消耗更多的运行时间。
gflags.exe /p /enable Foxit Reader.exe /full
注意:Foxit Reader.exe为应用程序的名字,不是绝对路径,否则不能开启该程序的page heap。
运行windbg,触发crash
(3250.3480): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files (x86)\Foxit Software\Foxit Reader\Plugins\Creator\x86\ConvertToPDF_x86.dll -
eax=00000004 ebx=00000000 ecx=00000008 edx=15db5ef8 esi=15db9f38 edi=15dc2000
eip=5f5f9d17 esp=1866f904 ebp=1866f920 iopl=0 nv up ei pl nz na po cy
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010203
ConvertToPDF_x86!CreateFXPDFConvertor+0x1f42e7:
5f5f9d17 8807 mov byte ptr [edi],al ds:002b:15dc2000=??
程序崩在了mov byte ptr [edi],al
,一眼看上去感觉是buffer overflow,byte ptr [edi]这段内存被写越界了。为啥不是al呢?al是AX寄存器的低8位数值,寄存器怎么越界啊!只能是edi寄存器指向的内存地址空间。
check这段堆空间的函数调用栈:
0:012> !heap -p -a ediaddress 15dc2000 found in_DPH_HEAP_ROOT @ 157e1000in busy allocation ( DPH_HEAP_BLOCK: UserAddr UserSize - VirtAddr VirtSize)15ce264c: 15dc1ff8 4 - 15dc1000 200065688e89 verifier!AVrfDebugPageHeapAllocate+0x000002297748103e ntdll!RtlDebugAllocateHeap+0x000000307743abe2 ntdll!RtlpAllocateHeap+0x000000c4773e34a1 ntdll!RtlAllocateHeap+0x0000023a5f564b50 ConvertToPDF_x86!CreateFXPDFConvertor+0x0015f1205f6de073 ConvertToPDF_x86!CreateFXPDFConvertor+0x002d86435f6ddead ConvertToPDF_x86!CreateFXPDFConvertor+0x002d847d5f6de124 ConvertToPDF_x86!CreateFXPDFConvertor+0x002d86f4*5f5f9975 ConvertToPDF_x86!CreateFXPDFConvertor+0x001f3f455f5d8598 ConvertToPDF_x86!CreateFXPDFConvertor+0x001d2b68
最近一个堆操作是RtlAllocateHeap函数,没有free,说明不是UAF。
再一个一个排查CreateFXPDFConvertor的函数,找到BMP文件的转换函数,定位地址为5f5f9975,上面已经用*号标记出来了。
经过对bmp图形扫描算法的研究和IDA伪代码的对比,发现biwidth值为两个字节,poc在biwidth* biBitCount 后,乘积大于两个字节,强制转换后被截断,导致malloc出来的空间过小。后面在copy像素点数组时导致写越界,最后崩溃。
0x04漏洞解决方案
福昕阅读器最新版本已经关闭了bmp图片转换的功能,然而只是一种取巧的办法,经过对ConvertToPDF_x86.dll 的新旧对比,发现问题没有真正解决。。只是不会就到这条问题分支路径上了而已,Orz…
0x05 小结
- 之前不知道gflags,heap的调用堆栈怎么也打印不出来,状态一直是BUSY。
- 没有找到好用的补丁对比工具,自己反汇编之后,定位问题函数,再diff的,心累。
- 花了半天时间看bmp扫描行算法,其实没啥大用。
0x06 参考文献
https://blog.0patch.com/2018/05/0patching-foxit-reader-buffer-oops.html
https://srcincite.io/advisories/src-2018-0009/
BMP文件结构详解
【漏洞分析】Foxit Reader BMP biWidth 堆溢出漏洞(CVE-2017-17557)相关推荐
- Netgear R6400v2 堆溢出漏洞分析与利用
2020 年 6 月,ZDI发布了一个关于Netgear R6700型号设备上堆溢出漏洞的安全公告,随后又发布了一篇关于该漏洞的博客,其中对该漏洞进行了详细分析,并给出了完整的漏洞利用代码.该漏洞存在 ...
- CVE-2012-1876 Internet Exporter堆溢出漏洞分析
文章目录 漏洞描述 IE浏览器组件介绍 分析环境 POC 漏洞分析 漏洞利用 参考资料 漏洞描述 该IE浏览器漏洞的成因在mshtml.dll这个模块的CTableLayout::CalculateM ...
- 转载:WPS 2012/2013 RTF fchars 堆溢出漏洞分析
WPS 2012/2013 RTF fchars 堆溢出漏洞分析 On 2013年12月11日, in 安全分析, by code_audit_labs by phperl ,zzf,nine8 of ...
- VMware ESXi OpenSLP堆溢出漏洞,附本次勒索软件ESXiArgs恶意文件分析(CNVD-2021-12321对标CVE-2021-21974)
近日以VMware ESXi服务器为目标的大规模勒索软件攻击正在席卷全球,包括法国.芬兰.加拿大.美国.意大利等多个国家数千台服务器遭到入侵.攻击者利用了2021年2月公开的高危漏洞(CNVD-202 ...
- linux函数 取值溢出,Linux eCryptfs工具parse_tag_3_packet()函数堆溢出漏洞
发布日期:2009-07-28 更新日期:2009-07-29 受影响系统: Linux kernel 2.6.30.3 描述: ----------------------------------- ...
- android 9patch 漏洞,Android 9patch 图片解析堆溢出漏洞分析(CVE-2015-1532)
[前言] 日前谷歌公开了一个今年1月份更新的漏洞.这个漏洞修复了一个存在于Android 5.1版本以下图片渲染的问题,可以查看相关链接. 9patch是Android上特有的一种图片格式,就是在普通 ...
- CVE-2014-6321 schannel堆溢出漏洞分析
cssembly · 2014/12/05 12:09 0x00 背景 MS14-066 (CVE-2014-6321) 是存在于Microsoft的schannel.dll中的TLS堆缓冲区溢出漏洞 ...
- CVE-2012-0003:Microsoft Windows Media Player winmm.dll MIDI 文件堆溢出漏洞调试分析
0x01 蜘蛛漏洞攻击包 前言:2012 年 2月,地下黑产中流行着一款国产名为蜘蛛漏洞的攻击包 -- "Zhi-Zhu Exploit Pack",该工具包含 5 个漏洞,都是在 ...
- struts2 ajax上传文件 file空_WordPress插件漏洞分析:WPDiscuz任意文件上传漏洞
写在前面的话 就在不久之前,Wordfence的威胁情报团队在一款名叫wpDiscuz的Wordpress评论插件中发现了一个高危漏洞,而这款插件目前已有超过80000个网站在使用了.这个漏洞将允许未 ...
最新文章
- python的学习笔记(0)之循环的使用1
- win10 mysql5.5无响应_Win10安装mysql5.5安装最后一步停住卡死未响应的解决方法
- 【西交ACM】298 第N大的数
- Delphi开发单机瘦数据库程序要点
- 一步步编写操作系统 32 linux内核获取内存容量的方法
- nginx配置多个conf文件
- 贪心法田忌赛马问题Java代码,hdoj 1052 Tian Ji - The Horse Racing【田忌赛马】 【贪心】...
- 他初中学历做开发,3年在北京买了房,超过了99%的程序员!
- java 工厂模式详解_Java设计模式之工厂模式详解
- 华为交换机实操系列(资源)
- 使用SDL2中SDL_CreateWindow()函数时报错跳进wincore.cpp(wntdll.pbd not load)
- php 中 map和array,浅析php中array_map和array_walk的使用对比
- qt中将数据库中的数据显示
- activity 工作流_智能风控决策引擎系统可落地实现方案(二)决策流实现
- 数据结构顺序栈基本操作(C/C++实现)
- wordpress iDowns-v1.8.3下载类主题无缝对接erphpdown会员中心+在线充值+VIP开通+卡密插件
- 谷歌浏览器翻译插件 划词翻译
- oracle 倒库详细步骤,新手倒车入库怎么操作 图文并茂详细讲解操作技巧
- 韩咏梅:幸福只需要七分饱(转自新加坡联合早报)
- wx网罗系列之翔实:使用C++开发wxWidgets程序