macOS Office Sandbox Bypasses

Reading time: 5 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Word Sandbox bypass via Launch Agents

Η εφαρμογή χρησιμοποιεί ένα custom Sandbox με την άδεια com.apple.security.temporary-exception.sbpl και αυτό το custom sandbox επιτρέπει την εγγραφή αρχείων οπουδήποτε, αρκεί το όνομα του αρχείου να ξεκινά με ~$: (require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))

Επομένως, η εκμετάλλευση ήταν τόσο εύκολη όσο το να γράψετε ένα plist LaunchAgent στο ~/Library/LaunchAgents/~$escape.plist.

Δείτε την αρχική αναφορά εδώ.

Word Sandbox bypass via Login Items and 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 έτσι ώστε όταν αποσυμπιεστεί να φτάσει στον προορισμό επιμονής.

Δείτε την αρχική αναφορά εδώ.

Word Sandbox bypass via Login Items and .zshenv

(Θυμηθείτε ότι από την πρώτη εκμετάλλευση, το Word μπορεί να γράψει αυθαίρετα αρχεία των οποίων το όνομα ξεκινά με ~$).

Ωστόσο, η προηγούμενη τεχνική είχε έναν περιορισμό, αν ο φάκελος ~/Library/LaunchAgents υπάρχει επειδή κάποιο άλλο λογισμικό τον δημιούργησε, θα αποτύχει. Έτσι, ανακαλύφθηκε μια διαφορετική αλυσίδα Login Items για αυτό.

Ένας επιτιθέμενος θα μπορούσε να δημιουργήσει τα αρχεία .bash_profile και .zshenv με το payload για εκτέλεση και στη συνέχεια να τα zip και να γράψει το zip στο φάκελο του θύματος: ~/~$escape.zip.

Στη συνέχεια, προσθέστε το zip αρχείο στα Login Items και στη συνέχεια την εφαρμογή Terminal. Όταν ο χρήστης ξανασυνδεθεί, το zip αρχείο θα αποσυμπιεστεί στο φάκελο του χρήστη, αντικαθιστώντας .bash_profile και .zshenv και επομένως, το τερματικό θα εκτελέσει ένα από αυτά τα αρχεία (ανάλογα με το αν χρησιμοποιείται bash ή zsh).

Δείτε την αρχική αναφορά εδώ.

Word Sandbox Bypass with Open and env variables

Από τις διαδικασίες που είναι sandboxed είναι ακόμα δυνατό να καλέσετε άλλες διαδικασίες χρησιμοποιώντας το open utility. Επιπλέον, αυτές οι διαδικασίες θα εκτελούνται μέσα στο δικό τους sandbox.

Ανακαλύφθηκε ότι το open utility έχει την επιλογή --env για να εκτελεί μια εφαρμογή με συγκεκριμένες env μεταβλητές. Επομένως, ήταν δυνατό να δημιουργηθεί το .zshenv αρχείο μέσα σε έναν φάκελο μέσα στο sandbox και να χρησιμοποιηθεί το open με --env ρυθμίζοντας τη μεταβλητή HOME σε αυτόν τον φάκελο ανοίγοντας την εφαρμογή Terminal, η οποία θα εκτελέσει το αρχείο .zshenv (για κάποιο λόγο ήταν επίσης απαραίτητο να ρυθμιστεί η μεταβλητή __OSINSTALL_ENVIROMENT).

Δείτε την αρχική αναφορά εδώ.

Word Sandbox Bypass with Open and 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.

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks