
Groundhogg WordPress प्लगइन में प्रतिबिंबित XSS भेद्यता के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो तैयार किए गए URL पैरामीटर के माध्यम से बिना प्रमाणीकरण के स्क्रिप्ट इंजेक्शन प्रदर्शित करता है।
वर्डप्रेस प्लगइन
घटक का नाम WordPress CRM, Email & Marketing Automation for WordPress | Award Winner — Groundhogg
संवेदनशील संस्करण <= 3.7.3.2
घटक स्लग groundhogg
घटक लिंक https://wordpress.org/plugins/groundhogg/
भेद्यता वर्ग A3: इंजेक्शन
भेद्यता प्रकार क्रॉस साइट स्क्रिप्टिंग (XSS)
बिना प्रमाणीकरण के
Groundhogg प्लगइन के संस्करण 3.7.3.3 और उससे नीचे में URL पैरामीटर के अपर्याप्त इनपुट सत्यापन और एस्केप प्रोसेसिंग के कारण एक रिफ्लेक्टेड क्रॉस साइट स्क्रिप्टिंग भेद्यता मौजूद है। यह भेद्यता प्लगइन डैशबोर्ड के 'Contacts', 'Funnels', और 'Logs' मेनू में खोज फ़िल्टरिंग कार्यक्षमता का उपयोग करते समय उत्पन्न होती है।
इस भेद्यता के माध्यम से, एक बिना प्रमाणीकरण वाला उपयोगकर्ता दुर्भावनापूर्ण स्क्रिप्ट वाला URL बना सकता है, और जब अन्य उपयोगकर्ता इस URL तक पहुँचते हैं, तो स्क्रिप्ट उनके ब्राउज़र में निष्पादित होती है, जिससे कुकी जानकारी का रिसाव हो सकता है। यह एक गंभीर सुरक्षा जोखिम पैदा करता है क्योंकि इसका विशेष रूप से व्यवस्थापक विशेषाधिकार वाले उपयोगकर्ताओं के सत्रों को हाईजैक करने के लिए शोषण किया जा सकता है।
'Groundhogg' प्लगइन <=3.7.3.2 सक्रिय के साथ एक WordPress साइट तैयार करें।
चूंकि यह प्लगइन REST API का उपयोग करता है, इसलिए Permalink को
Post nameपर सेट किया जाना चाहिए।
इसके बाद, नीचे दिए गए प्रत्येक मेनू के लिंक तक पहुँचने से एक रिफ्लेक्टेड XSS भेद्यता ट्रिगर होगी।
Contacts मेनू(/wp-admin/admin.php?page=gh_contacts)
http://localhost:8080/wp-admin/admin.php?page=gh_contacts&filters=W1t7ImlkIjoiIiwidHlwZSI6ImZpcnN0X25hbWUiLCJjb21wYXJlIjoiZXF1YWxzIiwidmFsdWUiOiI8aW1nIHNyYz1cInhcIiBvbmVycm9yPVwiYWxlcnQoZG9jdW1lbnQuY29va2llKVwiPiJ9XV0

Funnels मेनू(/wp-admin/admin.php?page=gh_funnels)
इस मेनू में XSS भेद्यता को पुनरुत्पादित करने के लिए, कम से कम 1 Funnel मौजूद होना चाहिए।
http://localhost:8080/wp-admin/admin.php?page=gh_funnels&status=inactive&include_filters=W1t7ImlkIjoiMTBjY2FmZmUtZjE0YS00MTg5LWE0MzctYjA2MTFhMTQ2ZDk1IiwidHlwZSI6InRpdGxlIiwidmFsdWUiOiI8aW1nIHNyYz1cInhcIiBvbmVycm9yPVwiYWxlcnQoZG9jdW1lbnQuY29va2llKVwiPiIsImNvbXBhcmUiOiJlcXVhbHMifV1d

Logs मेनू(/admin.php?page=gh_events)
http://localhost:8080/wp-admin/admin.php?page=gh_events&tab=emails&include_filters=W1t7ImlkIjoiIiwidHlwZSI6ImZyb21fYWRkcmVzcyIsInZhbHVlIjoiPGltZyBzcmM9XCJ4XCIgb25lcnJvcj1cImFsZXJ0KGRvY3VtZW50LmNvb2tpZSlcIj4iLCJjb21wYXJlIjoiZXF1YWxzIn1dXQ

Groundhogg प्लगइन डैशबोर्ड के 'Contacts', 'Funnels', और 'Logs' मेनू में फ़िल्टरिंग खोज करते समय, फ़िल्टरिंग सेटिंग्स को URL पैरामीटर के रूप में पारित करने से पहले Base64 एन्कोड किया जाता है।
उदाहरण के लिए, 'Contacts' मेनू में फ़िल्टरिंग खोज सेट करते समय जहाँ 'First Name' को 'Test' पर सेट किया गया है, URL पैरामीटर filters को निम्नलिखित डेटा प्राप्त होता है:
W1t7ImlkIjoiMjM3NzdjMGItYTQ1Ni00M2JlLWExZGMtODkzN2E1MDk0M2I5IiwidHlwZSI6ImZpcnN0X25hbWUiLCJjb21wYXJlIjoiZXF1YWxzIiwidmFsdWUiOiJUZXN0In1dXQ

जब URL पैरामीटर filters में दर्ज मान को Base64 डिकोड किया जाता है, तो आप निम्नलिखित डेटा देख सकते हैं।
[[{"id":"23777c0b-a456-43be-a1dc-8937a50943b9","type":"first_name","compare":"equals","value":"Test"}]]

जब एक फ़िल्टरिंग खोज का अनुरोध किया जाता है, तो /wp-content/plugins/groundhogg/admin/contacts/contacts-page.php फ़ाइल में Contacts_Page वर्ग का scripts फ़ंक्शन निष्पादित होता है।
इस बिंदु पर, Base64 एन्कोडेड URL पैरामीटर filters को डिकोड किया जाता है और HTTP प्रतिक्रिया के Javascript क्षेत्र में ContactSearch चर में पारित किया जाता है।

इसलिए, आप सत्यापित कर सकते हैं कि HTTP प्रतिक्रिया डेटा में, URL पैरामीटर filters को पारित Base64 एन्कोडेड डेटा को वितरित करने से पहले डिकोड किया जाता है।

इसके बाद, डिकोड किया गया डेटा JavaScript तर्क के माध्यम से फ़िल्टरिंग खोज परिणाम प्रदर्शित करने वाले DOM तत्वों में सीधे डाला जाता है।

इसके माध्यम से, PoC में दर्ज फ़िल्टरिंग खोज शब्द (<img src="x" onerror="alert(document.cookie)">) को एस्केप प्रोसेसिंग के बिना Javascript कोड में एक चर के रूप में पारित किया जाता है और क्लाइंट तर्क द्वारा DOM तत्वों में डाला और निष्पादित किया जाता है।


परिणामस्वरूप, फ़िल्टरिंग खोज डेटा की अपर्याप्त एस्केप प्रोसेसिंग के कारण, दुर्भावनापूर्ण स्क्रिप्ट वाले मान सीधे निष्पादित किए जा सकते हैं, और यह भेद्यता सभी 'Contacts', 'Funnels', और 'Logs' मेनू में समान तरीके से उत्पन्न होती है।