Adobe Flash Player远程代码执行漏洞分析(CVE-2012-1535)

漏洞信息
发布日期:2012-08-14
更新日期:2012-08-16
受影响系统: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 内容执行任意代码或造成拒绝服务。
<*来源:Alexander Gavrun
链接:
http://secunia.com/advisories/50285/
http://secunia.com/advisories/50286/

*>

漏洞介绍

使用 IE 调用 SWF,IE Crash 信息如下

Adobe Flash Player远程代码执行漏洞分析(CVE-2012-1535)

出错函数如下

Adobe Flash Player远程代码执行漏洞分析(CVE-2012-1535)

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

Adobe Flash Player远程代码执行漏洞分析(CVE-2012-1535)

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

Adobe Flash Player远程代码执行漏洞分析(CVE-2012-1535)

漏洞分析

在 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

Adobe Flash Player远程代码执行漏洞分析(CVE-2012-1535)

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

Adobe Flash Player远程代码执行漏洞分析(CVE-2012-1535)

然后分配 Size = nTable * 0×10  的内存,用于存放 subtables,但由于 nTables 被恶意修改,致使

 nTable * 0×10 产生整型溢出,分配了错误 Size 的内存

Adobe Flash Player远程代码执行漏洞分析(CVE-2012-1535)

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

Adobe Flash Player远程代码执行漏洞分析(CVE-2012-1535)

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

Adobe Flash Player远程代码执行漏洞分析(CVE-2012-1535)

[感谢h4ckmp投递]