macOS Office Sandbox Bypasses
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Uygulama, com.apple.security.temporary-exception.sbpl
yetkisini kullanarak özel bir Sandbox kullanıyor ve bu özel sandbox, dosya adının ~$
ile başlaması koşuluyla her yere dosya yazılmasına izin veriyor: (require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))
Bu nedenle, kaçış, ~/Library/LaunchAgents/~$escape.plist
içinde bir plist
LaunchAgent yazmak kadar kolaydı.
orijinal raporu buradan kontrol edin.
İlk kaçıştan hatırlayın, Word, adı ~$
ile başlayan rastgele dosyalar yazabilir, ancak önceki güvenlik açığının yamanmasından sonra /Library/Application Scripts
veya /Library/LaunchAgents
içine yazmak mümkün değildi.
Sandbox içinde bir Login Item (kullanıcı giriş yaptığında çalıştırılacak uygulamalar) oluşturmanın mümkün olduğu keşfedildi. Ancak, bu uygulamalar notarize edilmedikçe çalışmayacak ve argüman eklemek mümkün değil (yani sadece bash
kullanarak bir ters shell çalıştıramazsınız).
Önceki Sandbox kaçışından, Microsoft, ~/Library/LaunchAgents
içine dosya yazma seçeneğini devre dışı bıraktı. Ancak, bir zip dosyasını Login Item olarak koyarsanız, Archive Utility
sadece mevcut konumda açacaktır. Bu nedenle, varsayılan olarak ~/Library
içindeki LaunchAgents
klasörü oluşturulmadığı için, LaunchAgents/~$escape.plist
içinde bir plist'i zipleyip ~/Library
içine yerleştirmek mümkün oldu, böylece açıldığında kalıcılık hedefine ulaşacaktır.
orijinal raporu buradan kontrol edin.
(İlk kaçıştan hatırlayın, Word, adı ~$
ile başlayan rastgele dosyalar yazabilir).
Ancak, önceki teknik bir sınırlamaya sahipti; eğer ~/Library/LaunchAgents
klasörü başka bir yazılım tarafından oluşturulmuşsa, başarısız oluyordu. Bu nedenle, bunun için farklı bir Login Items zinciri keşfedildi.
Bir saldırgan, çalıştırılacak yük ile .bash_profile
ve .zshenv
dosyalarını oluşturabilir ve ardından bunları zipleyip kurbanın kullanıcı klasörüne yazabilir: ~/~$escape.zip
.
Sonra, zip dosyasını Login Items'a ekleyin ve ardından Terminal
uygulamasını ekleyin. Kullanıcı tekrar giriş yaptığında, zip dosyası kullanıcı dosyasında açılacak, .bash_profile
ve .zshenv
dosyalarını üzerine yazacak ve bu nedenle terminal bu dosyalardan birini çalıştıracaktır (bash veya zsh kullanılıp kullanılmadığına bağlı olarak).
orijinal raporu buradan kontrol edin.
Sandboxlı süreçlerden, open
aracını kullanarak diğer süreçleri çağırmak hala mümkündür. Dahası, bu süreçler kendi sandbox'larında çalışacaktır.
Open aracının, belirli env değişkenleri ile bir uygulamayı çalıştırmak için --env
seçeneğine sahip olduğu keşfedildi. Bu nedenle, sandbox içinde bir klasör içinde .zshenv
dosyası oluşturmak ve --env
ile HOME
değişkenini o klasöre ayarlayarak Terminal
uygulamasını açmak mümkün oldu; bu, .zshenv
dosyasını çalıştıracaktır (bir nedenle __OSINSTALL_ENVIROMENT
değişkenini de ayarlamak gerekiyordu).
orijinal raporu buradan kontrol edin.
open
aracı ayrıca --stdin
parametresini destekliyordu (ve önceki kaçıştan sonra --env
kullanmak artık mümkün değildi).
Şu durum var ki, python
Apple tarafından imzalanmış olsa da, quarantine
niteliğine sahip bir betiği çalıştırmayacaktır. Ancak, stdin'den bir betik geçmek mümkündü, böylece karantinada olup olmadığını kontrol etmeyecektir:
Rastgele Python komutları içeren bir ~$exploit.py
dosyası bırakın.
open –stdin='~$exploit.py' -a Python
komutunu çalıştırın, bu da Python uygulamasını standart girdi olarak bıraktığımız dosya ile çalıştırır. Python, kodumuzu memnuniyetle çalıştırır ve çünkü bu, launchd'nin bir çocuk süreci olduğundan, Word'ün sandbox kurallarına bağlı değildir.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)