JSON, XML & Yaml Hacking & Issues
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
Go JSON Decoder
Go JSON में निम्नलिखित समस्याएँ पाई गईं, हालाँकि ये अन्य भाषाओं में भी मौजूद हो सकती हैं। ये समस्याएँ इस ब्लॉग पोस्ट में प्रकाशित की गई थीं।
Go के JSON, XML, और YAML पार्सर्स में असंगतियों और असुरक्षित डिफ़ॉल्ट्स की एक लंबी श्रृंखला है जिसका दुरुपयोग प्रमाणीकरण को बायपास करने, अधिकारों को बढ़ाने, या संवेदनशील डेटा को एक्सफिल्ट्रेट करने के लिए किया जा सकता है।
(Un)Marshaling Unexpected Data
उद्देश्य उन स्ट्रक्चर्स का दुरुपयोग करना है जो हमलावर को संवेदनशील फ़ील्ड (जैसे, IsAdmin
, Password
) को पढ़ने/लिखने की अनुमति देते हैं।
- Example Struct:
type User struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
IsAdmin bool `json:"-"`
}
- सामान्य कमजोरियाँ
- गायब टैग (कोई टैग = फ़ील्ड डिफ़ॉल्ट रूप से अभी भी पार्स किया जाता है):
type User struct {
Username string
}
पेलोड:
{"Username": "admin"}
-
का गलत उपयोग:
type User struct {
IsAdmin bool `json:"-,omitempty"` // ❌ wrong
}
पेलोड:
{"-": true}
✔️ फ़ील्ड को (अन)मार्शल होने से रोकने का सही तरीका:
type User struct {
IsAdmin bool `json:"-"`
}
Parser Differentials
उद्देश्य यह है कि विभिन्न पार्सर्स कैसे समान पेलोड को अलग-अलग तरीके से व्याख्या करते हैं, इसका लाभ उठाकर प्राधिकरण को बायपास किया जाए, जैसे कि:
- CVE-2017-12635: डुप्लिकेट कुंजी के माध्यम से Apache CouchDB बायपास
- 2022: XML पार्सर असंगति के माध्यम से Zoom 0-click RCE
- GitLab 2025 SAML बायपास XML विशेषताओं के माध्यम से
1. डुप्लिकेट फ़ील्ड:
Go का encoding/json
अंतिम फ़ील्ड लेता है।
json.Unmarshal([]byte(`{"action":"UserAction", "action":"AdminAction"}`), &req)
fmt.Println(req.Action) // AdminAction
अन्य पार्सर (जैसे, Java का Jackson) पहला ले सकते हैं।
2. केस असंवेदनशीलता: Go केस-असंवेदनशील है:
json.Unmarshal([]byte(`{"AcTiOn":"AdminAction"}`), &req)
// matches `Action` field
यहाँ तक कि यूनिकोड ट्रिक्स भी काम करते हैं:
json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req)
3. क्रॉस-सेवा असंगति: कल्पना करें:
- Go में लिखा गया प्रॉक्सी
- Python में लिखा गया AuthZ सेवा
हमलावर भेजता है:
{
"action": "UserAction",
"AcTiOn": "AdminAction"
}
- Python
UserAction
को देखता है, इसे अनुमति देता है - Go
AdminAction
को देखता है, इसे निष्पादित करता है
डेटा फ़ॉर्मेट भ्रम (Polyglots)
लक्ष्य उन सिस्टमों का शोषण करना है जो फ़ॉर्मेट (JSON/XML/YAML) को मिलाते हैं या पार्सर त्रुटियों पर खुला छोड़ देते हैं जैसे:
- CVE-2020-16250: HashiCorp Vault ने JSON को XML पार्सर के साथ पार्स किया जब STS ने XML के बजाय JSON लौटाया।
हमलावर नियंत्रित करता है:
Accept: application/json
हेडर- JSON बॉडी का आंशिक नियंत्रण
Go का XML पार्सर इसे फिर भी पार्स करता है और इंजेक्ट की गई पहचान पर भरोसा करता है।
- तैयार किया गया पेलोड:
{
"action": "Action_1",
"AcTiOn": "Action_2",
"ignored": "<?xml version=\"1.0\"?><Action>Action_3</Action>"
}
Result:
- Go JSON parser:
Action_2
(केस-इंसेंसिटिव + अंतिम जीतता है) - YAML parser:
Action_1
(केस-सेंसिटिव) - XML parser: parses
"Action_3"
inside the string
🔐 Mitigations
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) |
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।