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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
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:
- Legen Sie eine
~$exploit.py
-Datei mit beliebigen Python-Befehlen ab. - 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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.