CVE-2022-23131 Zabbix Web Frontend Bypassing the SAML SSO Authentication

警告
本文最后更新于 2022-02-22,文中内容可能已过时。

# 环境搭建

  1. https://cdn.zabbix.com/zabbix/appliances/stable/5.4/5.4.8/zabbix_appliance-5.4.8-vmx.tar.gz zabbix5.4的虚拟机
  2. https://github.com/catsAND/zabbix-saml 配置saml sso登录

# 漏洞分析

漏洞产生的根本原因是因为混用了cookie和session。

先看几行对于cookie和session处理的类。

CCookieSession实现SessionHandlerInterface接口,接管了php对于session的处理,用cookie进行包装。

image.png

其中读取session时是使用CCookieHelper

image.png

从cookie中base64回来拿到session

zabbix对于伪造session的处理是另一个类CEncryptedCookieSession,他继承了CCookieSession

image.png

重写了CCookieSession的extractSessionId函数,加了一个checkSign的函数。

那么只要不调用CEncryptedCookieSession的extractSessionId函数,或者干脆不用CEncryptedCookieSession而找使用CCookieSession管理session的地方就可以伪造了。

此时再来看index_sso.php

image.png

直接从session也就是cookie中取出saml_data中的username_attribute,如果查到了用户名,则set一个sessionid,造成绕过鉴权。

sonarsource的漏洞演示中使用了两次登录,套用了原来的sessionid和sign参数,其实不设置这两个参数也可以。

1
{"saml_data":{"username_attribute":"Admin"},"sessionid":"","sign":""}

image.png

# 后利用

zabbix在一些特定的配置下可以控agent,这些参考Wfox的 Zabbix 攻击面挖掘与利用

# 参考

  1. https://cdn.zabbix.com/zabbix/appliances/stable/5.4/5.4.8/zabbix_appliance-5.4.8-vmx.tar.gz zabbix5.4的虚拟机
  2. https://github.com/catsAND/zabbix-saml 配置saml sso登录
  3. https://github.com/0tt7/CVE-2022-23131
  4. https://www.php.net/manual/en/class.sessionhandlerinterface.php

文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。