
Gravity Forms प्लगइन WordPress के लिए (संस्करण 2.9.28 तक परीक्षण किया गया) `gform_get_config` AJAX एक्शन में `form_ids` पैरामीटर के माध्यम से बिना प्रमाणीकरण के रिफ्लेक्टेड क्रॉस-साइट स्क्रिप्टिंग (XSS) के प्रति संवेदनशील है।
gform_get_config form_ids पैरामीटर के माध्यम से| फ़ील्ड | मान |
|---|---|
| प्रभावित सॉफ़्टवेयर | Gravity Forms (WordPress प्लगइन) |
| विक्रेता | Rocketgenius, Inc. |
| भेद्यता प्रकार | CWE-79: वेब पेज जनरेशन के दौरान इनपुट का अनुचित न्यूट्रलाइज़ेशन (Reflected Cross-Site Scripting) |
| CWE श्रृंखला | CWE-20 → CWE-116 → CWE-838 → CWE-79 (नीचे CWE विश्लेषण देखें) |
| प्रभावित संस्करण | 2.9.28 पर पुष्टि की गई (खोज के समय नवीनतम); पुराने संस्करण भी प्रभावित होने की संभावना |
| फिक्स्ड संस्करण | 2.9.30.1 (हॉटफिक्स) |
| CVSS 3.1 स्कोर | 6.1 (मध्यम) |
| CVSS 3.1 वेक्टर | AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N |
| प्रमाणीकरण आवश्यक | कोई नहीं (बिना प्रमाणीकरण) |
| उपयोगकर्ता इंटरैक्शन | आवश्यक (पीड़ित को हमलावर-नियंत्रित पेज पर जाना होगा या क्राफ्टेड लिंक पर क्लिक करना होगा) |
| खोजकर्ता | Anthony Cihan — Obviam |
| खोज तिथि | 2026-03-04 |
| प्रकटीकरण तिथि | 2026-03-18 |
| CVE ID | CVE-2026-4406 |
WordPress के लिए Gravity Forms प्लगइन (संस्करण 2.9.28 तक परीक्षण किया गया) gform_get_config AJAX एक्शन में form_ids पैरामीटर के माध्यम से बिना प्रमाणीकरण के reflected cross-site scripting (XSS) के प्रति संवेदनशील है। यह भेद्यता इसलिए मौजूद है क्योंकि उपयोगकर्ता द्वारा प्रदान किए गए form_ids मान बिना किसी सैनिटाइज़ेशन, एन्कोडिंग, या आउटपुट एस्केपिंग के सर्वर के HTTP प्रतिक्रिया में शब्दशः प्रतिबिंबित होते हैं। प्रतिक्रिया Content-Type: text/html; charset=UTF-8 हेडर के साथ दी जाती है, जिसके कारण ब्राउज़र प्रतिबिंबित सामग्री को HTML के रूप में पार्स और रेंडर करता है, जिसमें कोई भी इंजेक्टेड स्क्रिप्ट तत्व शामिल होता है।
एक बिना प्रमाणीकरण वाला हमलावर इस भेद्यता का फायदा उठाकर लक्षित WordPress साइट के ओरिजिन के संदर्भ में मनमाना JavaScript निष्पादित कर सकता है। चूंकि gform_get_config एक्शन के लिए एक मान्य config_nonce की आवश्यकता होती है, और यह nonce हर उस पेज के HTML स्रोत में सार्वजनिक रूप से एम्बेडेड होता है जो Gravity Forms फॉर्म लोड करता है, एक हमलावर एक्सप्लॉइट अनुरोध बनाने से पहले लक्षित साइट पर किसी भी सार्वजनिक पेज का अनुरोध करके आसानी से एक मान्य nonce प्राप्त कर सकता है।
सफल शोषण से हमलावर सत्र कुकीज़ चुरा सकता है, प्रमाणित उपयोगकर्ताओं (WordPress एडमिनिस्ट्रेटर सहित) की ओर से कार्य कर सकता है, उपयोगकर्ताओं को दुर्भावनापूर्ण साइटों पर पुनर्निर्देशित कर सकता है, पेज सामग्री को विकृत कर सकता है, या एडमिनिस्ट्रेटिव खाता निर्माण के माध्यम से स्थायी पहुंच स्थापित कर सकता है।
POST /wp-admin/admin-ajax.php
### असुरक्षित क्रिया```
gform_get_config
args POST पैरामीटर एक JSON ऑब्जेक्ट स्वीकार करता है जिसमें एक form_ids ऐरे होता है। इस ऐरे के मान बिना सैनिटाइज़ेशन के JSON प्रतिक्रिया संरचना में ऑब्जेक्ट कुंजियों के रूप में उपयोग किए जाते हैं:```json
{"form_ids":["ATTACKER_CONTROLLED_VALUE"]}
### प्रतिक्रिया व्यवहार
सर्वर `form_ids` मानों को संसाधित करता है और उन्हें प्रतिक्रिया बॉडी के अंदर JSON कुंजियों के रूप में प्रतिबिंबित करता है। प्रतिक्रिया HTML टिप्पणी मार्करों में लपेटी जाती है और `text/html` के रूप में प्रदान की जाती है:```
Content-Type: text/html; charset=UTF-8
<!-- gf:json_start -->{"success":true,"data":{"common":{"form":{"pagination":{"ATTACKER_CONTROLLED_VALUE":null}}}}}<!-- gf:json_end -->
form_ids मानों को पूर्णांक के रूप में सत्यापित, स्वच्छ या फ़िल्टर नहीं किया जाता है। सर्वर HTML टैग और इवेंट हैंडलर सहित मनमाना स्ट्रिंग सामग्री स्वीकार करता है।form_ids मान बिना HTML एंटिटी एन्कोडिंग के प्रतिक्रिया बॉडी में परावर्तित होते हैं। <, >, ", और ' जैसे वर्ण बिना संशोधन के गुजर जाते हैं।Content-Type: text/html; charset=UTF-8 के साथ प्रदान की जाती है, जो ब्राउज़र को प्रतिक्रिया बॉडी को HTML के रूप में पार्स करने का निर्देश देती है। परावर्तित मान के भीतर कोई भी HTML टैग ब्राउज़र के HTML पार्सर द्वारा तुरंत इंस्टैंशिएट और रेंडर किया जाता है।gform_get_config एक्शन के लिए आवश्यक config_nonce हर पेज पर JavaScript कॉन्फ़िगरेशन ऑब्जेक्ट (gform_theme_config) में एम्बेडेड होता है जो Gravity Forms फॉर्म लोड करता है। यह nonce सभी पेजों पर समान होता है और किसी विशिष्ट उपयोगकर्ता सत्र से बंधा नहीं होता है, जिससे इसे बिना प्रमाणीकरण वाले उपयोगकर्ताओं द्वारा आसानी से प्राप्त किया जा सकता है।यह भेद्यता कई योगदान देने वाली कमजोरियों का परिणाम है जो शोषणीय स्थिति उत्पन्न करने के लिए एक साथ जुड़ती हैं। जबकि CWE-79 CVE रिपोर्टिंग उद्देश्यों के लिए प्राथमिक वर्गीकरण है, पूरी श्रृंखला दस्तावेजित करती है कि कैसे प्रत्येक विफलता शोषण को सक्षम बनाने के लिए संयुक्त होती है।
CWE-20 CWE-116 CWE-838 CWE-79 Improper Input → Improper Encoding → Inappropriate Encoding → Cross-Site Validation or Escaping of Output for Output Context Scripting (XSS) [EXPLOITABLE] form_ids accepts Reflected values are JSON data served as Browser parses arbitrary strings not HTML-entity text/html instead of injected HTML tags instead of integers encoded in response application/json and executes JS
### CWE-20: अनुचित इनपुट सत्यापन (योगदान देने वाला)
**भूमिका:** मूल सक्षमकर्ता — दुर्भावनापूर्ण डेटा को प्रोसेसिंग पाइपलाइन में प्रवेश करने की अनुमति देता है।
`args` JSON ऑब्जेक्ट में `form_ids` पैरामीटर से संख्यात्मक फॉर्म पहचानकर्ता होने की अपेक्षा की जाती है, लेकिन यह बिना किसी सत्यापन के मनमाना स्ट्रिंग इनपुट स्वीकार करता है। न तो टाइप जाँच (`intval()`), न ही रेगेक्स फ़िल्टरिंग (`^[0-9]+$`), न ही ज्ञात फॉर्म आईडी के विरुद्ध व्हाइटलिस्ट तुलना, और न ही लंबाई प्रतिबंध लागू किए जाते हैं।
**साक्ष्य:** सर्वर बिना अस्वीकृति के HTML टैग, JavaScript इवेंट हैंडलर और मनमाना यूनिकोड युक्त `form_ids` मानों को स्वीकार और प्रोसेस करता है।```json
{"form_ids":["<svg onload=alert(1)>"]} ← Accepted
{"form_ids":["3"]} ← Expected
भूमिका: मुख्य भेद्यता — XSS स्थिति का प्रत्यक्ष कारण।
जब सर्वर form_ids मानों वाला JSON प्रतिक्रिया निर्मित करता है, तो यह आउटपुट पर HTML एंटिटी एन्कोडिंग लागू नहीं करता है। HTML में विशेष अर्थ वाले वर्ण (<, >, ", ', &) प्रतिक्रिया बॉडी में बिना संशोधित पारित हो जाते हैं। PHP फ़ंक्शन htmlspecialchars(), esc_html(), JSON_HEX_TAG के साथ wp_json_encode(), या समकक्ष आउटपुट एन्कोडिंग फ़ंक्शन form_ids मानों पर लागू नहीं किए जाते हैं, इससे पहले कि वे प्रतिक्रिया में लिखे जाएं।
साक्ष्य: शाब्दिक स्ट्रिंग <svg onload=alert(document.domain)> प्रतिक्रिया बॉडी में इनपुट के समान बाइट-दर-बाइट दिखाई देती है, न कि <svg onload=alert(document.domain)> के रूप में।
भूमिका: संदर्भ वृद्धि — डेटा प्रतिबिंब समस्या को निष्पादन योग्य कोड इंजेक्शन में बदल देती है।
प्रतिक्रिया बॉडी में JSON-संरचित डेटा होता है, लेकिन इसे Content-Type: text/html; charset=UTF-8 के साथ परोसा जाता है। यह Content-Type घोषणा ब्राउज़र के HTML पार्सर को संपूर्ण प्रतिक्रिया बॉडी को एक HTML दस्तावेज़ के रूप में संसाधित करने का निर्देश देती है। यदि प्रतिक्रिया application/json के रूप में परोसी जाती, तो ब्राउज़र प्रतिक्रिया को सादे पाठ के रूप में प्रस्तुत करता और कोई HTML पार्सिंग नहीं होती — इंजेक्ट किए गए टैग DOM तत्वों के रूप में तत्काल होने के बजाय शाब्दिक पाठ के रूप में प्रदर्शित होते।