# macOS Office Sandbox Bypasses {{#include ../../../../../banners/hacktricks-training.md}} ### Παράκαμψη Sandbox του Word μέσω Launch Agents Η εφαρμογή χρησιμοποιεί ένα **προσαρμοσμένο Sandbox** χρησιμοποιώντας την εξουσιοδότηση **`com.apple.security.temporary-exception.sbpl`** και αυτό το προσαρμοσμένο sandbox επιτρέπει τη γραφή αρχείων οπουδήποτε, αρκεί το όνομα του αρχείου να ξεκινά με `~$`: `(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))` Επομένως, η παράκαμψη ήταν τόσο εύκολη όσο **η γραφή ενός `plist`** LaunchAgent στο `~/Library/LaunchAgents/~$escape.plist`. Δείτε την [**αρχική αναφορά εδώ**](https://www.mdsec.co.uk/2018/08/escaping-the-sandbox-microsoft-office-on-macos/). ### Παράκαμψη Sandbox του Word μέσω Login Items και zip Θυμηθείτε ότι από την πρώτη παράκαμψη, το Word μπορεί να γράψει αυθαίρετα αρχεία των οποίων το όνομα ξεκινά με `~$`, αν και μετά την επιδιόρθωση της προηγούμενης ευπάθειας δεν ήταν δυνατή η γραφή στο `/Library/Application Scripts` ή στο `/Library/LaunchAgents`. Ανακαλύφθηκε ότι από μέσα στο sandbox είναι δυνατό να δημιουργηθεί ένα **Login Item** (εφαρμογές που θα εκτελούνται όταν ο χρήστης συνδέεται). Ωστόσο, αυτές οι εφαρμογές **δεν θα εκτελούνται εκτός αν** είναι **notarized** και **δεν είναι δυνατή η προσθήκη args** (οπότε δεν μπορείτε απλά να εκτελέσετε ένα reverse shell χρησιμοποιώντας **`bash`**). Από την προηγούμενη παράκαμψη Sandbox, η Microsoft απενεργοποίησε την επιλογή να γράφει αρχεία στο `~/Library/LaunchAgents`. Ωστόσο, ανακαλύφθηκε ότι αν βάλετε ένα **zip αρχείο ως Login Item**, το `Archive Utility` θα **αποσυμπιέσει** απλώς το αρχείο στην τρέχουσα τοποθεσία του. Έτσι, επειδή από προεπιλογή ο φάκελος `LaunchAgents` από το `~/Library` δεν δημιουργείται, ήταν δυνατό να **zip ένα plist στο `LaunchAgents/~$escape.plist`** και να **τοποθετήσετε** το zip αρχείο στο **`~/Library`**, έτσι ώστε όταν αποσυμπιεστεί να φτάσει στον προορισμό επιμονής. Δείτε την [**αρχική αναφορά εδώ**](https://objective-see.org/blog/blog_0x4B.html). ### Παράκαμψη Sandbox του Word μέσω Login Items και .zshenv (Θυμηθείτε ότι από την πρώτη παράκαμψη, το Word μπορεί να γράψει αυθαίρετα αρχεία των οποίων το όνομα ξεκινά με `~$`). Ωστόσο, η προηγούμενη τεχνική είχε έναν περιορισμό, αν ο φάκελος **`~/Library/LaunchAgents`** υπάρχει επειδή κάποιο άλλο λογισμικό τον δημιούργησε, θα αποτύχει. Έτσι, ανακαλύφθηκε μια διαφορετική αλυσίδα Login Items για αυτό. Ένας επιτιθέμενος θα μπορούσε να δημιουργήσει τα αρχεία **`.bash_profile`** και **`.zshenv`** με το payload για εκτέλεση και στη συνέχεια να τα zip και **να γράψει το zip στο φάκελο του θύματος**: **`~/~$escape.zip`**. Στη συνέχεια, προσθέστε το zip αρχείο στα **Login Items** και στη συνέχεια την εφαρμογή **`Terminal`**. Όταν ο χρήστης ξανασυνδεθεί, το zip αρχείο θα αποσυμπιεστεί στο φάκελο του χρήστη, αντικαθιστώντας **`.bash_profile`** και **`.zshenv`** και επομένως, το τερματικό θα εκτελέσει ένα από αυτά τα αρχεία (ανάλογα με το αν χρησιμοποιείται bash ή zsh). Δείτε την [**αρχική αναφορά εδώ**](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c). ### Παράκαμψη Sandbox του Word με Open και env μεταβλητές Από τις διαδικασίες που είναι σε sandbox είναι ακόμα δυνατό να προσκαλέσετε άλλες διαδικασίες χρησιμοποιώντας το **`open`** utility. Επιπλέον, αυτές οι διαδικασίες θα εκτελούνται **μέσα στο δικό τους sandbox**. Ανακαλύφθηκε ότι το open utility έχει την επιλογή **`--env`** για να εκτελεί μια εφαρμογή με **συγκεκριμένες env** μεταβλητές. Επομένως, ήταν δυνατό να δημιουργηθεί το **`.zshenv` αρχείο** μέσα σε έναν φάκελο **μέσα** στο **sandbox** και να χρησιμοποιηθεί το `open` με `--env` ρυθμίζοντας τη **μεταβλητή `HOME`** σε αυτόν τον φάκελο ανοίγοντας την εφαρμογή `Terminal`, η οποία θα εκτελέσει το αρχείο `.zshenv` (για κάποιο λόγο ήταν επίσης απαραίτητο να ρυθμιστεί η μεταβλητή `__OSINSTALL_ENVIROMENT`). Δείτε την [**αρχική αναφορά εδώ**](https://perception-point.io/blog/technical-analysis-of-cve-2021-30864/). ### Παράκαμψη Sandbox του Word με Open και stdin Το **`open`** utility υποστήριξε επίσης την παράμετρο **`--stdin`** (και μετά την προηγούμενη παράκαμψη δεν ήταν πλέον δυνατή η χρήση του `--env`). Το θέμα είναι ότι ακόμη και αν το **`python`** ήταν υπογεγραμμένο από την Apple, **δεν θα εκτελέσει** ένα σενάριο με το **`quarantine`** χαρακτηριστικό. Ωστόσο, ήταν δυνατό να του περάσετε ένα σενάριο από stdin, έτσι ώστε να μην ελέγξει αν ήταν σε καραντίνα ή όχι: 1. Ρίξτε ένα **`~$exploit.py`** αρχείο με αυθαίρετες εντολές Python. 2. Εκτελέστε _open_ **`–stdin='~$exploit.py' -a Python`**, το οποίο εκτελεί την εφαρμογή Python με το ρίχτηκε αρχείο μας να χρησιμεύει ως τυπική είσοδος. Η Python εκτελεί ευτυχώς τον κώδικά μας, και καθώς είναι μια παιδική διαδικασία του _launchd_, δεν υπόκειται στους κανόνες sandbox του Word. {{#include ../../../../../banners/hacktricks-training.md}}