| 
 
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. |