
CVE-2026-9848 एक अनप्रमाणित SQL इंजेक्शन (SQLi) भेद्यता है जो WordPress के लिए WP Ticket (कस्टमर सपोर्ट टिकट सिस्टम और हेल्पडेस्क) प्लगइन के संस्करण 6.0.4 तक (और सहित) को प्रभावित करती है।
CVE-2026-9848, WordPress के WP Ticket (Customer Support Ticket System & Helpdesk) प्लगइन के संस्करण 6.0.4 तक को प्रभावित करने वाली एक बिना प्रमाणीकरण वाली SQL Injection (SQLi) भेद्यता है। यह दोष इसलिए उत्पन्न होता है क्योंकि प्लगइन WordPress के search पैरामीटर s को बिना $wpdb->prepare() या उचित escaping के सीधे UNION subquery में SQL LIKE क्लॉज में जोड़ देता है। परिणामस्वरूप, एक दूरस्थ हमलावर प्रमाणीकरण के बिना डेटाबेस क्वेरी में हेरफेर कर सकता है और संवेदनशील जानकारी निकाल सकता है।
| गुण | मान |
|---|---|
| उत्पाद | WP Ticket (Customer Support Ticket System & Helpdesk) |
| प्रभावित संस्करण | ≤ 6.0.4 |
| सुधारित संस्करण | 6.0.5 |
| प्रभावित घटक | फ्रंट-एंड खोज (s पैरामीटर) |
प्लगइन WordPress के posts_request फ़िल्टर को wp_ticket_com_posts_request() के माध्यम से हुक करता है। बिना प्रमाणीकरण वाली फ्रंट-एंड खोज के दौरान, यह अंततः emd_author_search_results() को कॉल करता है, जो search पैरामीटर को पढ़ता है:
$query->query_vars['s']
इस चरण में, WordPress पहले ही wp_unslash() का उपयोग करके magic quotes को हटा चुका होता है। SQL स्टेटमेंट को सुरक्षित रूप से parameterize करने के बजाय, प्लगइन कच्चे उपयोगकर्ता इनपुट को UNION subquery के भीतर SQL LIKE क्लॉज में जोड़ देता है।
संकल्पनात्मक रूप से:
User searches website
│
▼
Search parameter "s" received
│
▼
Plugin concatenates value into SQL query
│
▼
No $wpdb->prepare()
│
▼
Database executes modified query
यह भेद्यता इसलिए मौजूद है क्योंकि अविश्वसनीय इनपुट को parameterized queries के बजाय string concatenation का उपयोग करके SQL में शामिल किया जाता है।
भेद्यता का मूल प्लगइन द्वारा अपनी मुख्य SQL क्वेरी बनाने के तरीके में है:
sql
SELECT * FROM wp_posts
WHERE post_title LIKE '%[attacker's input]%'
UNION [attacker's injected SQL]
Attacker
│
▼
Submits a crafted search request
│
▼
WordPress passes the "s" parameter
│
▼
WP Ticket builds SQL query using concatenation
│
▼
Database executes injected SQL
│
▼
Sensitive database information may be disclosed
एक सामान्य आगंतुक वेबसाइट पर खोज करता है:
GET /?s=printer
प्लगइन s पैरामीटर के मान को एक SQL क्वेरी में शामिल करता है जो टिकट से संबंधित जानकारी खोजती है।
चूंकि प्लगइन search मान को parameterized queries का उपयोग करने के बजाय सीधे SQL स्टेटमेंट में जोड़ता है, एक विशेष रूप से तैयार किया गया search अनुरोध इच्छित SQL तर्क को बदल सकता है। एक बिना प्रमाणीकरण वाला हमलावर इस व्यवहार का फायदा उठाकर WordPress डेटाबेस से उपयोगकर्ता नाम या अन्य संग्रहीत डेटा जैसी संवेदनशील जानकारी प्राप्त कर सकता है। सटीक परिणाम एप्लिकेशन के कॉन्फ़िगरेशन और डेटाबेस अनुमतियों पर निर्भर करता है।
अब, एक हमलावर अपना स्वयं का SQL इंजेक्ट करने के लिए s पैरामीटर में हेरफेर कर सकता है। उदाहरण के लिए, वे निम्न दर्ज कर सकते हैं:
' UNION SELECT user_login, user_pass FROM wp_users -- -
इससे अंतिम क्वेरी इस प्रकार दिखेगी:
SELECT * FROM wp_posts WHERE post_title LIKE '%' UNION SELECT user_login, user_pass FROM wp_users -- -%'
सफल शोषण से एक हमलावर निम्न कार्य कर सकता है:
| मीट्रिक | स्कोर |
|---|---|
| CVSS v3.1 (Wordfence CNA) | 7.5 (उच्च) |
NVD ने अभी तक अपना स्वयं का CVSS मूल्यांकन प्रकाशित नहीं किया है।
ध्यान दें: विक्रेता ने पूर्ण भेद्य कार्यान्वयन प्रकाशित नहीं किया है। निम्नलिखित भेद्य कोडिंग पैटर्न को दर्शाता है।
$search = $query->query_vars['s'];
$sql = "
SELECT *
FROM tickets
WHERE title LIKE '%" . $search . "%'
";
$wpdb->get_results($sql);
SQL स्टेटमेंट उपयोगकर्ता-नियंत्रित इनपुट को सीधे क्वेरी स्ट्रिंग में जोड़कर बनाया जाता है। चूंकि इनपुट को parameterized या escaped नहीं किया जाता है, यह SQL स्टेटमेंट की संरचना को बदल सकता है।
$search = $query->query_vars['s'];
$sql = $wpdb->prepare(
"SELECT *
FROM tickets
WHERE title LIKE %s",
'%' . $search . '%'
);
$wpdb->get_results($sql);
$wpdb->prepare() का उपयोग SQL सिंटैक्स को उपयोगकर्ता इनपुट से अलग करता है। डेटाबेस search मान को निष्पादन योग्य SQL के बजाय डेटा के रूप में मानता है, जिससे हमलावर क्वेरी संरचना में बदलाव नहीं कर पाते। WP Ticket 6.0.5 में आधिकारिक सुधार भेद्य क्वेरी निर्माण को उचित रूप से parameterized कार्यान्वयन से बदल देता है।