漏洞描述
Zabbix在启用 SAML SSO 身份验证(非默认)的情况下,未经身份验证的攻击者可以通过修改Cookie数据,绕过身份认证获得对 Zabbix 前端的管理员访问权限。
影响范围
4.0.36,5.4.0,5.4.8,6.0.0alpha1
搜索语法
Fofa
app="ZABBIX-监控系统" && body="SAML"
Zoomeye
title:"ZABBIX"
Shodan
title="ZABBIX"
漏洞分析
漏洞步骤
-
获取Set-Cookie数据zbx_session参数的值,就是获取一个正常请求的Cookie包,以此为基础修改
-
通过Url解码和Base64解码获得zbx_session参数Json格式数据
-
通过在Json中添加saml_data和username_attribute参数后重新Base64编码和Url编码构造Payload
-
在请HTTP求头中添加构造的Payload,然后请求index_sso.php
-
若HTTP响应头中包含Location头,说明存在漏洞
漏洞分析
漏洞POC如上图所示,在这里主要分析点在 index_sso.php 这个请求,对应于zabbix源码中就是 RootDir/ui/index_sso.php 这个文件,因为web前端展示相关都是在 ui 这个目录下。
通过漏洞描述可知主要是通过伪造 Cookie 进行的登录绕过,所以直接定位获取 Cookie 处,也就是获取 saml 部分
这里主要关注点在 loginByUsername 这个方法上,因为后面代码都只是从该结果中取出设置,没有太大实质性意义
至此,整个漏洞分析就完毕了,主要就是利用了 登录数据伪造 以及Zabbix Web Frontend 内置存在一个名为 Admin 的高权限用户这一特性。
白话
当伪造的cookie中存在saml_data时,获取username_attribute的数据,如果该用户真实存在则会生成一个sessionid从而实现身份认证绕过。
又因为Zabbix Web Frontend自动配置了一个名为Admin的高权限用户,所以伪造Admin即可实现登录绕过。
为什么需要Base64加解密?
首先来到 index_sso.php ,我们主要关注点在包含的文件上
来到 /index/config.inc.php 文件,在这个 PHP 文件中核心就这两行代码
主要关注点在 parseData 方法,也就是这个方法的核心。
可以看到这里的这里的 COOKIE_NAME 实际上就是 zbx_session ,也就代表是获取请求体中 zbx_session 字段。
限制点
需要开启 SAML 认证机制。
原文始发于微信公众号(安全之道):Zabbix前端登录绕过漏洞分析(CVE-2022-23131)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论