
Erklärung und PoC für CVE-2020-16152
| Produktanbieter | Aerohive Networks / Extreme Networks |
| Produktname | HiveOS / IQ Engine |
| Produktversion | Getestet auf 10.0r8a build-242466 und älter |
Das administrative Webinterface (NetConfig) von Aerohive/Extreme Networks HiveOS ist anfällig für LFI, da es eine alte PHP-Version verwendet, die anfällig für String-Truncation-Angriffe ist. Ein Angreifer kann dies in Verbindung mit Log-Poisoning nutzen, um auf einem anfälligen Access Point root-Rechte zu erlangen.
Als Workaround kann das Webinterface mit folgendem Befehl deaktiviert werden: no system web-server hive-UI enable, um sich vor dieser Sicherheitslücke zu schützen.
Der Parameter _page, der für Aufrufe von action/AhBaseAction.class.php5 über die URL /action.php5 verwendet wird, dient dazu, dynamisch eine PHP-Klasse zu laden, die für eine Seite verwendet wird, wie wir im folgenden Codeausschnitt sehen können ($pageName stammt aus $_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);
}
...
}
Wie wir sehen können, gibt es kein Präfix für diesen Dateinamen, sodass es möglich ist, Pfade zu beliebigen Dateien zu durchlaufen. Da jedoch ein Suffix vorhanden ist, ist es nicht möglich, einfach eine beliebige Datei einzubinden. Da die PHP-Version auf dem Access Point recht alt ist, können wir dies umgehen (weitere Informationen):
$ 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
Indem wir den Pfad mit ausreichend /-Zeichen füllen, können wir sicherstellen, dass das Suffix Access.class.php5 vollständig abgeschnitten wird und wir beliebige Dateien einbinden können.
Da fehlgeschlagene Anmeldeversuche in /tmp/messages protokolliert werden und den übermittelten Benutzernamen enthalten, können wir die Anmeldeseite nutzen, um /tmp/messages zu vergiften und dann mit dem oben aufgeführten LFI-Angriff Code daraus auszuführen.
Obwohl der Webserver selbst mit einem Benutzer mit niedrigen Rechten läuft, wird die von hiawatha verwendete php-cgi-Instanz tatsächlich als root ausgeführt, was bedeutet, dass der gesamte PHP-Code als root ausgeführt wird:
$ 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 | Problem wurde an Aerohive Networks gemeldet |
| 2019/02/19 | Bestätigung des Problems durch den Anbieter erhalten, Workaround vorgeschlagen (Webinterface deaktivieren) |
| 2019/02/25 | Bestätigung des Problems durch den Anbieter |
| 2019/03/18 | Ping? |
| 2019/05/30 | Ping? |
| 2019/06/03 | Anbieter schlägt Telefonat vor, antwortete mit Telefondaten. Kein Anruf erhalten |
| 2019/08/12 | Ping? Anbieter antwortete, dass das Problem intern eskaliert wurde |
| 2019/09/23 | Ping? |
| 2019/09/25 | Anbieter antwortet, dass das LFI-Problem noch nicht behoben wurde |
| 2020/07/30 | Festgestellt, dass das Problem in HiveOS 10.0r8a build-242466 vom 05/2020 immer noch nicht behoben ist. CVE reserviert und Frist bis 2020/09/01 für Veröffentlichung mitgeteilt, sofern nicht aktiv an einem Fix gearbeitet wird |
| 2020/09/01 | Immer noch keine Antwort vom Anbieter, Veröffentlichung von Details und PoC |