macOS Office Sandbox Bypasses
Słowo Bypass piaskownicy za pomocą agentów uruchomieniowych
Aplikacja korzysta z niestandardowej piaskownicy przy użyciu uprawnienia com.apple.security.temporary-exception.sbpl
, a ta niestandardowa piaskownica pozwala na zapisywanie plików w dowolnym miejscu, o ile nazwa pliku zaczyna się od ~$
: (require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))
Dlatego ucieczka była tak łatwa jak zapisanie pliku plist
LaunchAgent w ~/Library/LaunchAgents/~$escape.plist
.
Sprawdź oryginalny raport tutaj.
Słowo Bypass piaskownicy za pomocą elementów logowania i zip
Pamiętaj, że po pierwszej ucieczce, Word może zapisywać dowolne pliki, których nazwa zaczyna się od ~$
, chociaż po poprawce poprzedniej podatności nie było możliwe zapisywanie w /Library/Application Scripts
lub /Library/LaunchAgents
.
Odkryto, że z piaskownicy można utworzyć Element logowania (aplikacje, które będą uruchamiane po zalogowaniu użytkownika). Jednak te aplikacje nie zostaną uruchomione, chyba że są podpisane i niemożliwe jest dodanie argumentów (więc nie można po prostu uruchomić odwróconej powłoki za pomocą bash
).
Po poprzedniej ucieczce z piaskownicy, Microsoft wyłączył możliwość zapisywania plików w ~/Library/LaunchAgents
. Jednak odkryto, że jeśli umieścisz plik zip jako Element logowania, Archive Utility
po prostu go rozpakuje w bieżącej lokalizacji. Dlatego, ponieważ domyślnie folder LaunchAgents
z ~/Library
nie jest tworzony, można było spakować plik plist w LaunchAgents/~$escape.plist
i umieścić plik zip w ~/Library
, aby po rozpakowaniu dotarł do miejsca trwałości.
Sprawdź oryginalny raport tutaj.
Słowo Bypass piaskownicy za pomocą elementów logowania i .zshenv
(Pamiętaj, że po pierwszej ucieczce, Word może zapisywać dowolne pliki, których nazwa zaczyna się od ~$
).
Jednak poprzednia technika miała ograniczenie - jeśli folder ~/Library/LaunchAgents
istnieje, ponieważ został utworzony przez inne oprogramowanie, operacja zakończyłaby się niepowodzeniem. Dlatego odkryto inną sekwencję Elementów logowania dla tego przypadku.
Atakujący mógł utworzyć pliki .bash_profile
i .zshenv
z ładunkiem do wykonania, a następnie spakować je i zapisać plik zip w folderze użytkownika ofiary: ~/~$escape.zip
.
Następnie dodać plik zip do Elementów logowania, a następnie do aplikacji Terminal
. Po ponownym zalogowaniu użytkownika plik zip zostanie rozpakowany w plikach użytkownika, nadpisując .bash_profile
i .zshenv
, a więc terminal wykona jeden z tych plików (w zależności od tego, czy używany jest bash czy zsh).
Sprawdź oryginalny raport tutaj.
Słowo Bypass piaskownicy za pomocą Open i zmiennych środowiskowych
Z procesów w piaskownicy nadal można wywoływać inne procesy za pomocą narzędzia open
. Ponadto, te procesy będą działać w swojej własnej piaskownicy.
Odkryto, że narzędzie open ma opcję --env
, która pozwala uruchomić aplikację z określonymi zmiennymi środowiskowymi. Dlatego można było utworzyć plik .zshenv
w folderze wewnątrz piaskownicy i użyć open
z --env
, ustawiając zmienną HOME
na ten folder, otwierając tę aplikację Terminal, która wykona plik .zshenv
(z jakiegoś powodu konieczne było również ustawienie zmiennej __OSINSTALL_ENVIROMENT
).
Sprawdź oryginalny raport tutaj.
Słowo Bypass piaskownicy za pomocą Open i stdin
Narzędzie open
obsługiwało również parametr --stdin
(a po poprzedniej ucieczce nie było już możliwe użycie --env
).
Chodzi o to, że nawet jeśli python
był podpisany przez Apple, nie będzie wykonywał skryptu z atrybutem quarantine
. Jednak można było przekazać mu skrypt ze standardowego wejścia (stdin), więc nie sprawdzał, czy był kwarantannowany czy nie:
Upuść plik
~$exploit.py
z dowolnymi poleceniami Pythona.Uruchom open
–stdin='~$exploit.py' -a Python
, co uruchamia aplikację Python z naszym upuszczonym plikiem jako standardowe wejście. Python z radością wykonuje nasz kod i ponieważ jest to proces potomny launchd, nie podlega zasadom piaskownicy Worda.
Last updated