CVE-2026-23921 — Zabbix 基于时间的盲注 SQL 注入
这个CVE大概是今年3月的时候提交的,也一直没有公开的POC,主要这个软件的用户体量不小,主要是运维侧监控用的,但是你要是拿到这个软件的权限,利用的点可就多了。主要存在内网居多,对于渗透测试的小伙伴来说看着心里痒痒,不过就在刚刚网上有大神给出了详细漏洞分析和POC,我们一起来一探究竟。

- ●软件介绍: 运维圈知名监控软件,非常流行
受影响版本: Zabbix < 7.0.22 / < 7.2.15 / < 7.4.6 - ●**CVSS:**高危
- ●**类型:**基于时间的盲注 SQL 注入(通过
sortfield参数) - ●**需要身份验证:**是(任何 API 用户;超级管理员可避免权限连接)
01漏洞
旧版 Zabbix API 服务(例如host.get`get_users_users`、 `get_users_users` trigger.get、item.get`get_users_users` 等)接受一个未声明的groupBy参数zbx_array_merge()。在`get_users_users` 中CApiService::applyQuerySortOptions(),该groupBy数组替换了用于验证的硬编码白名单sortfield。攻击者可以向 `get_users_users` 和 `get_users_users` 传递相同的 SQL 有效载荷groupBy——sortfield验证会针对攻击者控制的列表通过,并且有效载荷会直接进入 ` get_users_users`,而ORDER BY不会被转义。
攻击流程
- 攻击者发送
groupBy: ["hostid,(SELECT IF(...))--"]并sortfield: "hostid,(SELECT IF(...))--"带有countOutput: true zbx_array_merge保留未声明的groupBy密钥applyQuerySortOptions``groupBy从→ 验证通过 构建白名单applyQuerySortField将有效载荷连接起来ORDER BYcreateSelectQueryFromParts构建最终 SQL 语句,无需转义
生成的 SQL(PostgreSQL)
02用法
03修复建议
请升级至 Zabbix 7.0.22 / 7.2.15 / 7.4.6 或更高版本。
该补丁替换了原有机制array_merge($options['groupBy'], ...),使得array_intersect($this->sortColumns, $options['groupBy'])攻击者提供的值永远不会进入白名单。此外is_string(),is_array()还添加了额外的类型检查,以增强防御深度。
04免责声明
POC:https://github.com/qucklecrabik/cve-2026-23921
此工具仅供授权的安全测试和教育用途。请仅对您拥有或已获得明确书面许可的系统使用此工具进行测试。