CVE:CVE-2006-1834
CNNVD:CNNVD-200604-297
Opera是挪威欧朋（Opera Software）公司所开发的一款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+9D6 p
.text:67B8CEFE ;
_POC_CALL_WSCNCPY_67B8AE6E+1B4 p
.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+17 j
.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+3C j
.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+E2 j
.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
solution:Upgrade opera opera_browser to a higher version than 8.53,1.00,2.00,2.10,2.10:beta1,2.10:beta2,2.10:beta3,2.12,3.00,3.00:beta,3.10,3.21,3.50,3.51,3.60,3.61,3.62,3.62:beta,4.00,4.00:beta2,4.00:beta3,4.00:beta4,4.00:beta5,4.00:beta6,4.01,4.02,5.0,5.0:beta2,5.0:beta3,5.0:beta4,5.0:beta5,5.0:beta6,5.0:beta7,5.0:beta8,5.02,5.10,5.11,5.12,6.0,6.0:beta1,6.0:beta2,6.0:tp1,6.0:tp2,6.0:tp3,6.1,6.01,6.1:beta1,6.02,6.03,6.04,6.05,6.06,6.11,6.12,7.0,7.0:beta1,7.0:beta1_v2,7.0:beta2,7.01,7.02,7.03,7.10,7.10:beta1,7.11,7.11:beta2,7.20,7.20:beta7,7.21,7.22,7.23,7.50,7.50:beta1,7.51,7.52,7.53,7.54,7.54:update1,7.54:update2,7.60,8.0,8.0:beta1,8.0:beta2,8.0:beta3,8.01,8.02,8.50,8.51,8.52,and avoid the version (,8.53],1.00,2.00,2.10,2.10:beta1,2.10:beta2,2.10:beta3,2.12,3.00,3.00:beta,3.10,3.21,3.50,3.51,3.60,3.61,3.62,3.62:beta,4.00,4.00:beta2,4.00:beta3,4.00:beta4,4.00:beta5,4.00:beta6,4.01,4.02,5.0,5.0:beta2,5.0:beta3,5.0:beta4,5.0:beta5,5.0:beta6,5.0:beta7,5.0:beta8,5.02,5.10,5.11,5.12,6.0,6.0:beta1,6.0:beta2,6.0:tp1,6.0:tp2,6.0:tp3,6.1,6.01,6.1:beta1,6.02,6.03,6.04,6.05,6.06,6.11,6.12,7.0,7.0:beta1,7.0:beta1_v2,7.0:beta2,7.01,7.02,7.03,7.10,7.10:beta1,7.11,7.11:beta2,7.20,7.20:beta7,7.21,7.22,7.23,7.50,7.50:beta1,7.51,7.52,7.53,7.54,7.54:update1,7.54:update2,7.60,8.0,8.0:beta1,8.0:beta2,8.0:beta3,8.01,8.02,8.50,8.51,8.52