macOS Office Sandbox Bypasses

Reading time: 4 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks

Word Sandbox-Bypass über Launch Agents

Die Anwendung verwendet eine benutzerdefinierte Sandbox mit der Berechtigung com.apple.security.temporary-exception.sbpl und diese benutzerdefinierte Sandbox erlaubt das Schreiben von Dateien überall, solange der Dateiname mit ~$ beginnt: (require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))

Daher war das Entkommen so einfach wie das Schreiben eines plist LaunchAgent in ~/Library/LaunchAgents/~$escape.plist.

Überprüfen Sie den originalen Bericht hier.

Word Sandbox-Bypass über Login Items und zip

Denken Sie daran, dass Word von der ersten Umgehung an beliebige Dateien schreiben kann, deren Name mit ~$ beginnt, obwohl es nach dem Patch der vorherigen Schwachstelle nicht möglich war, in /Library/Application Scripts oder in /Library/LaunchAgents zu schreiben.

Es wurde entdeckt, dass es innerhalb der Sandbox möglich ist, ein Login Item (Apps, die beim Anmelden des Benutzers ausgeführt werden) zu erstellen. Diese Apps werden jedoch nicht ausgeführt, es sei denn, sie sind notarisiert und es ist nicht möglich, Argumente hinzuzufügen (Sie können also nicht einfach eine Reverse-Shell mit bash ausführen).

Von der vorherigen Sandbox-Umgehung hat Microsoft die Option deaktiviert, Dateien in ~/Library/LaunchAgents zu schreiben. Es wurde jedoch entdeckt, dass, wenn Sie eine Zip-Datei als Login Item hinzufügen, das Archive Utility sie einfach entpackt an ihrem aktuellen Standort. Da der Ordner LaunchAgents von ~/Library standardmäßig nicht erstellt wird, war es möglich, eine plist in LaunchAgents/~$escape.plist zu zippen und die Zip-Datei in ~/Library zu platzieren, sodass sie beim Dekomprimieren das Ziel für die Persistenz erreicht.

Überprüfen Sie den originalen Bericht hier.

Word Sandbox-Bypass über Login Items und .zshenv

(Denken Sie daran, dass Word von der ersten Umgehung an beliebige Dateien schreiben kann, deren Name mit ~$ beginnt).

Die vorherige Technik hatte jedoch eine Einschränkung: Wenn der Ordner ~/Library/LaunchAgents existiert, weil eine andere Software ihn erstellt hat, würde es fehlschlagen. Daher wurde eine andere Kette von Login Items für dies entdeckt.

Ein Angreifer könnte die Dateien .bash_profile und .zshenv mit der Payload erstellen und sie dann zippen und die Zip-Datei im Benutzerordner des Opfers schreiben: ~/~$escape.zip.

Dann fügen Sie die Zip-Datei zu den Login Items hinzu und dann die Terminal-App. Wenn der Benutzer sich erneut anmeldet, wird die Zip-Datei im Benutzerverzeichnis entpackt, wodurch .bash_profile und .zshenv überschrieben werden und daher wird das Terminal eine dieser Dateien ausführen (je nachdem, ob bash oder zsh verwendet wird).

Überprüfen Sie den originalen Bericht hier.

Word Sandbox-Bypass mit Open und Umgebungsvariablen

Von sandboxed Prozessen ist es weiterhin möglich, andere Prozesse mit dem open-Dienstprogramm aufzurufen. Darüber hinaus werden diese Prozesse innerhalb ihrer eigenen Sandbox ausgeführt.

Es wurde entdeckt, dass das Open-Dienstprogramm die Option --env hat, um eine App mit spezifischen Umgebungsvariablen auszuführen. Daher war es möglich, die .zshenv-Datei innerhalb eines Ordners innerhalb der Sandbox zu erstellen und open mit --env zu verwenden, um die HOME-Variable auf diesen Ordner zu setzen, der die Terminal-App öffnet, die die .zshenv-Datei ausführt (aus irgendeinem Grund war es auch notwendig, die Variable __OSINSTALL_ENVIROMENT zu setzen).

Überprüfen Sie den originalen Bericht hier.

Word Sandbox-Bypass mit Open und stdin

Das open-Dienstprogramm unterstützte auch den Parameter --stdin (und nach der vorherigen Umgehung war es nicht mehr möglich, --env zu verwenden).

Die Sache ist, dass selbst wenn python von Apple signiert wurde, es kein Skript mit dem quarantine-Attribut ausführen wird. Es war jedoch möglich, ihm ein Skript von stdin zu übergeben, sodass nicht überprüft wird, ob es quarantiniert war oder nicht:

  1. Legen Sie eine ~$exploit.py-Datei mit beliebigen Python-Befehlen ab.
  2. Führen Sie open –stdin='~$exploit.py' -a Python aus, was die Python-App mit unserer abgelegten Datei als Standard-Eingabe ausführt. Python führt unseren Code gerne aus, und da es sich um einen Kindprozess von launchd handelt, ist es nicht an die Sandbox-Regeln von Word gebunden.

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks