Zabbix 再次被爆出存在 SQL 注入漏洞,影响云上数百网站

0x00 前言

        昨晚,Zabbix 被爆出一个高危的 SQL 注入漏洞。这个漏洞本身需要登录触发,但因为大部分 Zabbix 都启用了 guest 账号,导致访客在访问 Zabbix 时默认都会带上 guest 权限。有了 guest 权限后,触发这个漏洞的条件“需要登录”就不存在了,相当于一个前台的 SQL 注入漏洞。所以,外部媒体转载的文章中“无需登录”实际上是不严谨的说法。

0x01 漏洞原理

        由漏洞作者提供的 POC 得知,漏洞存在于 jsrpc.php 文件中。发送到此文件的所有参数会传入 CScreenBuilder 中进行处理,过程中调用 CScreenBase 类的 calculateTime 方法的时候使用了 $options['profileIdx2'],profileIdx2 的值最终在 CProfile 的 flush() 函数内带入到数据库 insert 操作中。由于在传入过程中没有对参数内容进行过滤,最终导致了 SQL 注入漏洞的产生。

0x02 影响范围

        云盾在昨晚对云上运行 Zabbix 服务的机器进行安全扫描,发现开启 guest 默认用户且存在此漏洞的 IP 数量达到数百个,存在风险的 Zabbix 服务数量占总数的一半以上。
       此外,官方公告中列出的漏洞影响范围包括以下版本:
  • Zabbix 2.2.x
  • Zabbix 3.0.0 - 3.0.3
        而云盾的扫描结果显示,受漏洞影响的版本号一共 26 个,经过聚合后实际上的影响范围如下:
  • Zabbix 2.0.x
  • Zabbix 2.2.x
  • Zabbix 2.4.x
  • Zabbix 3.0.0 - 3.0.3
        官方公告范围不完整的原因,大概是因为漏洞作者在测试漏洞的时候没有对所有版本进行测试,导致漏掉了部分版本。

0x03 修复方案

         1、在 Zabbix 目录中找到 frontends/php/include/classes/user/CProfile.php 文件,定位代码:

$result &= self::insertDB($idx, $data['value'], $data['type'], $idx2);

         把里面的 $idx2 改为 intval($idx2)  。
         2、前往 Zabbix 后台“管理”栏目中禁用 guest 用户。
         3、更新 Zabbix 到 3.0.4 或更高版本。

0x04 参考资料

#0: https://support.zabbix.com/browse/ZBX-11023
#1: http://seclists.org/fulldisclosure/2016/Aug/82
#2: http://www.cnbraid.com/2016/08/18/zabbix303/


你可能感兴趣的:(Zabbix 再次被爆出存在 SQL 注入漏洞,影响云上数百网站)