JSON, XML & Yaml Hacking & Issues
Reading time: 4 minutes
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 edilmiştir, ancak diğer dillerde de mevcut olabilir. Bu sorunlar bu blog yazısında yayınlanmıştır.
Go’nun JSON, XML ve YAML ayrıştırıcıları, kimlik doğrulamayı atlatmak, yetkileri yükseltmek veya hassas verileri sızdırmak için kötüye kullanılabilecek uzun bir tutarsızlık ve güvensiz varsayılan ayarlar geçmişine sahiptir.
(Un)Marshaling Beklenmeyen Veriler
Amaç, bir saldırganın hassas alanları okumak/yazmak için izin veren yapıların istismar edilmesidir (örneğin, IsAdmin
, Password
).
- Örnek Yapı:
type User struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
IsAdmin bool `json:"-"`
}
- Yaygın Güvenlik Açıkları
- Eksik etiket (etiket yok = alan varsayılan olarak hala ayrıştırılır):
type User struct {
Username string
}
Yük:
{"Username": "admin"}
- Yanlış
-
kullanımı:
type User struct {
IsAdmin bool `json:"-,omitempty"` // ❌ wrong
}
Yük:
{"-": true}
✔️ Alanın (un)marshalled olmasını engellemenin doğru yolu:
type User struct {
IsAdmin bool `json:"-"`
}
Parser Farklılıkları
Amaç, farklı ayrıştırıcıların aynı yükü nasıl farklı yorumladığını istismar ederek yetkilendirmeyi atlatmaktır, örneğin:
- CVE-2017-12635: Tekrar eden anahtarlar aracılığıyla Apache CouchDB atlatması
- 2022: XML ayrıştırıcı tutarsızlığı aracılığıyla Zoom 0-tıklama RCE
- GitLab 2025 SAML atlatması aracılığıyla XML tuhaflıkları
1. Tekrar Eden 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 (örneğin, Java'nın Jackson'ı) ilk alabilir.
2. Büyük/Küçük Harf Duyarsızlığı: Go büyük/küçük harf duyarsızdır:
json.Unmarshal([]byte(`{"AcTiOn":"AdminAction"}`), &req)
// matches `Action` field
Unicode hileleri bile işe yarar:
json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req)
3. Hizmetler arası uyumsuzluk: Hayal edin:
- Go ile yazılmış bir Proxy
- Python ile yazılmış bir AuthZ servisi
Saldırgan gönderir:
{
"action": "UserAction",
"AcTiOn": "AdminAction"
}
- Python
UserAction
'ı görür, izin verir - Go
AdminAction
'ı görür, yürütür
Veri Formatı Karışıklığı (Polyglots)
Amaç, formatları (JSON/XML/YAML) karıştıran veya ayrıştırıcı hatalarında açık kalan sistemleri istismar etmektir:
- CVE-2020-16250: HashiCorp Vault, STS'nin XML yerine JSON döndürmesinin ardından JSON'u bir XML ayrıştırıcısı ile ayrıştırdı.
Saldırganın kontrol ettiği:
Accept: application/json
başlığı- JSON gövdesinin kısmi kontrolü
Go'nun XML ayrıştırıcısı yine de bunu ayrıştırdı ve enjekte edilen kimliği güvenilir buldu.
- Özel yük:
{
"action": "Action_1",
"AcTiOn": "Action_2",
"ignored": "<?xml version=\"1.0\"?><Action>Action_3</Action>"
}
Sonuç:
- Go JSON ayrıştırıcı:
Action_2
(büyük/küçük harf duyarsız + son kazanan) - YAML ayrıştırıcı:
Action_1
(büyük/küçük harf duyarlı) - XML ayrıştırıcı: dize içindeki
"Action_3"
'ü ayrıştırır
🔐 Önlemler
Risk | Çözüm |
---|---|
Bilinmeyen alanlar | decoder.DisallowUnknownFields() |
Tekrarlanan alanlar (JSON) | ❌ stdlib'de çözüm yok |
Büyük/küçük harf duyarsız eşleşme | ❌ stdlib'de çözüm yok |
XML atık veriler | ❌ stdlib'de çözüm yok |
YAML: bilinmeyen anahtarlar | yaml.KnownFields(true) |
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.