Home page logo
/

bugtraq logo Bugtraq mailing list archives

[CVE-2014-2206] GetGo Download Manager HTTP Response Header Buffer Overflow Remote Code Execution
From: Julien Ahrens <info () rcesecurity com>
Date: Sun, 02 Mar 2014 17:54:16 +0100

RCE Security Advisory
http://www.rcesecurity.com
 
 
1. ADVISORY INFORMATION
-----------------------
Product:        GetGo Download Manager
Vendor URL:     www.getgosoft.com
Type:           Stack-based Buffer Overflow [CWE-121]
Date found:     2014-02-20
Date published: 2014-03-02
CVSSv2 Score:   10,0 (AV:N/AC:L/Au:N/C:C/I:C/A:C)
CVE:            CVE-2014-2206
 
 
2. CREDITS
----------
This vulnerability was discovered and researched by Julien Ahrens from
RCE Security.
 
 
3. VERSIONS AFFECTED
--------------------
GetGo Download Manager v4.9.0.1982 (latest)
GetGo Download Manager v4.8.2.1346
GetGo Download Manager v4.4.5.502
and other older versions may be affected too.
 
 
4. VULNERABILITY DESCRIPTION
----------------------------
A stack-based buffer overflow vulnerability has been identified in the
GetGo Download Manager.
 
When a website is requested for download, the application reads the HTTP
Response Header values of the target page and copies the retrieved
values to a temporary buffer, which is set to a fixed size of 4097
bytes, but this size is not used by the application to limit the input
to the buffer. Instead it fills the buffer byte by byte until the
terminating sequence "\r\n" is found. Therefore the application writes
outside the expected memory boundaries if the HTTP Response Header is
greater than 4097 bytes.
 
This leads to a stack-based buffer overflow with an overwritten SEH
chain or return points, resulting in remote code execution. Successful
exploits can allow remote attackers to execute arbitrary code with the
privileges of the user running the application. Failed exploits will
result in a denial-of-service condition.
 
 
5. PROOF-OF-CONCEPT (DEBUG)
---------------------------
Registers:
EAX 00000000
ECX CCCCCCCC
EDX 76F2B4AD ntdll.76F2B4AD
EBX 00000000
ESP 0474BD5C
EBP 0474BD7C
ESI 00000000
EDI 00000000
EIP CCCCCCCC
C 0  ES 002B 32bit 0(FFFFFFFF)
P 1  CS 0023 32bit 0(FFFFFFFF)
A 0  SS 002B 32bit 0(FFFFFFFF)
Z 1  DS 002B 32bit 0(FFFFFFFF)
S 0  FS 0053 32bit 7EF94000(FFF)
T 0  GS 002B 32bit 0(FFFFFFFF)
D 0
O 0  LastErr ERROR_SUCCESS (00000000)
EFL 00010246 (NO,NB,E,BE,NS,PE,GE,LE)
ST0 empty g
ST1 empty g
ST2 empty g
ST3 empty g
ST4 empty g
ST5 empty g
ST6 empty g
ST7 empty g
               3 2 1 0      E S P U O Z D I
