安全研究
安全漏洞
Winamp S3M模块IN_MOD.DLL远程堆溢出漏洞
发布日期:2007-04-06
更新日期:2007-04-09
受影响系统:
Nullsoft Winamp 5.33描述:
BUGTRAQ ID: 23350
CVE(CAN) ID: CVE-2007-1922
Winamp是一款流行的媒体播放器,支持多种文件格式。
Winamp在试图播放特制的.S3M文件时存在对溢出漏洞。在以下代码段中:
----// SNIP SNIP //-------------------------------------------------
.text:00E9BB54 write_loop: ; CODE XREF: sub_E9B964+239j
.text:00E9BB54 mov edx, [ebp+arg_0]
.text:00E9BB57 mov ecx, [esi+18h]
.text:00E9BB5A mov dx, [eax+edx*2]
.text:00E9BB5E mov [eax+ecx*2], dx
.text:00E9BB62 mov eax, [esi+370h]
.text:00E9BB68 mov ecx, [esi+18h]
.text:00E9BB6B mov cx, [eax+ecx*2]
.text:00E9BB6F cmp cx, [ebx+24h]
.text:00E9BB73 jnb short loc_E9BB93 ; *(0)
.text:00E9BB75 mov al, [esi+18h]
.text:00E9BB78 mov ecx, [ebp+arg_0]
.text:00E9BB7B mov [ecx+ebx+0A8h], al : *(A)
.text:00E9BB82 mov eax, [esi+370h]
.text:00E9BB88 cmp word ptr [eax+ecx*2], 0FEh
.text:00E9BB8E jnb short loc_E9BB93
.text:00E9BB90 inc dword ptr [esi+18h]
.text:00E9BB93
.text:00E9BB93 loc_E9BB93: ; CODE XREF: sub_E9B964+20Fj
.text:00E9BB93 ; sub_E9B964+22Aj
.text:00E9BB93 movzx ecx, word ptr [ebx+20h] ; *(B)
.text:00E9BB97 inc [ebp+arg_0]
.text:00E9BB9A cmp [ebp+arg_0], ecx ; *(C)
.text:00E9BB9D jb short write_loop
----// SNIP SNIP //-------------------------------------------------
其中
EBX = S3M头在内存中的基址
EBX+20h = S3M文件中0x20偏移
EBX+24h = S3M文件中0x24偏移
arg_0 = 计数器(每次循环加一,请见0x00E9BB97)
如果没有取指令*(0)处的跳转的话([eax+ecx*2]的dword值低于[ebx+24]的受控dword值),就会到达0x00E9BB75。al寄存器加载了[esi+18h]的一个字节(每次循环加1,请见0x00E9BB90)。然后在0x00E9BB78,ECX加载了计数器变量(也是每次循环加1)。标记为*(A)的指令将之前加载到AL中的字节储存到了通过EBX=memory_base/ECX = 线性计数器和将立即数地址设置为0xA8常量所计算出的内存位置。
在0x00E9BB93(标记为*(B)),CX等于用户在文件结构中(0x20偏移)控制的两个字节。重置ECX计数器为0,然后在*(C)将arg_0计数器与ECX的值做了比较,如果低于(CF=1)的话循环就会继续。
可见通过更改[ebx+20h]的值就可以更改write_loop的循环数,这可能导致堆溢出。
此外在试图播放.IT文件时也存在类似漏洞:
----// SNIP SNIP //-------------------------------------------------
.text:00E97BCA write_looop: ; CODE XREF: sub_E97976+29Dj
.text:00E97BCA mov edx, [ebp+6Ch+arg_0]
.text:00E97BCD mov ecx, [ebx+18h]
.text:00E97BD0 mov dx, [eax+edx*2]
.text:00E97BD4 mov [eax+ecx*2], dx
.text:00E97BD8 mov eax, [ebx+370h]
.text:00E97BDE mov ecx, [ebx+18h]
.text:00E97BE1 mov cx, [eax+ecx*2]
.text:00E97BE5 cmp cx, [esi+6Eh]
.text:00E97BE9 jnb short loc_E97C09
.text:00E97BEB mov al, [ebx+18h]
.text:00E97BEE mov ecx, [ebp+6Ch+arg_0]
.text:00E97BF1 mov [ecx+esi+148h], al ; BANG
.text:00E97BF8 mov eax, [ebx+370h]
.text:00E97BFE cmp word ptr [eax+ecx*2], 0FEh
.text:00E97C04 jnb short loc_E97C09
.text:00E97C06 inc dword ptr [ebx+18h]
.text:00E97C09
.text:00E97C09 loc_E97C09: ; CODE XREF: sub_E97976+273j
.text:00E97C09 ; sub_E97976+28Ej
.text:00E97C09 movzx ecx, word ptr [esi+68h] ; ecx=controlled value (from offset 0x20)
.text:00E97C0D inc [ebp+6Ch+arg_0]
.text:00E97C10 cmp [ebp+6Ch+arg_0], ecx
.text:00E97C13 jb short write_looop
----// SNIP SNIP //-------------------------------------------------
内存覆盖发生在0x00E97BF1。
<*来源:Piotr Bania (bania.piotr@gmail.com)
链接:http://www.piotrbania.com/all/adv/nullsoft-winamp-s3m_module-in_mod-adv.txt
http://www.piotrbania.com/all/adv/nullsoft-winamp-it_module-in_mod-adv.txt
*>
建议:
厂商补丁:
Nullsoft
--------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.winamp.com/
浏览次数:2862
严重程度:0(网友投票)
绿盟科技给您安全的保障
