漏洞信息
发布日期: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 信息如下
出错函数如下
查看 SWF 文件格式,文件包含 DefineFont4 Tag,DefineFont4 是在 SWF10 中添加的。DefineFont4 仅支持新
的 Flash 文本引擎,嵌入的字体数据是以 CFF 格式存储的。
本次漏洞产生原因为整型溢出, 恶意数据存在于 FontData 数据偏移 0×8344 中, 位于 kernTable 中。文件中出现的 0×1000 为 version,0×10000000 为 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
首先分配一块 0×10 的内存,存放 kernTable 信息
然后分配 Size = nTable * 0×10 的内存,用于存放 subtables,但由于 nTables 被恶意修改,致使
nTable * 0×10 产生整型溢出,分配了错误 Size 的内存
接下来程序会循环填充 ptrSubtables,简单还原 kernTableHandler 函数代码
循环次数为 nTables = 0×10000000,这个过程中会覆盖关键数据。在循环至第 0x4F8 次时,恰好覆盖至 kernTableInfo.nTables,导致循环退出,之后进入 vul_func()触发漏洞
[感谢h4ckmp投递]