macOS Office Sandbox Bypasses
Sandbox-Bypass mit Word ü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 Umgehen so einfach wie das Schreiben eines plist
LaunchAgents in ~/Library/LaunchAgents/~$escape.plist
.
Überprüfen Sie den ursprünglichen Bericht hier.
Sandbox-Bypass mit Word über Login-Elemente und zip
Denken Sie daran, dass Word nach der ersten Umgehung beliebige Dateien schreiben kann, deren Name mit ~$
beginnt, obwohl es nach dem Patch der vorherigen Schwachstelle nicht mehr 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-Element (Apps, die ausgeführt werden, wenn sich der Benutzer anmeldet) zu erstellen. Diese Apps werden jedoch nicht ausgeführt, es sei denn, sie sind notarized, und es ist nicht möglich, Argumente hinzuzufügen (Sie können also nicht einfach eine Reverse-Shell mit bash
ausführen).
Nach der vorherigen Sandbox-Umgehung hat Microsoft die Option zum Schreiben von Dateien in ~/Library/LaunchAgents
deaktiviert. Es wurde jedoch entdeckt, dass, wenn Sie eine Zip-Datei als Login-Element verwenden, das Archive-Dienstprogramm
sie einfach an ihrem aktuellen Speicherort entpackt. Da der Ordner LaunchAgents
im Standardfall nicht im Ordner ~/Library
erstellt wird, war es möglich, eine plist in LaunchAgents/~$escape.plist
zu zippen und die Zip-Datei in ~/Library
zu platzieren, damit sie beim Entpacken das Ziel der Persistenz erreicht.
Überprüfen Sie den ursprünglichen Bericht hier.
Sandbox-Bypass mit Word über Login-Elemente und .zshenv
(Denken Sie daran, dass Word nach der ersten Umgehung 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 sie fehlschlagen. Daher wurde eine andere Login-Element-Kette für dies entdeckt.
Ein Angreifer könnte die Dateien .bash_profile
und .zshenv
mit dem Payload zum Ausführen erstellen und sie dann zippen und die Zip-Datei im Benutzerordner des Opfers schreiben: ~/~$escape.zip
.
Fügen Sie dann die Zip-Datei zu den Login-Elementen hinzu und dann zur Terminal
-App. Wenn sich der Benutzer erneut anmeldet, wird die Zip-Datei im Benutzerordner entpackt und überschreibt .bash_profile
und .zshenv
, und daher wird das Terminal eine dieser Dateien ausführen (abhängig davon, ob bash oder zsh verwendet wird).
Überprüfen Sie den ursprünglichen Bericht hier.
Sandbox-Bypass mit Word über Open und Umgebungsvariablen
Aus sandboxierten Prozessen ist es immer noch möglich, andere Prozesse mit dem Dienstprogramm open
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 Datei .zshenv
in einem Ordner innerhalb der Sandbox zu erstellen und open
mit --env
zu verwenden, um die HOME
-Variable auf diesen Ordner einzustellen und die Terminal
-App zu öffnen, die die .zshenv
-Datei ausführt (aus irgendeinem Grund musste auch die Variable __OSINSTALL_ENVIROMENT
gesetzt werden).
Überprüfen Sie den ursprünglichen Bericht hier.
Sandbox-Bypass mit Word über Open und stdin
Das Dienstprogramm open
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 Attribut quarantine
ausführen wird. Es war jedoch möglich, ihm ein Skript von stdin zu übergeben, sodass es nicht überprüft, ob es unter Quarantäne gestellt wurde oder nicht:
Legen Sie eine Datei
~$exploit.py
mit beliebigen Python-Befehlen ab.Führen Sie open
–stdin='~$exploit.py' -a Python
aus, das die Python-App mit unserer abgelegten Datei als Standardeingabe ausführt. Python führt unseren Code problemlos aus, und da es sich um einen Kindprozess von launchd handelt, ist er nicht an die Sandbox-Regeln von Word gebunden.
Last updated