漏洞信息
发布日期: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 信息如下

1

出错函数如下

2

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

3

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

4

漏洞分析

在 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

5

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

6

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

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

7

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

8

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

9

[感谢h4ckmp投递]

源链接

Hacking more

...