Adobe Flash Player远程代码执行漏洞分析(CVE-2012-1535)
written by h4ckmp
http://www.BinVul.Com
http://t.qq.com/h4ckmp
欢迎讨论各种漏洞问题.
漏洞信息
发布
更新
受影响系统:
Adobe Flash Player 11.x
描述:
BUGTRAQ ID: 55009
CVE ID: CVE-2012-1535
Adobe Flash Player是一个集成的多媒体播放器。
Windows和Mac OS X平台上Adobe Flash Player 11.3.300.271之前版本,Linux平台上11.2.202.238之前版本,在实现上存在不明细节漏洞,可允许远程攻击者通过SWF内容执行任意代码或造成拒绝服务。
<*
http://secunia.com/advisories/50285/
http://secunia.com/advisories/50286/
*>
建议:
厂商补丁:Adobe
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页
http://www.adobe.com/support/security/
漏洞介绍
使用IE调用SWF,IE Crash信息如下

出错函数如下

查看SWF文件格式,文件包含DefineFont4 Tag,DefineFont4是在SWF10中添加的。DefineFont4仅支持新的Flash文本引擎,嵌入的字体数据是以CFF格式存储的。

本次漏洞产生原因为整型溢出, 恶意数据存在于FontData数据偏移0x8344中, 位于kern Table中。文件中出现的0x1000为version,0x10000000为nTables(subtables数量),正因为错误的nTables值导致了异常的产生

漏洞分析
在TTF文件格式中有许多Table,其中有一处为'kern' Table,Adobe Flash Player在处理'kern' Table存在问题,也是本次漏洞的产生原因。程序中有牵扯到几个重要结构,在这里简单介绍其格式
'kern' Table
struct kernTableInfo (sizeof=0x10)
{
+0 objBufAlloctor // 内存池对象
+4 kernStreamObj // kernStream对象
+8 nTables // kernTable中subtables数量
+C ptrSubtables // 存储subtables的buffer
}
subtable
struct subtableInfo (sizeof=0x10)
{
+0 bKernFormatMask
+4 start_offset // 当前table起始偏移
+8 data_offset // table中数据起始偏移
+C field_C
}
进入kernTableHandler()函数内部,程序会读取'kern' Table中的nTables,并根据nTables申请内存,用于存放subtables

首先分配一块0x10的内存,存放kernTable信息

然后分配Size = nTable * 0x10 的内存,用于存放subtables,但由于nTables被恶意修改,致使nTable * 0x10产生整型溢出,分配了错误Size的内存

接下来程序会循环填充ptrSubtables,简单还原kernTableHandler函数代码

循环次数为nTables = 0x10000000,这个过程中会覆盖关键数据。在循环至第0x4F8次时,恰好覆盖至kernTableInfo.nTables,导致循环退出,之后进入vul_func()触发漏洞.
