8月17日各大运维社区开始预警zabbix高危漏洞,由于zabbix用户量比较大,所以影响范围比较广。
下面为大家介绍下本次漏洞和修复办法。
漏洞概述
zabbix的jsrpc的profileIdx2参数存在insert方式的SQL注入漏洞,攻击者无需授权登陆即可登陆zabbix管理系统,也可通过script等功能轻易直接获取zabbix服务器的操作系统权限。
影响程度
- 攻击成本:低
- 危害程度:高
- 是否登陆:不需要
- 影响范围:2.2.x, 3.0.0-3.0.3。(其他版本未经测试)
漏洞测试
在您的zabbix的地址后面加上如下url:
如:
http://IP/zabbix/如下URL内容
/jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&tim
estamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=hi
story.php&profileIdx=web.item.graph&profileIdx2=2'3297&updateProfil
e=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=
17&itemids%5B23297%5D=23297&action=showlatest&filter=&filter_task=&
mark_color=1
输出结果,出现如下图关键字表示漏洞存在:
补充:
以上为仅为漏洞验证测试方式。
攻击者可以通过进一步构造语句进行错误型sql注射,无需获取和破解加密的管理员密码。
有经验的攻击者可以直接通过获取admin的sessionid来根据结构算法构造sid,替换cookie直接以管理员身份登陆。
修复方案
升级到zabbix最新版3.0.4及以上。
修复方法
首先查看本机zabbix版本
[root@zabbix-server]# zabbix_server -V
配置yum源
EC君本地通过Cobbler制作了内部yum源,每天同步zabbix官方源,所以不用配置外部yum,各位可以通过阿里zabbix源速度也是很快的。当然最快的还是内部源,下面是通过Cobbler制作内部源方法。看下图就知道内部源的速度优势了。
[root@zabbix-server yum.repos.d]# yum clean all
[root@zabbix-server yum.repos.d]# yum makecache
开始升级
[root@zabbix-server ]# /etc/init.d/zabbix-server stop
##停止zabbix-server服务
[root@zabbix-server ]# /etc/init.d/mysqld stop
##停止mysql服务
[root@zabbix-server ]# yum update zabbix*
EC君个人习惯是升级尽量将组件也升级,曾经由于zabbix-agent版本过低引起过好多坑。当然我的环境用的是KVM虚拟化,当升级出现任何问题,一言不合就可回滚,安全稳定才是运维的关键指标。
升级完毕
查看服务
[root@zabbix-server ]# zabbix_server -V
启动服务
[root@zabbix-server ]# /etc/init.d/zabbix-server start
##启动zabbix-server服务
[root@zabbix-server ]# /etc/init.d/mysqld start
##启动mysql服务
验证漏洞修复
继续上面的漏洞验证,结果如下图,漏洞已经不存在了。
踩坑
由于历史原因EC君有两个zabbix环境,分别是centos6系统和centos7系统。
除了系统启停外,升级方式大同小异。在一台centos6升级过程中,当zabbix-server升级完毕,正常启动后登陆zabbix控制界面发现如下图错误。
解决思路
- 查看服务状态
- 查看端口
- 查看日志
- 查看最直接的错误提示
查看服务状态后发现无异常,查看端口发现监听正常,查看日志发现没有明显报错。看上图最直接报错说明没有这个URL,而且刚刚进行了升级操作,有可能有配置文件发生了变更。
查看zabbix apache配置文件
ll /etc/httpd/conf.d
发现配置文件zabbix.conf被修改了,好的改回来。
[root@zabbix-server conf.d]# mv zabbix.conf.rpmnew zabbix.conf
##修改配置文件
[root@zabbix-server conf.d]# /etc/init.d/httpd restart
##重启apache
再次访问zabbix界面问题解决。
zabbix安全
当然上边的漏洞需要开启guest,将guest disable掉同时增加相应的网络策略,也可以提高安全性。在企业环境中不管生产、非生产、开发、测试、试演示、预生产、还有自己玩的小环境请杜绝弱密码。
最后如果你用的是nginx,可以在server段加下面,这是临时暴力解决方案。
if ($request_uri ~ ^(.+\.php)(.*)$) {
set $req $2;
}
if ($req ~* "union[+|(%20)]") {
return 503;
}
if ($req ~* "and[+|(%20)]") {
return 503;
}
if ($req ~* "select[+|(%20)]") {
return 503;
}
END.
OK今天就为大家介绍这么多了。
我是EC君,如果你喜欢我的文章,请帮忙点个关注!点个喜欢吧!
也可以点击作者信息,扫描微信二维码关注我的个人微信公众号。
你的鼓励将是我们共同进步的源泉。
下面有更多Zabbix相关文章
自动化监控Zabbix之邮件报警
自动化监控Zabbix之主机自动发现
自动化监控Zabbix之Web监控详解
Zabbix高危漏洞及其修复办法
自动化监控Zabbix安装部署之agent端部署