关注公众号回复“漏洞”获取研究环境或工具
Zabbix是全球流行的企业级开源监控解决方案。最近Zabbix官网爆出一则漏洞CVE-2022-23131:
Zabbix对客户端提交的Cookie会话存在不安全的存储方式,导致在启动SAML SSO认证模式的前提下,恶意用户可通过构造特殊请求绕过认证,获取管理员权限,进而可实现RCE。影响版本:
-
5.4.0 – 5.4.8
-
6.0.0alpha1
可以采用源码方式安装Zabbix。在安装LAMP和Xdebug后,下载漏洞版本的Zabbix:
参考官网教材完成Zabbix安装:
Zabbix安装
https://www.zabbix.com/documentation/5.0/zh/manual/installation/install
然后需要配置SAML SSO服务器,可以通过开源的Keycloak来完成,参考如下:
Keycloak SAML SSO
https://www.techrunnr.com/how-to-integrate-keycloak-with-zabbix-for-sso-saml/
登录Zabbix后台进行配置:
最后效果:
在分析漏洞之前,我们首先对Zabbix处理`$_COOKIE`与`$_SESSION`映射关系的代码进行简要分析。处理基类为`CCookieSession`:
从Cookie中提取`COOKIE_NAME`,然后进行base64解码。
将字符串转换为Json对象,然后完成`$_SESSION`赋值。
Zabbix定义了一个继承于`CCookieSession`的子类`CEncryptedCookieSession`来处理Cookie数据:
通过函数`checkSign`进行处理:
增加了加密过程,这样就可以保证数据不会被修改。通过分析发现函数`checkSign`只是在验证`sessionid`时才会被调用:
也就是说其他的key将不会进行加密处理,我们可以在前端请求中随意定义。
Zabbix通过SSO SAML方式进行认证时,处理代码位于`index_sso.php`中,定位第231行:
首先尝试读取`saml_data`(从前面分析可知,`saml_data`不会进行加密处理,所以在客户端可以伪造)。如果存在`saml_data`,直接提取`username_attribute`进行验证:
根据`$username`提取用户信息。后面用`CWebUser::$data[‘sessionid’]`对`$_SESSION`赋值,最后绕过了认证,直接跳转进入Zabbix后台:
首先访问Zabbix首页,提取Cookie并进行base64解码:
回顾前面分析,我们加入`username_attribute`,将其赋值为`Admin`(Zabbix内置的管理员名称):
{"saml_data": {"username_attribute": "Admin"}, "sessionid": "***", "sign": "***"}
经过base64编码后构造新的Cookie,发送SSO SAM认证L请求并截断抓包,修改Cookie:
触发断点:
直接绕过认证,劫持管理员身份进入Zabbix后台:
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。
点关注,不迷路!
关注公众号回复“漏洞”获取研究环境或工具
原文始发于微信公众号(且听安全):【最新漏洞预警】CVE-2022-23131 Zabbix SAML SSO认证绕过漏洞分析与复现