Microsoft Windows图形渲染引擎WMF格式解码内存越界漏洞

本文详细介绍了Microsoft Windows图形渲染引擎在处理WMF格式文件时存在的内存越界漏洞,影响多个Windows系统版本。攻击者可通过恶意WMF文件导致拒绝服务攻击。文章分析了漏洞的技术细节,包括两个触发内存越界的代码片段,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

漏洞名称:Microsoft Windows图形渲染引擎WMF格式解码内存越界漏洞
发现者:cocoruder(frankruder_at_hotmail.com) http://ruder.cdut.net
类型:设计错误
最后更新时间:07/01/2006
受威胁的系统:
    Microsoft Windows XP SP2
    Microsoft Windows XP SP1
    Microsoft Windows Server 2003 SP1
    Microsoft Windows Server 2003
    Microsoft Windows ME
    Microsoft Windows 98se
    Microsoft Windows 98
    Microsoft Windows 2000SP4
未受威胁的系统:
    目前未知
厂商:
     www.microsoft.com

漏洞描述:
    Microsoft Windows的WMF图形渲染引擎处理特殊格式的wmf文件时缺乏参数检查,存在多个内存越界漏洞,如果用户访问了恶意的WMF格式文件将导致拒绝服务攻击。
    注意此文章中涉及的问题与ms06-001以及ms05-053中描述的无关。事实上,这是我在测试ms06-001时偶然发现的。

技术细节:
当前发现至少有2个地方可以触发内存越界错误。

1.ExtCreateRegion调用导致内存越界。
函数原型:
HRGN ExtCreateRegion(
  CONST XFORM *lpXform,     // transformation data
  DWORD nCount,             // size of region data
  CONST RGNDATA *lpRgnData  // region data buffer
);

PlayMetaFileRecord函数在调用此函数前会组织RGNDATA *lpRgnData参数,涉及下面几个结构
WMFRECORD结构:
typedef struct _StandardMetaRecord
{
    DWORD Size;          /* Total size of the record in WORDs */
    WORD  Function;      /* Function number (defined in WINDOWS.H) */
    WORD  Parameters[];  /* Parameter values passed to function */
} WMFRECORD;

ExtCreateRegion调用对应的Parameters结构:
typedef    struct     _Parameters
{
    char    unknow1[0x0a];
    WORD    All_PointtStruct_Num;    //后面PointtStruct块的总数
    char    unknow2[0x0a];
    char    PointtStruct[];        //首块
}Parameters;

一个PointtStruct块的结构:
typedef    struct     _PointtStruct
{
    WORD    PointNum;        //后面的RECT结构成员的数目(1个成员2字节)
    WORD    Point[PointNum];    //4个Point构成1个RECT
    char    unkonow[6];
}PointtStruct;

因此每个PointtStruct块的总字节数=PointNum*2+8
ExtCreateRegion调用码为0xff,下面的代码完成计算并分配堆内存操作。

.text:7F00FE07 loc_7F00FE07:                           ; CODE XREF: PlayMetaFileRecord+1256j
.text:7F00FE07                 sub     eax, 3
.text:7F00FE0A                 jnz     loc_7F022B9A    ; 0xff
.text:7F00FE10                 movzx   ecx, word ptr [ebx+10h]        ;取得PointtStruct块总数
.text:7F00FE14                 mov     [ebp-88h], ecx        &nbs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值