DESCRIPTION
// opcode: 0x00, address: 0x65741030
// uuid: 25288888-bd5b-11d1-9d53-0080c83a5c2c
// version: 1.0
error_status_t rpc_opnum_0 (
[in] handle_t arg_1,
[in] long trend_req_num,
[in][size_is(arg_4)] byte overflow_str[],
[in] long arg_4,
[out][size_is(arg_6)] byte arg_5[],
[in] long arg_6
);
The upper half of the 'trend_req_num' DWORD RPC argument from above is used within TmRpcSrv.dll as an index into a call table. It must specifically be 0x000a which results in a call to StRpcSrv.65673970(). The original arguments to the RPC endpoint are then passed to this called routine:
657416E6 mov eax, opnum0_call_table[eax*4]
657416ED test eax, eax
657416EF jnz short loc_65741707
...
65741707 loc_65741707:
65741707 mov [ebp+var_4], 0
6574170E mov edx, [ebp+sizeof_arg5]
65741711 push edx
65741712 mov edx, [ebp+arg5_array]
65741715 push edx
65741716 mov edx, [ebp+sizeof_overflow_str]
65741719 push edx
6574171A mov edx, [ebp+overflow_str]
6574171D push edx
6574171E push ecx ; trend_req_num
6574171F call eax ; call handler
The lower half of the 'trend_req_num' DWORD RPC argument is then used within StRpcSrv.dll as an index into a second call
table. The value of this lower half controls the code flow to the following vulnerabilities and is hereto referred to as the
'subcode'.
65674D7F push ebx ; overflow_str
65674D80 call CMON_NetTestConnection
A stack overflow occurs within the routine CMON_NetTestConnection() due to an unbounded widechar wsprintf() into a 44 byte stack based buffer as shown in the following relevant excerpt:
65634AC5 xor ecx, ecx
65634AC7 lea edx, [esp+65Ch+Name] ; 44 byte stack buffer
65634ACB mov cx, [eax]
65634ACE push ecx
65634ACF push ebx ; 1st arg
65634AD0 push offset str_SC ; "\\\\%s\\%c$"
65634AD5 push edx ; LPWSTR
65634AD6 call ds:wsprintfW ; vuln!
VULNERABILITY TWO
65631311 lea edx, [esp+0A78h+buf]
65631318 push ebp ; lpString2
65631319 push edx ; lpString1
6563131A call ebx ; lstrcatW ; stack overflow
The resulting stack overflows can be leveraged to execute arbitrary code under the privileges of the SYSTEM user. |