JSON, XML & Yaml Hacking & Issues
Reading time: 4 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Go JSON Decoder
Die folgenden Probleme wurden im Go JSON festgestellt, obwohl sie auch in anderen Sprachen vorhanden sein könnten. Diese Probleme wurden in diesem Blogbeitrag veröffentlicht.
Go’s JSON-, XML- und YAML-Parser haben eine lange Liste von Inkonsistenzen und unsicheren Standardeinstellungen, die ausgenutzt werden können, um Authentifizierung zu umgehen, Berechtigungen zu eskalieren oder sensible Daten zu exfiltrieren.
(Un)Marshaling Unerwarteter Daten
Das Ziel ist es, Strukturen auszunutzen, die es einem Angreifer ermöglichen, sensible Felder zu lesen/schreiben (z. B. IsAdmin
, Password
).
- Beispielstruktur:
type User struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
IsAdmin bool `json:"-"`
}
- Häufige Schwachstellen
- Fehlendes Tag (kein Tag = Feld wird standardmäßig weiterhin analysiert):
type User struct {
Username string
}
Nutzlast:
{"Username": "admin"}
- Falsche Verwendung von
-
:
type User struct {
IsAdmin bool `json:"-,omitempty"` // ❌ wrong
}
Nutzlast:
{"-": true}
✔️ Richtige Methode, um ein Feld vom (De)Serialisieren abzuhalten:
type User struct {
IsAdmin bool `json:"-"`
}
Parser-Differenzen
Das Ziel ist es, die Autorisierung zu umgehen, indem man ausnutzt, wie verschiedene Parser dasselbe Payload unterschiedlich interpretieren, wie in:
- CVE-2017-12635: Apache CouchDB Umgehung über doppelte Schlüssel
- 2022: Zoom 0-Klick RCE über XML-Parser-Inkonsistenz
- GitLab 2025 SAML-Umgehung über XML-Eigenheiten
1. Doppelte Felder:
Go's encoding/json
nimmt das letzte Feld.
json.Unmarshal([]byte(`{"action":"UserAction", "action":"AdminAction"}`), &req)
fmt.Println(req.Action) // AdminAction
Andere Parser (z. B. Javas Jackson) können das erste nehmen.
2. Groß-/Kleinschreibung: Go ist nicht groß-/kleinschreibungsempfindlich:
json.Unmarshal([]byte(`{"AcTiOn":"AdminAction"}`), &req)
// matches `Action` field
Sogar Unicode-Tricks funktionieren:
json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req)
3. Cross-Service-Mismatch: Stellen Sie sich vor:
- Proxy, geschrieben in Go
- AuthZ-Dienst, geschrieben in Python
Angreifer sendet:
{
"action": "UserAction",
"AcTiOn": "AdminAction"
}
- Python sieht
UserAction
, erlaubt es - Go sieht
AdminAction
, führt es aus
Datenformatverwirrung (Polyglots)
Das Ziel ist es, Systeme auszunutzen, die Formate (JSON/XML/YAML) mischen oder bei Parserfehlern offen bleiben, wie z.B.:
- CVE-2020-16250: HashiCorp Vault analysierte JSON mit einem XML-Parser, nachdem STS JSON anstelle von XML zurückgegeben hatte.
Der Angreifer kontrolliert:
- Den
Accept: application/json
Header - Teilweise Kontrolle des JSON-Körpers
Der XML-Parser von Go analysierte es trotzdem und vertraute der injizierten Identität.
- Ausgeklügelte Payload:
{
"action": "Action_1",
"AcTiOn": "Action_2",
"ignored": "<?xml version=\"1.0\"?><Action>Action_3</Action>"
}
- Go JSON Parser:
Action_2
(nicht groß-/kleinschreibungsempfindlich + letzter gewinnt) - YAML Parser:
Action_1
(groß-/kleinschreibungsempfindlich) - XML Parser: parst
"Action_3"
innerhalb des Strings
🔐 Minderung
Risiko | Lösung |
---|---|
Unbekannte Felder | decoder.DisallowUnknownFields() |
Duplizierte Felder (JSON) | ❌ Keine Lösung in der Standardbibliothek |
Groß-/Kleinschreibungsempfindliche Übereinstimmung | ❌ Keine Lösung in der Standardbibliothek |
XML-Mülldaten | ❌ Keine Lösung in der Standardbibliothek |
YAML: unbekannte Schlüssel | yaml.KnownFields(true) |
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.