FST 0000  Cond 0 0 0 0  Err 0 0 0 0 0 0 0 0  (GT)
FCW 027F  Prec NEAR,53  Mask    1 1 1 1 1 1
 
 
Stack:
ESP-8    > 00286D30
ESP-4    > FFFFFFFE
ESP ==>  > 76F2B499  RETURN to ntdll.76F2B499
ESP+4    > 0474BE44
ESP+8    > 0474D3A8
[...]
ESP+1648 > CCCCCCCC
ESP+164C > CCCCCCCC  Pointer to next SEH record
ESP+1650 > CCCCCCCC  SE handler
ESP+1654 > CCCCCCCC
 
 
6. VULNERABLE CODE PART
-----------------------
// GetGoDM.exe
004A4CE1  PUSH ECX                          ; /Arg3
004A4CE2  PUSH 1001                         ; |Arg2 = 00001001
004A4CE7  LEA EDX,DWORD PTR SS:[EBP-1024]   ; |
004A4CED  PUSH EDX                          ; |Arg1
004A4CEE  MOV ECX,DWORD PTR SS:[EBP-1064]   ; |
004A4CF4  CALL GetGoDM.004A3A70             ; \GetGoDM.004A3A70
 
 
004A3A70  PUSH EBP
004A3A71  MOV EBP,ESP
004A3A73  PUSH -1
004A3A75  PUSH GetGoDM.00644153
004A3A7A  MOV EAX,DWORD PTR FS:[0]
004A3A80  PUSH EAX
004A3A81  SUB ESP,1C
004A3A84  MOV EAX,DWORD PTR DS:[6E6FB8]
004A3A89  XOR EAX,EBP
004A3A8B  PUSH EAX
004A3A8C  LEA EAX,DWORD PTR SS:[EBP-C]
004A3A8F  MOV DWORD PTR FS:[0],EAX
004A3A95  MOV DWORD PTR SS:[EBP-28],ECX
004A3A98  MOV DWORD PTR SS:[EBP-14],0
004A3A9F  MOV EAX,DWORD PTR SS:[EBP+C]
004A3AA2  PUSH EAX
004A3AA3  PUSH 0
004A3AA5  MOV ECX,DWORD PTR SS:[EBP+8]
004A3AA8  PUSH ECX
004A3AA9  CALL GetGoDM.004EA0A0
004A3AAE  ADD ESP,0C
004A3AB1  MOV DWORD PTR SS:[EBP-18],1
004A3AB8  MOV DWORD PTR SS:[EBP-10],1
004A3ABF  MOV DWORD PTR SS:[EBP-20],0
004A3AC6  PUSH GetGoDM.0066D7F6             ; /Arg1 = 0066D7F6
004A3ACB  LEA ECX,DWORD PTR SS:[EBP-1C]     ; |
004A3ACE  CALL GetGoDM.004090A0             ; \GetGoDM.004090A0
004A3AD3  MOV DWORD PTR SS:[EBP-4],0
004A3ADA  /MOV EDX,1
004A3ADF  |TEST EDX,EDX
004A3AE1  |JE SHORT GetGoDM.004A3B5A
004A3AE3  |MOV EAX,DWORD PTR SS:[EBP+10]
004A3AE6  |PUSH EAX                         ; /Arg3
004A3AE7  |PUSH 1                           ; |Arg2 = 00000001
004A3AE9  |MOV ECX,DWORD PTR SS:[EBP-10]    ; |
004A3AEC  |MOV EDX,DWORD PTR SS:[EBP+8]     ; |
004A3AEF  |LEA EAX,DWORD PTR DS:[EDX+ECX-1] ; |
004A3AF3  |PUSH EAX                         ; |Arg1
004A3AF4  |MOV ECX,DWORD PTR SS:[EBP-28]    ; |
004A3AF7  |ADD ECX,0C                       ; |
004A3AFA  |CALL GetGoDM.0049DF80            ; \GetGoDM.0049DF80
004A3AFF  |MOV DWORD PTR SS:[EBP-18],EAX
004A3B02  |CMP DWORD PTR SS:[EBP-18],0
004A3B06  |JNZ SHORT GetGoDM.004A3B11
004A3B08  |MOV DWORD PTR SS:[EBP-14],0
004A3B0F  |JMP SHORT GetGoDM.004A3B5A
004A3B11  |MOV ECX,DWORD PTR SS:[EBP+8]
004A3B14  |ADD ECX,DWORD PTR SS:[EBP-10]
004A3B17  |MOV BYTE PTR DS:[ECX],0
004A3B1A  |MOV EDX,DWORD PTR SS:[EBP+8]
004A3B1D  |PUSH EDX                         ; /Arg1
004A3B1E  |LEA ECX,DWORD PTR SS:[EBP-1C]    ; |
004A3B21  |CALL GetGoDM.004497C0            ; \GetGoDM.004497C0
004A3B26  |PUSH 0                           ; /Arg2 = 00000000
004A3B28  |PUSH GetGoDM.0066D7F8            ; |Arg1 = 0066D7F8 ASCII ""
004A3B2D  |LEA ECX,DWORD PTR SS:[EBP-1C]    ; |
004A3B30  |CALL GetGoDM.00409560            ; \GetGoDM.00409560
004A3B35  |MOV DWORD PTR SS:[EBP-20],EAX
004A3B38  |CMP DWORD PTR SS:[EBP-20],-1
004A3B3C  |JE SHORT GetGoDM.004A3B4F
004A3B3E  |MOV EAX,DWORD PTR SS:[EBP+8]
004A3B41  |ADD EAX,DWORD PTR SS:[EBP-20]
004A3B44  |MOV BYTE PTR DS:[EAX],0
004A3B47  |MOV ECX,DWORD PTR SS:[EBP-20]
004A3B4A  |MOV DWORD PTR SS:[EBP-14],ECX
004A3B4D  |JMP SHORT GetGoDM.004A3B5A
004A3B4F  |MOV EDX,DWORD PTR SS:[EBP-10]
004A3B52  |ADD EDX,1
004A3B55  |MOV DWORD PTR SS:[EBP-10],EDX
004A3B58  \JMP SHORT GetGoDM.004A3ADA
004A3B5A  MOV EAX,DWORD PTR SS:[EBP-14]
004A3B5D  MOV DWORD PTR SS:[EBP-24],EAX
004A3B60  MOV DWORD PTR SS:[EBP-4],-1
004A3B67  LEA ECX,DWORD PTR SS:[EBP-1C]
004A3B6A  CALL GetGoDM.004091E0
004A3B6F  MOV EAX,DWORD PTR SS:[EBP-24]
004A3B72  MOV ECX,DWORD PTR SS:[EBP-C]
004A3B75  MOV DWORD PTR FS:[0],ECX
004A3B7C  POP ECX
004A3B7D  MOV ESP,EBP
004A3B7F  POP EBP
004A3B80  RETN 0C
 
 
7. SOLUTION
-----------
None
 
 
8. REPORT TIMELINE
------------------
2014-02-23: Discovery of the vulnerability
2014-02-23: Vendor Notification #1
2014-02-26: MITRE assigns CVE-2014-2206
2014-03-01: Project is dead
2014-03-02: Full Disclosure
 
 
9 . REFERENCES
--------------
http://www.rcesecurity.com/2014/03/cve-2014-2206-getgo-download-manager-http-response-header-buffer-overflow-remote-code-execution


  By Date           By Thread  

Current thread:
  • [CVE-2014-2206] GetGo Download Manager HTTP Response Header Buffer Overflow Remote Code Execution Julien Ahrens (Mar 03)
[ Nmap | Sec Tools | Mailing Lists | Site News | About/Contact | Advertising | Privacy ]