安全研究

安全漏洞
Opera Web浏览器样式表属性缓冲区溢出漏洞

发布日期:2006-04-13
更新日期:2006-04-13

受影响系统:
Opera Software Opera <= 8.52
不受影响系统:
Opera Software Opera 9.0
Opera Software Opera 8.54
描述:
BUGTRAQ  ID: 17513

Opera是一款流行的WEB浏览器,支持多种平台。

Opera实现上存在有符号型变量处理漏洞,远程攻击者可能利用此漏洞导致客户机上的Opera程序崩溃。

Opera在wcsncpy调用中存在有符号型变量比较错误,攻击者可以覆盖目标缓冲区后的大量内存,导致Opera崩溃。但很难利用这个漏洞执行任意代码,因为尽管拷贝了大量的内存,但只有很少的部分是可控的。

攻击者可以通过在样式表属性中指定超长的值来触发这个漏洞。以下是有漏洞函数的反汇编。请注意如果arg_length > 0x7FFFFFFF的话,就可以绕过在0x67B8CF0D的有符号型比较。

.text:67B8CEFE ; int __stdcall POC_CALL_TO_WCSNCPY_67B8CEFE(wchar_t *,int)
.text:67B8CEFE POC_CALL_TO_WCSNCPY_67B8CEFE proc near  ; CODE XREF:
sub_67B4DB72+9D6p
.text:67B8CEFE                                         ;
_POC_CALL_WSCNCPY_67B8AE6E+1B4p
.text:67B8CEFE
.text:67B8CEFE arg_pbuf_src= dword ptr  4
.text:67B8CEFE arg_length= dword ptr  8
.text:67B8CEFE
.text:67B8CEFE mov     eax, POC_pbuf_target
.text:67B8CF03 push    ebx
.text:67B8CF04 push    esi
.text:67B8CF05 push    edi
.text:67B8CF06 mov     edi, [esp+0Ch+arg_length]
.text:67B8CF0A mov     esi, [eax+40h]
.text:67B8CF0D cmp     edi, 4096
.text:67B8CF13 mov     ebx, ecx
.text:67B8CF15 jl      short loc_67B8CF1C              ; signedness error
.text:67B8CF17 mov     edi, 4095
.text:67B8CF1C
.text:67B8CF1C loc_67B8CF1C:                           ; CODE XREF:
POC_CALL_TO_WCSNCPY_67B8CEFE+17j
.text:67B8CF1C push    edi                             ; size_t
.text:67B8CF1D push    [esp+10h+arg_pbuf_src]          ; wchar_t *
.text:67B8CF21 push    esi                             ; wchar_t *
.text:67B8CF22 call    _wcsncpy
.text:67B8CF27 and     word ptr [esi+edi*2], 0
.text:67B8CF2C add     esp, 0Ch
.text:67B8CF2F mov     ecx, ebx
.text:67B8CF31 push    esi                             ; wchar_t *
.text:67B8CF32 call    sub_67B8CD10
.text:67B8CF37 test    ax, ax
.text:67B8CF3A jge     short loc_67B8CF48
.text:67B8CF3C mov     ecx, [ebx+5D0h]
.text:67B8CF42 call    sub_67B8C7BC
.text:67B8CF47 inc     eax
.text:67B8CF48
.text:67B8CF48 loc_67B8CF48:                           ; CODE XREF:
POC_CALL_TO_WCSNCPY_67B8CEFE+3Cj
.text:67B8CF48 pop     edi
.text:67B8CF49 pop     esi
.text:67B8CF4A pop     ebx
.text:67B8CF4B retn    8
.text:67B8CF4B POC_CALL_TO_WCSNCPY_67B8CEFE endp


尽管传送2GB的字符串看起来是不可能的,但由于在调用函数中的另一个漏洞,只需注入32k字符串就可扩展为很大的负值。

.text:67B8AF62 loc_67B8AF62:                           ; CODE XREF:
_POC_CALL_WSCNCPY_67B8AE6E+E2j
.text:67B8AF62                 movsx   eax, [ebp+var_length_ovfl] ; here
the error occurs: short int length is sign extended
.text:67B8AF62                                         ; to a long
integer. the result is a large negative value if length
.text:67B8AF62                                         ; is negative.
.text:67B8AF66                 jmp     short loc_67B8AF5D

<*来源:Bernhard Mueller (research@sec-consult.com
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=114496077017673&w=2
*>

测试方法:

警 告

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

<STYLE type=text/css>A { FONT-FAMILY: 35000x'A' } </STYLE>

建议:
厂商补丁:

Opera Software
--------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://www.opera.com

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