Zabbix 是全球流行的企业级开源监控解决方案。
CVE-2022-23131 的根本原因是 index_sso.php 中 session 获取逻辑存在问题,只要校验到 Cookie 中 username_attribute 存在直接就给 sessionid 赋值,因此可以使用默认管理员 Admin 绕过认证直接登录后台进而 getshell。
浅析
zabbix 处理 cookie 与 session 映射关系的 CCookieSession 类,实现了 SessionHandlerInterface 接口。
变量 ZBX_SESSION_NAME 就是直接从 Cookie 中获得的 zbx_session。
Cookie:Base64 解码 -> json 解码
再进入 CSessionHelper 类给 session 赋值
而 zabbix 对于伪造 session 问题,使用 CCookieSession 类的子类 CEncryptedCookieSession 实现,CEncryptedCookieSession 类中重写了 extractSessionId() 方法。
增加了 checkSign() 方法进行加密,防止数据被修改
因此,思路就是 绕过 CEncryptedCookieSession 类中 checkSign() 方法的调用,直接使用 CCookieSession 类处理 cookie 到 session 的转化即可。
再看到 index_sso.php
直接从 saml_data 中取 username_attribute,然后查库,若用户存在,创建 session,最后 sessionid 赋值。也就是在用户存在的条件下可以直接得到登录 session。
构造 payload 如下
可见成功跳转后台。
后记
登录后台,以往的想要 getshell 通用的做法是新建一个 Script,再去 Host 页面调用对应的 Script,但是笔者使用 zabbix 5.4.8 版本复现时发现,新建 Script 再进行 Host 调用这种方式 zabbix 官方已经修补了:),而绕过方式也很简单,相信经验丰富的你一看便知。
原文始发于微信公众号(Craft Security Group):Zabbix SAML SSO 认证绕过漏洞(CVE-2022-23131) 分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论