Microsoft MPEG Layer-3音频解码除零拒绝服务漏洞

漏洞起因
异常条件处理失败错误
危险等级

 
影响系统
Microsoft Windows XP Professional SP3
Microsoft Windows XP Professional SP2
Microsoft Windows XP Home SP3
Microsoft Windows XP Home SP2
 
不受影响系统
 
危害
远程攻击者可以利用漏洞使应用程序崩溃。
 
攻击所需条件
攻击者必须构建恶意音频文件,诱使用户解析。
 
漏洞信息
Microsoft Windows是一款流行的操作系统。
Microsoft MPEG负责解析3层MPEG音频流的代码处理AVI文件存在漏洞。在l3codeca.acm DriverProc (sub_3D522940)函数负责选择用于解析各种AVI文件的ture函数,此函数接收5个参数,由于第三个参数是函数,它会调用用于编码AVI的true函数,如果第三个函数为0x604E,就会调用sub_3D522940:
.text:3D522C60                 mov     eax, [esp+uMsg]
.text:3D522C64                 cmp     eax, 600Ah
.text:3D522C69                 ja      loc_3D522CF0
.text:3D522C6F                 jz      short loc_3D522CDE
.text:3D522C71                 lea     ecx, [eax-1]    ; switch 10 cases
.text:3D522C74                 cmp     ecx, 9
.text:3D522C77                 ja      loc_3D522DA8    ; default
.text:3D522C77                                         ; jumptable 3D522C7D cases 2,5
.text:3D522C77                                         ; jumptable 3D522D07 cases 1-13,17-64
.text:3D522C7D                 jmp     ds:off_3D522DD8[ecx*4] ; switch jump
.text:3D522C84
.text:3D522C84 loc_3D522C84:                           ; DATA XREF: .text:off_3D522DD8o
.text:3D522C84                 mov     eax, 1          ; jumptable 3D522C7D cases 1,6
.text:3D522C89                 retn    14h
.text:3D522C8C ; —————————————————————————
.text:3D522C8C
.text:3D522C8C loc_3D522C8C:                           ; CODE XREF: DriverProc+1Dj
.text:3D522C8C                                         ; DATA XREF: .text:off_3D522DD8o
.text:3D522C8C                 mov     eax, [esp+lParam2] ; jumptable 3D522C7D case 3
.text:3D522C90                 mov     ecx, [esp+hDriver]
.text:3D522C94                 push    eax             ; int
.text:3D522C95                 push    ecx             ; hDriver
.text:3D522C96                 call    sub_3D521D00
.text:3D522C9B                 retn    14h
.text:3D522C9E ; —————————————————————————

.text:3D522D84
.text:3D522D84 loc_3D522D84:                           ; CODE XREF: DriverProc+A7j
.text:3D522D84                                         ; DATA XREF: .text:off_3D522E00o
.text:3D522D84                 mov     edx, [esp+lParam2] ; jumptable 3D522D07 case 67
.text:3D522D88                 mov     eax, [esp+hWndParent]
.text:3D522D8C                 push    edx
.text:3D522D8D                 push    eax
.text:3D522D8E                 call    sub_3D522940
.text:3D522D93                 retn    14h
sub_3D522940负责解析MPEGLAYER3WAVEFORMAT (在AVI中为strf),如果WAVEFORMATEX结构中的wFormatTag值(MPEGLAYER3WAVEFORMAT结构的子集)等于0x0055,表示音频流为MP3类型:
.text:3D522A9F                 mov     [ebp+0Ch], ecx
.text:3D522AA2                 cmp     word ptr [edi], 55h
.text:3D522AA6                 jnz     loc_3D522B2C
如果流类型为MP3,就会为WAVEFORMATEX结构字段进行一些计算,先读取nSamplesPerSec的值,然后由于此字段值为变量会给定1152(0×480)或576 (0×240):
10 .text:3D522AAC                 mov     ecx, [edi+4]       ; nSamplesPerSec
.text:3D522AAF                 xor     edx, edx
.text:3D522AB1                 mov     eax, ecx
.text:3D522AB3                 div     dword ptr [esi+4]
.text:3D522AB6                 mov     edx, 5DC0h
.text:3D522ABB                 cmp     edx, ecx
.text:3D522ABD                 sbb     ebx, ebx
.text:3D522ABF                 xor     edx, edx
.text:3D522AC1                 and     ebx, 240h
.text:3D522AC7                 add     ebx, 240h
在把WAVEFORMATEX结构的nAvgBytesPerSec位与0×480或0×240相乘后,nSamplesPerSec字段的值会与得出的结果相除。
.text:3D522AD1            mov     eax, [edi+8]    ; nAvgBytesPerSec
.text:3D522AD4                 imul    eax, ebx
.text:3D522AD7                 div     ecx
问题就在这里,因为没有对这些字段进行控制。进一步反汇编可以看到WAVEFORMATEX结构的nBlockAlign值会除以之前除后的结果,如果之前相除值为0,那么就会触发除零错误:
.text:3D522AD9                 mov     edi, [ebp+8]    ;  nBlockAlign
.text:3D522ADC                 xor     edx, edx
.text:3D522ADE                 mov     ecx, eax
.text:3D522AE0                 mov     eax, edi
.text:3D522AE2                 div     ecx          crash point
 
测试方法
http://www.exploit-db.com/exploits/15096/
 
厂商解决方案
目前没有详细解决方案提供:
http://www.microsoft.com/
 
漏洞提供者
Abysssec

发表评论?

0 条评论。

发表评论