
Spiegazione e PoC per CVE-2020-16152
| Produttore | Aerohive Networks / Extreme Networks |
| Nome prodotto | HiveOS / IQ Engine |
| Versione prodotto | Testato su 10.0r8a build-242466 e versioni precedenti |
L'interfaccia web amministrativa (NetConfig) di Aerohive/Extreme Networks HiveOS è vulnerabile a LFI perché utilizza una vecchia versione di PHP vulnerabile ad attacchi di troncamento di stringhe. Un attaccante può sfruttare questa vulnerabilità in combinazione con l'avvelenamento dei log per ottenere privilegi di root su un punto di accesso vulnerabile.
Come workaround è possibile disabilitare l'interfaccia web con il seguente comando: no system web-server hive-UI enable per proteggersi da questa vulnerabilità.
Il parametro _page utilizzato per le chiamate a action/AhBaseAction.class.php5 come referenziato dall'url /action.php5 è usato per caricare dinamicamente una classe PHP che viene utilizzata per una pagina come possiamo vedere nel frammento di codice qui sotto ($pageName è preso da $_POST['_page']):
protected function getAccess($pageName,$actionType) {
$filename = $pageName.'Access.class.php5';
$classname = $pageName.'Access';
if (include_once $filename) {
require_once $filename;
return new $classname($this->user,$actionType);
}
...
}
Come possiamo vedere non c'è un prefisso per questo nome file, rendendo possibile attraversare il percorso per file arbitrari. Tuttavia, poiché abbiamo un suffisso, non è possibile includere qualsiasi file. Poiché la versione di PHP sul punto di accesso è piuttosto vecchia, possiamo effettivamente aggirare questo problema (maggiori informazioni):
$ php-cgi -v
PHP Warning: PHP Startup: Cannot dynamically load sockets.so - dynamic modules are not supported in Unknown on line 0
PHP 5.2.17 (cgi-fcgi) (built: May 28 2020 23:36:34)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
Riempendo il percorso con abbastanza caratteri / possiamo assicurarci che il suffisso Access.class.php5 sia completamente troncato e siamo liberi di includere file arbitrari.
Poiché i tentativi di login falliti vengono registrati in /tmp/messages e includono il nome utente inviato, possiamo usare la pagina di login per avvelenare /tmp/messages e poi eseguire codice da esso con l'attacco LFI sopra elencato.
Sebbene il webserver stesso stia girando con un utente a bassi privilegi, l'istanza php-cgi usata da hiawatha sta effettivamente girando come root, il che significa che tutto il codice PHP viene eseguito come root:
$ ps | egrep "php|hiawatha"
2237 root 9980 S /usr/local/bin/php-cgi -b 127.0.0.1:2008
12088 admin 20840 S /usr/local/sbin/hiawatha
$ ./CVE-2020-16152.py 192.168.0.166 'echo -e "\n\n";id' | tail
2020-08-30 13:56:28 notice root: ntpclient: [ntpclient]Set time - Sun Aug 30 13:56:28 GMT+1:00 2020
2020-08-30 13:56:28 notice root: Connect [0.aerohive.pool.ntp.org] successful
2020-08-30 13:56:54 info ah_dcd: application: get track-ip trigger access console request: cancel.
2020-08-30 13:57:00 notice root: ntpclient: [ntpclient]Set time - Sun Aug 30 13:57:00 GMT+1:00 2020
2020-08-30 13:57:00 notice root: Connect [0.aerohive.pool.ntp.org] successful
2020-08-30 13:57:31 notice ah_webui: security: Admin "<
uid=0(root) gid=0(root)
| 2019/02/17 | Problema segnalato ad Aerohive Networks |
| 2019/02/19 | Conferma del problema ricevuta dal vendor, workaround suggerito dal vendor (disabilitare l'interfaccia web) |
| 2019/02/25 | Conferma del problema da parte del vendor |
| 2019/03/18 | Ping? |
| 2019/05/30 | Ping? |
| 2019/06/03 | Il vendor suggerisce una telefonata, risposto con i dettagli telefonici. Nessuna chiamata ricevuta |
| 2019/08/12 | Ping? Il vendor risponde che il problema è stato escalated internamente |
| 2019/09/23 | Ping? |
| 2019/09/25 | Il vendor risponde che il problema LFI non è stato ancora affrontato |
| 2020/07/30 | Trovato problema ancora non risolto in HiveOS 10.0r8a build-242466 datato 05/2020. Riservato CVE e comunicata scadenza 2020/09/01 per la pubblicazione a meno che non si stia lavorando attivamente a una correzione |
| 2020/09/01 | Ancora nessuna risposta dal vendor, rilascio dei dettagli e del PoC |