• 本文作者: 雨, 夜
  • |
  • 2018年5月14日
  • |
  • 漏洞分析
  • |

Nagiosxi漏洞分析与验证

一、背景介绍

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值是否为空,此处并未对登录权限做验证,

1

程序会修改config/settings.php文件,写入提交的数据库用户名、密码

2

登录验证发生在配置修改之后,导致攻击者可以越权修改数据库的连接配置

2. CVE-2018-8734 – sql injection

/nagiosql/admin/helpedit.php文件第56行只验证了$chkContent与$chkModus的值

同时$_POST['selInfoKey1']的值未做任何过滤

3

就带入getDataArray()进行查询

4

5

从而导致sql注入漏洞

3. CVE-2018-8735 – command injection

/nagiosxi/backend/index.php 文件,首先接收POST参数,判断cmd的值,如果cmd=submitcommand进入backend_submit_command()函数

6

7

/backend/includes/handler-commands.inc.php文件,接收参数并提交请求

8

/includes/js/commands.js

9

10

一直跟到nagiosxi/cron/cmdsubsus.php的process_command()函数

11

12

$cmdline经过系统脚本路径与$command_data拼接后组成要执行的命令

13

最后调用system()函数执行$cmdline

14

command的值在/html/includes/constants.inc.php中有定义

222

4. CVE-2018-8736 – 本地特权提升

这里的提权用到了一些技巧。首先看下/etc/sudoers文件内容

16

文件中指定的脚本能以root权限执行(不熟悉sudoers文件的自行脑补一下),并且配置中指定了nagiosxi目录下的一些shell脚本(当前用户有修改权限),我们可以通过CVE-2018-8735命令执行漏洞修改图中脚本的内容,系统在使用sudo命令调用该脚本的时候,就相当于用root身份执行,从而导致权限提升。

三、漏洞利用、复现

在本地环境中对以上几个漏洞进行验证,测试环境为nagiosxi-5.4.10-x64, ip地址为192.168.113.146

1. sql注入

通过sellInfoKey1参数获取管理员的api_key

21

2. 越权修改配置文件

将数据库用户改为root,默认密码nagiosxi

22

3. 命令执行

利用$command_data参数在/tmp目录下创建一个文件

23

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文件中

反弹一个shell,其中IP、PORT为反连主机的IP、端口

然后使用无密码的sudo命令调用该脚本,从而拿到root权限

四、修复建议

官方已发布补丁,升级到最新版

Written by 雨, 夜