
Explicación y PoC para CVE-2020-16152
| Fabricante del producto | Aerohive Networks / Extreme Networks |
| Nombre del producto | HiveOS / IQ Engine |
| Versión del producto | Probado en 10.0r8a build-242466 y anteriores |
La interfaz web administrativa de Aerohive/Extreme Networks HiveOS (NetConfig) es vulnerable a LFI porque utiliza una versión antigua de PHP vulnerable a ataques de truncamiento de cadenas. Un atacante puede usar esto junto con el envenenamiento de logs para obtener derechos de root en un punto de acceso vulnerable.
Como solución alternativa, es posible deshabilitar la interfaz web con el siguiente comando: no system web-server hive-UI enable para protegerse contra esta vulnerabilidad.
El parámetro _page utilizado para las llamadas a action/AhBaseAction.class.php5 como se referencia en la url /action.php5 se usa para cargar dinámicamente una clase PHP que se utiliza para una página, como podemos ver en el fragmento de código a continuación ($pageName se toma 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);
}
...
}
Como podemos ver, no hay un prefijo para este nombre de archivo, lo que permite recorrer la ruta a archivos arbitrarios. Sin embargo, debido a que tenemos un sufijo, no es posible incluir cualquier archivo. Dado que la versión de PHP en el punto de acceso es bastante antigua, podemos sortear esto (más información):
$ 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
Al llenar la ruta con suficientes caracteres / podemos asegurarnos de que el sufijo Access.class.php5 se trunque por completo y somos libres de incluir archivos arbitrarios.
Debido a que los intentos de inicio de sesión fallidos se registran en /tmp/messages e incluyen el nombre de usuario enviado, podemos usar la página de inicio de sesión para envenenar /tmp/messages y luego ejecutar código desde allí con el ataque LFI mencionado anteriormente.
Aunque el propio servidor web se ejecuta con un usuario de bajos privilegios, la instancia php-cgi utilizada por hiawatha se ejecuta como root, lo que significa que todo el código php se ejecuta como 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 | El problema se reportó a Aerohive Networks |
| 2019/02/19 | El fabricante recibió el acuse de recibo del problema, sugirió una solución alternativa (deshabilitar la interfaz web) |
| 2019/02/25 | Confirmación del problema por parte del fabricante |
| 2019/03/18 | ¿Ping? |
| 2019/05/30 | ¿Ping? |
| 2019/06/03 | El fabricante sugiere una llamada telefónica, se respondió con detalles de teléfono. No se recibió ninguna llamada |
| 2019/08/12 | ¿Ping? El fabricante respondió que el problema se escaló internamente |
| 2019/09/23 | ¿Ping? |
| 2019/09/25 | El fabricante responde que el problema de LFI aún no se ha solucionado |
| 2020/07/30 | Se encontró que el problema aún no está solucionado en HiveOS 10.0r8a build-242466 que data de 05/2020. Se reservó CVE y se comunicó la fecha límite del 01/09/2020 para su publicación a menos que se esté trabajando activamente en una solución |
| 2020/09/01 | Aún sin respuesta del fabricante, publicación de detalles y PoC |