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 का समर्थन करें

Go JSON Decoder

Go JSON में निम्नलिखित समस्याएँ पाई गईं, हालाँकि ये अन्य भाषाओं में भी मौजूद हो सकती हैं। ये समस्याएँ इस ब्लॉग पोस्ट में प्रकाशित की गई थीं।

Go के JSON, XML, और YAML पार्सर्स में असंगतियों और असुरक्षित डिफ़ॉल्ट्स की एक लंबी श्रृंखला है जिसका दुरुपयोग प्रमाणीकरण को बायपास करने, अधिकारों को बढ़ाने, या संवेदनशील डेटा को एक्सफिल्ट्रेट करने के लिए किया जा सकता है।

(Un)Marshaling Unexpected Data

उद्देश्य उन स्ट्रक्चर्स का दुरुपयोग करना है जो हमलावर को संवेदनशील फ़ील्ड (जैसे, IsAdmin, Password) को पढ़ने/लिखने की अनुमति देते हैं।

  • Example Struct:
go
type User struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
IsAdmin  bool   `json:"-"`
}
  • सामान्य कमजोरियाँ
  1. गायब टैग (कोई टैग = फ़ील्ड डिफ़ॉल्ट रूप से अभी भी पार्स किया जाता है):
go
type User struct {
Username string
}

पेलोड:

json
{"Username": "admin"}
  1. - का गलत उपयोग:
go
type User struct {
IsAdmin bool `json:"-,omitempty"` // ❌ wrong
}

पेलोड:

json
{"-": true}

✔️ फ़ील्ड को (अन)मार्शल होने से रोकने का सही तरीका:

go
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 अंतिम फ़ील्ड लेता है।

go
json.Unmarshal([]byte(`{"action":"UserAction", "action":"AdminAction"}`), &req)
fmt.Println(req.Action) // AdminAction

अन्य पार्सर (जैसे, Java का Jackson) पहला ले सकते हैं।

2. केस असंवेदनशीलता: Go केस-असंवेदनशील है:

go
json.Unmarshal([]byte(`{"AcTiOn":"AdminAction"}`), &req)
// matches `Action` field

यहाँ तक कि यूनिकोड ट्रिक्स भी काम करते हैं:

go
json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req)

3. क्रॉस-सेवा असंगति: कल्पना करें:

  • Go में लिखा गया प्रॉक्सी
  • Python में लिखा गया AuthZ सेवा

हमलावर भेजता है:

json
{
"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 पार्सर इसे फिर भी पार्स करता है और इंजेक्ट की गई पहचान पर भरोसा करता है।

  • तैयार किया गया पेलोड:
json
{
"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

RiskFix
Unknown fieldsdecoder.DisallowUnknownFields()
Duplicate fields (JSON)❌ No fix in stdlib
Case-insensitive match❌ No fix in stdlib
XML garbage data❌ No fix in stdlib
YAML: unknown keysyaml.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 का समर्थन करें