Zabbix SQL注入漏洞技术分析与防护方案

2016年8月12日,1n3通过邮件披露了Zabbix软件的jsrpc.php文件在处理profileIdx2参数时存在insert方式的SQL注入漏洞,与官方通告的latest.php文件在处理toggle_ids参数时存在insert方式的SQL注入漏洞属于同一类型的漏洞,只是攻击的位置不同。

攻击者可以使用guest账户或者已经认证的账户登录,然后利用此漏洞直接获取服务器的操作系统权限。

    攻击难度:低。

    危害程度:高。

官方通告网站如下:

https://support.zabbix.com/browse/ZBX-11023

什么是Zabbix?

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

zabbix由2部分构成,zabbix server与可选组件zabbix agent。

zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。

影响的版本

  • ZABBIX    2.0.5 2.0.13 2.2.x 2.4.2 2.4.5 2.4.7 2.4.8 2.5.0 3.0.0-3.0.3。

不受影响的版本

  • ZABBIX    1.8.*,2.2.14,3.0.4,3.2.0。

技术分析

Zabbix V3.0.4版本修复了2个SQL注入漏洞,并公布了2个POC,如下:

(1)

/zabbix/jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&timestamp=1471054088083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=2’3297&updateProfile=true&screenitemid=&period=3600&stime=20170813040734&resourcetype=17&itemids%5B23297%5D=23297&action=showlatest&filter=&filter_task=&mark_color=1

(2)latest.php?output=ajax&sid=&favobj=toggle&toggle_open_state=1&toggle_ids[]=15385); select * from users where (1=1

以下为第一个poc的调用链:

Jsrpc.php:413 require_once dirname(__FILE__).'/include/page_footer.php';
include/page_footer.php:40  $result = CProfile::flush();
include/class/user/Cprofile.php:63 function flush()
include/class/user/Cprofile.php:277 function insertDB ()

再看第二个poc的调用链:

Latest.php:88  CProfile::update('web.latest.toggle_other', $_REQUEST['toggle_open_state'], PROFILE_TYPE_INT, $hostId);
Latest.php:829 require_once dirname(__FILE__).'/include/page_footer.php'; 
include/page_footer.php:40  $result = CProfile::flush();
include/class/user/Cprofile.php:63 function flush()
include/class/user/Cprofile.php:277 function insertDB ()

以第一个调用链为例,我们来看文件\zabbix-3.0.0beta2\frontends\php\jsrpc.php。

zabbix1

当method等于screen.get时,profileIdx2参数进入options中,然后options进入CScreenBuilder::getScreen($options),继续跟进文件\zabbix-3.0.0beta2\frontends\php\include\classes\screens\CScreenBuilder.php。

zabbix2

profileIdx2参数又进入CScreenBase::calculateTime()函数,继续跟进文件\zabbix-3.0.0beta2\frontends\php\include\classes\screens\CScreenBase.php。

zabbix3

profileIdx2参数又进入CProfile::update()函数中,继续跟进\zabbix-3.0.0beta2\frontends\php\include\classes\user\CProfile.php。

zabbix4

这里的profileIdx2参数就是这里的idx2,进入到profile中,然后profile进入insert中最后进入到insertDB()函数中。

zabbix5

insertDB中的处理过程如下:

zabbix6

insertDB函数中,对一些关键参数(idx,value),用zbx_dbstr()函数进行了过滤,但对idx2没有过滤,导致产生了sql注入漏洞。

分析过滤函数zbx_dbstr()函数,位于文件zabbix-3.0.0beta2\zabbix-3.0.0beta2\frontends\php\include\db.inc.php。

zabbix7

可以看到这个就是zabbix的全局过滤函数,根据各种数据库类型,过滤sql注入的。

从开始到最后进入sql语句中的参数有三个:$options[‘profileIdx’]、$options[‘period’]、$options[‘profileIdx2’],只有$options[‘profileIdx2’]全程没有过滤,直接进入sql语句中。

看官方的3.0.4修复版本的Cprofile::insertDB函数,其关键参数idx2也做了过滤,如下图:

zabbix8

当然,要使请求最终到达这个漏洞函数,中间还有一些限制条件,主要看Cprofile::flush函数,如下:

zabbix9

$profiles和$isModified()都会在前面的update()函数内会保证为真,而要满足userDeatails[‘suerid’]>0,则需要用户登录或系统开启guest模式。

防护方案

  • 如果为受影响的版本,建议升级到最新版本,官方下载地址如下:

          http://www.zabbix.com/download.php

  • 禁用guest账户。
  • 绿盟科技免费在线检测。

         https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?pid=0&sid=1

  • 绿盟科技在线云检测,登陆绿盟科技云,申请极光自助扫描服务试用:

         https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?pid=0&sid=0

  • 使用绿盟科技的远程评估系统(RSAS/WVSS)对内网进行安全评估。
  • 使用绿盟科技检测类产品(IDS)进行检测。
  • 使用绿盟科技防护类产品(IPS/NF/SG)进行防护。
  • 已经购买了绿盟科技相关产品服务的客户可以通过产品升级进行检测与防护。
  • 短期服务:绿盟科技工程师现场处理。确保第一时间消除网络内相关风险点,控制事件影响范围,提供事件分析报告。
  • 中期服务:提供 3-6个月的风险监控与巡检服务。根除风险,确保事件不复发。
  • 长期服务:基金行业业务风险解决方案(威胁情报+攻击溯源+专业安全服务)。

参考链接

https://www.exploit-db.com/exploits/40237/

http://seclists.org/fulldisclosure/2016/Aug/82

声 明

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

关于绿盟科技

北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。

基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。

北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。

如果您需要了解更多内容,可以
加入QQ群:486207500、570982169
直接询问:010-68438880-8669

 

 

Spread the word. Share this post!

Meet The Author

Leave Comment