Çok Sayıda Yeni macOS Sandbox Kaçış Açığı
(jhftss.github.io)- macOS sandbox kaçışı araştırmalarında nispeten daha az görülen PID domain XPC servisleri bir saldırı yüzeyi olarak ortaya çıktı ve 10’dan fazla yeni açığın keşfedilmesine yol açtı
- Ana hedef, System/User domain’indeki Mach servisleri değil; uygulama veya framework yüklenirken PID domain’e kaydedilen Application türü XPC servisleri
- Açık örnekleri arasında CVE-2023-27944, CVE-2023-32414, CVE-2023-32404, CVE-2023-41077, CVE-2023-42961, CVE-2024-27864, CVE-2023-42977 vb. yer alıyor; bazıları TCC bypass, SIP ile ilgili yetkiler ve iOS etkileriyle de bağlantılı
- Tekrarlayan başarısızlık noktası, sandbox’a alınmamış servislerin dosya, dizin, arşiv ve DMG işlerken quarantine genişletilmiş özniteliğini, yol dizelerini ve istemci yetki doğrulamasını güvenli biçimde ele alamamasıydı
- Apple’ın yanıtı, savunmasız XPC servislerinin kaldırılması, girdilerin normalize edilmesi, doğrulamanın sunucu tarafına taşınması ve private entitlement zorunluluğu getirilmesiyle sonuçlandı; ancak hâlâ yama bekleyen 5 rapor bulunuyor
macOS sandbox modeli ve kaçış hedefi
- macOS’ta Apple’ın kendi servisleri ve üçüncü taraf uygulamalar dahil birçok süreç, kısıtlı bir sandbox ortamında çalışır
- Saldırgan sandbox içindeki bir süreçte uzaktan kod yürütme (RCE) elde etse bile yürütme kabiliyeti ve dosya erişim izinleri sınırlı olduğundan, sonraki adım daha geniş yetkiler elde etmek için sandbox kaçışıdır
-
App Sandbox
- Mac App Store gereksinimleri nedeniyle birçok uygulama App Sandbox kısıtlamalarıyla çalışır
- Sandbox uygulamaları
com.apple.security.app-sandboxentitlement’ına sahip olmalıdır - Kısıtlamalar, uygulamanın
mainfonksiyonundan önceki dyld başlatma aşamasında uygulanır - App Sandbox’a girildiğinde uygulama container’laştırılır ve dosya işlemleri veri container yolu ile sınırlandırılır
- Sandbox uygulamasının oluşturduğu dosyalara varsayılan olarak
com.apple.quarantinegenişletilmiş özniteliği eklenir - Sandbox profilinde bu genişletilmiş özniteliğin kaldırılmasını engelleyen kurallar bulunur
- App Sandbox’ın ayrıntılı izinleri
/System/Library/Sandbox/Profiles/application.sbiçinde tanımlıdır - Ağ, donanım, dosya sistemi ve erişilebilir Mach servisleri kısıtlanır
forkedilen alt süreçler ebeveynin App Sandbox kısıtlamalarını devralırLaunchService.frameworkile çalıştırılan süreçler kısıtlamaları devralmaz; örneğin sistemopenkomutuyla sandbox dışı bir uygulama doğrudan çalıştırılabilir
-
Service Sandbox
- Apple’ın birçok daemon servisi Service Sandbox bağlamında çalışır
- Servis sandbox profilleri çoğunlukla
/System/Library/Sandbox/Profiles/*.sbve/usr/share/sandbox/*.sbaltında bulunur - Service Sandbox kısıtlamaları, servisin
mainfonksiyonundasandbox_init_XXXAPI’si çağrılarak manuel uygulanır - Service Sandbox’a giren servisler genellikle container’laştırılmaz
- Önemli fark, Service Sandbox içinde oluşturulan dosyaların varsayılan olarak quarantine’e alınmamasıdır
- Quarantine ile ilgili API’ler manuel çağrılmazsa oluşturulan dosyalara quarantine eklenmez
Mevcut macOS sandbox kaçış yolları
-
LaunchService.framework saldırısı
- Mevcut yaygın yöntemlerden biri, LaunchService.framework üzerinden sandbox dışı uygulamalara saldırmaktır
- CVE-2021-30864, sistemdeki sandbox dışı Terminal.app uygulamasına karşı
$HOMEortam değişkeninin manipüle edildiği bir örnektir - Terminal çalıştırıldığında, kontrol edilebilir
$HOME/.profilealtındaki zararlı payload sandbox kısıtlamaları olmadan çalışır - Bir diğer senaryo, yeni bir sandbox dışı uygulamayı bırakıp ardından çalıştırmaktır
- Ancak sandbox uygulamasının yeni bıraktığı uygulama quarantine’e alındığı için çalıştırılması engellenir
- Bir dosya veya klasör quarantine olmadan bırakılabilirse App Sandbox tamamen bypass edilebilir
- CVE-2023-32364, devfs’in genişletilmiş öznitelikleri desteklememesinden yararlanarak quarantine’siz bir klasör bırakılan bir örnektir
-
Erişilebilir Mach servislerine saldırı
- İkinci yaygın yöntem, App Sandbox profilinde listelenen Mach servislerine saldırmaktır
- Sistemin Mach servis bilgileri
/System/Library/xpc/launchd.plistiçinde saklanır bootstrap_look_upAPI’siyle sandbox uygulamasından belirli bir Mach servisine erişilip erişilemediği kontrol edilebilir- Bu tür Mach servisleri System domain veya User domain içinde bulunur
- Bu araştırmanın çıkış noktası, App Sandbox’tan erişilebilen XPC servislerinin bu iki domain’in dışında da bulunduğudur
Yeni saldırı yüzeyi: PID domain XPC servisleri
- Gözden kaçırılan XPC servisleri PID domain içinde bulunur
- Genellikle incelenen System/User domain XPC servislerinden farklı olarak bunların servis türü Application’dır
- Application türü XPC servisleri uygulama isteği üzerine çalıştırılır ve isteği yapan uygulama kapandığında onunla birlikte sonlanır
- System/User domain’deki XPC servislerine sandbox uygulamalarından yalnızca
application.sbiçinde tanımlanmışlarsa erişilebilir - Uygulama ve framework’lerin ihtiyaç duyduğu tüm XPC servisleri ilgili uygulamanın PID domain’inde görünür
- PID domain’deki birçok XPC servisi, sandbox uygulamalarından çağrılacağını öngörmediği için gelen XPC istemcilerinde entitlement kontrolü veya sandbox kontrolü yapmayabilir
-
SystemShoveService.xpc örneği
SystemShoveService.xpc, sistemdeki privateShoveService.frameworkiçindeki bir XPC bundle’ıdır- Info.plist’teki servis türü Application, bundle tanımlayıcısı ise
com.apple.installandsetup.shoveservice.system’dır - Sandbox uygulamasından
/System/Library/PrivateFrameworks/ShoveService.frameworkyüklendiğinde karşılık gelen XPC servisi PID domain’e otomatik kaydedilir SystemShoveService.xpc, istekte bulunan XPC istemcisini denetlemediği için App Sandbox kaçışı için kötüye kullanılabiliyordu- Bu servis,
com.apple.rootless.installadlı güçlü bir SIP ile ilgili entitlement’a sahip olduğundan SIP korumasının bypass edilmesiyle de ilişkilendirilebiliyordu - İlgili açık CVE-2022-26712 olarak atandı; ayrıntılar önceki yazıda özetlenmiştir
-
Keşif yöntemi
- Service Type’ı Application olan tüm XPC servisleri, App Sandbox kaçışı için potansiyel hedeftir
- Sistem framework’lerinde ve private framework’lerde XPC servisleri listelenerek bulunabilir
/System/Library/Frameworks/System/Library/PrivateFrameworks
- Gelen XPC istemcisini denetlemeyen bir PID domain XPC servisi varsa şu yöntemlerle saldırı denenebilir
- Quarantine olmadan bir uygulama klasörü bırakarak tam sandbox kaçışı elde etmek
- Sandbox dışı uygulama içeren bir ZIP veya DMG dosyasını quarantine olmadan bırakmak
Yalnızca beta sürüme özgü 2 açık
-
Beta-No-CVE-1: StorageKit’te keyfi komut yürütme
- Apple bu açığı additional recognitions bölümüne kaydetti, ancak CVE atamadı
- Apple’a göre CVE yalnızca üretime yayımlanmış yazılımlardaki açıklara atanıyor; yalnızca beta yazılımdaki açıklara atanmıyor
- Etkilenen hedef yalnızca macOS Sonoma Beta sürümleri
- Açık barındıran XPC hizmetinin yolu
/System/Library/PrivateFrameworks/StorageKit.framework/XPCServices/storagekitfsrunner.xpc - Bu hizmet sandbox kısıtlamaları olmadan çalışabiliyordu ve delegate metodunda tüm XPC istemcilerini kabul ediyordu
SKRemoteTaskRunnerProtocol’ün tek metodu olanrunTask:arguments:withReply:, belirtilen yürütülebilir dosya yolu ve argümanlarla keyfi komut çalıştıracak şekilde tasarlanmıştı- Yürütülebilir dosya yolu ve argümanlar sandbox içindeki XPC istemcisi tarafından kontrol edilebildiği için, sandbox kısıtlamaları olmadan keyfi sistem komutu yürütmek mümkündü
- Apple, macOS Sonoma 14.0 kararlı sürümü yayımlanmadan önce açık barındıran XPC hizmetini işletim sisteminden tamamen kaldırdı
-
Beta-No-CVE-2: AudioAnalyticsHelperService’te ZIP oluşturmanın kötüye kullanımı
- Bu açığa da aynı yalnızca beta gerekçesiyle CVE atanmadı
- Açık barındıran XPC hizmetinin yolu
/System/Library/PrivateFrameworks/AudioAnalyticsInternal.framework/XPCServices/AudioAnalyticsHelperService.xpc - Hizmet sandbox kısıtlamaları olmadan çalışabiliyordu ve tüm XPC istemcilerini kabul ediyordu
createZipAtPath:hourThreshold:withReply:metodu, XPC istemcisinin belirttiği keyfi yolu sıkıştırıyordu- Belirtilen yolda
compressedklasörü yoksa oluşturuyor,.jsondosyalarını bulup bu klasöre taşıdıktan sonra ZIP dosyası oluşturuyordu - Saldırgan
compressedklasörünü symlink ile değiştirerek keyfi dosyaları keyfi konumlara taşıyabiliyordu - Kaynak dosya içeriği denetlenmiyor; hedef dosya yolunun
.jsonsoneki taşıması gerekiyordu - Yeni oluşturulan ZIP dosyası, hizmet sandbox’a alınmadığı için quarantine işlemine tabi tutulmuyordu
- Apple, macOS Sonoma 14.0 yayımlanmadan önce gelen XPC istemcisinin
com.apple.audioanalytics.helper.serviceentitlement’ını kontrol edecek şekilde yama yaptı - Güncel macOS’te private
AudioAnalyticsInternal.frameworkve ilgili XPC hizmeti tamamen kaldırıldı
CVE-2023-27944: TrialArchivingService
- Açık barındıran hizmet
/System/Library/PrivateFrameworks/TrialServer.framework/XPCServices/TrialArchivingService.xpc - Bu hizmet
/System/Library/Sandbox/Profiles/com.apple.trial.TrialArchivingService.sbprofiliyle Service Sandbox içine giriyor - Service Sandbox olduğu için bırakılan dosyalar quarantine işlemine tabi tutulmuyor
- Hizmet gelen tüm XPC istemcilerini kabul ediyor
extractArchiveFromHandle:withArchiveName:toDirectory:destDirExtension:postExtractionCompression:completion:metodu, sandbox içindeki uygulamanın ilettiği arşiv dosyasını belirtilen konuma çıkarıyor- Çıkarılan içeriğe quarantine genişletilmiş özniteliği aktarılmadığından, quarantine olmayan dosya bırakmaya yol açabiliyordu
-
Kötüye kullanım koşulları ve atlatma
- Bu metot kötüye kullanıldığında, arşiv içindeki Mach-O dosyasının çıkarıldıktan sonra çalıştırma izni kayboluyor ve doğrudan çalıştırılamıyor
- CVE-2021-30990 tekniğinde olduğu gibi symlink kullanmak bir atlatma yolu olabilir
- Ancak bu XPC metodu yalnızca dizinleri ve normal dosyaları çıkarıyor; arşivden symlink çıkarılmasına izin vermiyor
- Bir atlatma yöntemi, payload uygulamasını sandbox uygulama container yoluna çıkarmak
- Sandbox uygulaması bu yolda okuma-yazma iznine sahip olduğundan doğrudan symlink oluşturabilir veya
chmodile çalıştırma izni verebilir - Başka bir yöntem payload uygulamasını iki kez arşivlemek
- Açık barındıran XPC metoduyla dış ZIP’i açmak
- Sistem
openkomutuyla iç ZIP’i açmak
-
Yama
- Apple, macOS Ventura 13.3’te gelen XPC istemcisinin
com.apple.TrialArchivingService.internalentitlement’ını kontrol edecek şekilde yama yaptı - İlgili entitlement yoksa XPC bağlantısını reddediyor
- Apple, macOS Ventura 13.3’te gelen XPC istemcisinin
CVE-2023-32414: ArchiveService
- Açık barındıran hizmet
/System/Library/PrivateFrameworks/DesktopServicesPriv.framework/XPCServices/ArchiveService.xpc - Bu hizmet Service Sandbox içine giriyor, ancak bırakılan dosyalar quarantine işlemine tabi tutulmuyor
- Hizmet tüm XPC istemcilerini kabul ediyor
unarchiveItemWithURLWrapper:…metodu, sandbox içindeki uygulamanın ilettiği öğeyi belirtilen konuma arşivden çıkarıyor- Çıkarılan içeriğe quarantine genişletilmiş özniteliğini aktarmadığı için, sandbox uygulaması quarantine olmayan keyfi dosyalar bırakabiliyordu
- XPC istemcisi,
DesktopServicesPriv.frameworkiçindeki Objective-C sınıfıDSArchiveService’te zaten uygulanmıştı -
Yama
- Apple, macOS Ventura 13.4’te gelen XPC istemcisinin
com.apple.private.ArchiveService.XPCentitlement’ını kontrol edecek şekilde yama yaptı - İlgili entitlement yoksa XPC bağlantısını reddediyor
- Apple, macOS Ventura 13.4’te gelen XPC istemcisinin
CVE-2023-32404: ShortcutsFileAccessHelper
- Açık barındıran hizmet
/System/Library/PrivateFrameworks/WorkflowKit.framework/XPCServices/ShortcutsFileAccessHelper.xpc - Bu hizmet sandbox kısıtlamaları olmadan çalışabildiğinden App Sandbox kaçışı için kötüye kullanılabiliyordu
- Kod imzasında Full Disk Access için özel TCC entitlement’ı da bulunuyordu
- Bu nedenle açık, TCC korumasını tamamen atlatmak için de kötüye kullanılabiliyordu
- Hizmet tüm XPC istemcilerini kabul ediyor
WFFileAccessHelperProtocol’ün tek metodu olanextendAccessToURL:completion:, XPC istemcisine keyfi URL için okuma-yazma izni verecek şekilde tasarlanmıştı- İçeride
sandbox_extension_issue_fileAPI’sini çağırarak dosya erişim token’ı veriyor - Keyfi URL, sandbox içindeki XPC istemcisi tarafından belirleniyor
- İçeride
-
Yama
- Apple, macOS Ventura 13.4’te gelen XPC istemcisinin
com.apple.shortcuts.file-access-helperentitlement’ını kontrol edecek şekilde yama yaptı - İlgili entitlement yoksa XPC bağlantısını reddediyor
- Apple, macOS Ventura 13.4’te gelen XPC istemcisinin
CVE-2023-41077: mscamerad-xpc ve tekrarlanan yama atlatmaları
- Güvenlik açığı bulunan servis
/System/Library/Frameworks/ImageCaptureCore.framework/XPCServices/mscamerad-xpc.xpcidi - Bu servis sandbox kısıtlamaları olmadan çalışabildiği için App Sandbox’tan kaçışta kötüye kullanılabiliyordu
- Kod imzasında, kullanıcı istemi olmadan Photos ve Removable Volumes’a erişebilen özel TCC entitlement’ları vardı
- Bu nedenle söz konusu TCC koruması da aynı anda atlatılabiliyordu
-
Açık akışı
- Varsayılan servis adı
com.apple.mscamerad-xpcidi - Servis tüm XPC istemcilerini kabul ediyordu
ICXPCDeviceManagerProtocoliçindekiopenDevice:withReply:yeni birMSCameraDeviceaçıp yapılandırıyordu- Yeni cihaz başlatılırken, kamera cihazına yönelik servis rutinleri sağlamak için başka bir anonim XPC servisi açılıyordu
- Bu anonim XPC servisi de tüm XPC istemcilerini kabul ediyordu
ICCameraDeviceProtocoliçindekirequestReadDataFromObjectHandle:options:withReply:metodu, istenen dosya öğesinin içeriğini okuyup XPC istemcisine döndürüyordu- İstenen dosya yolu XPC istemcisi tarafından kontrol edilebildiğinden, sandbox içindeki bir uygulama konteyner dışındaki rastgele dosyaları okuyabiliyordu
- Servisin güçlü TCC entitlement’ları nedeniyle kullanıcının Photos verileri de kullanıcı istemi olmadan okunabiliyordu
- Varsayılan servis adı
-
Sahte kamera cihazı yapılandırması
MSCameraDevice, bir DMG dosyası oluşturup mount ederek emüle edilebiliyordu- DMG birimi içindeki dosya yolu belirli bir düzenli ifadeyle eşleşirse dosya öğesi
ICCameraFileolarak indeksleniyordu - Klasör adı örnekleri:
123abcde,DCIM,dcIm - Dosya adı örnekleri:
abcd1234.mp3,1234E5678.HEIC - Sandbox içindeki bir uygulama, DMG dosyasını bırakıp açarak ve mount ederek sorunu tetikleyebiliyordu
- XPC istemcisi
ImageCaptureCoreframework’ünde zaten uygulanmıştı
-
Yama ve atlatma
- Apple, macOS Sonoma 14’te
acceptConnection:içine yeni bir kontrol ekledi - İstemcide
com.apple.private.imagecapturecore.authorization_bypassprivate entitlement’ı varsa izin veriyordu - Ya da istemci platform binary ise izin veriyordu
- Platform binary koşulu, Apple imzalı bir ikiliye dinamik kütüphane enjekte edilebildiği için atlatılabiliyordu
- Entitlement’ı olmayan Apple imzalı ikili
/bin/lsseçildi DYLD_INSERT_LIBRARIESortam değişkeniyle önceki exploit kodunu içeren dylib enjekte edildi- Ardından önceki gibi XPC servisiyle iletişim kuruldu
- Entitlement’ı olmayan Apple imzalı ikili
- Apple bu atlatma raporuna CVE-2024-23253 atadı
- macOS 14.4’te ikinci koşul güçlendirildi; XPC istemcisinin yalnızca platform binary olması değil, ayrıca
CS_REQUIRE_LVveyaCS_FORCED_LVbayraklarıyla imzalanmış olması gerekiyordu - Bu yama da atlatılabiliyordu
/bin/lsiçine dylib enjekte edildi- Çalışma zamanında
csopsAPI’siyle gerekli bayraklar elle ayarlandı - Ardından XPC servisi kontrolünden geçildi
- Apple bu ikinci atlatmaya CVE-2024-40831 atadı
- macOS Sequoia 15’te, yalnızca
com.apple.private.imagecapturecore.authorization_bypassprivate entitlement’ına sahip XPC istemcilerine izin verecek şekilde yeniden yama yapıldı
- Apple, macOS Sonoma 14’te
CVE-2023-42961: intents_helper
- Bu güvenlik açığı iOS’ta da kötüye kullanılabiliyor
- Güvenlik açığı bulunan servis
/System/Library/Frameworks/Intents.framework/XPCServices/intents_helper.xpcidi - Servis sandbox kısıtlamaları olmadan çalışabiliyor ve tüm XPC istemcilerini kabul ediyordu
filePathForImageWithFileNamefonksiyonundaki path traversal (yol geçişi) nedeniyle rastgele yollara erişim mümkündüfileNameparametresi XPC istemcisinin kontrol edebildiği rastgele bir dizeydi-
Etkilenen metotlar
- Açıklı fonksiyona iki XPC metodu üzerinden ulaşılabiliyordu
retrieveImageWithIdentifier:completion:.pnguzantılı rastgele dosyaları okumak için kötüye kullanılabiliyordu- Okunan veri, bir
INImageörneğinin üye değişkenine kaydediliyor ve XPC istemcisine döndürülüyordu purgeImageWithIdentifier:completion:rastgele dosya yollarını silmek için kötüye kullanılabiliyordu
-
Yama
- Apple, macOS Sonoma 14.0’da XPC istemcisinden gelen giriş dizelerini normalleştirecek şekilde yama yaptı
- Path traversal için kullanılan özel karakterleri kırpıyordu
CVE-2024-27864: diskimagescontroller
- CVE kaydı, yazının hazırlandığı sırada yayımlanmayı bekliyordu
- Güvenlik açığı bulunan servis
/System/Library/PrivateFrameworks/DiskImages2.framework/XPCServices/diskimagescontroller.xpcidi - Bu servis, kod imzasında
com.apple.diskimages.creator-ucentitlement’ına sahip olduğu için güçlü işlemler yapabiliyordu - Bu entitlement’ın başlıca iki işlevi vardı
- FDA entitlement’ına sahip olan ve gerçek attach işlemini gerçekleştiren
/usr/libexec/diskimagesiodile iletişim kurmak - IOKit servisi
AppleDiskImagesController’a bağlanarak DMG dosyaları için cihaz oluşturmak ve quarantine işlemi uygulamak
- FDA entitlement’ına sahip olan ve gerçek attach işlemini gerçekleştiren
-
Açığın nedeni
- Servis tüm XPC istemcilerini kabul ediyordu
DIControllerProtocoliçindekiattachWithParams:reply:metodu saldırı noktasıydı- İçeride
checkAttachEntitlementWithErrorçağrılıyordu; ancak bu fonksiyon adının aksine her zaman TRUE döndürüyordu DiskImages2.frameworkiçinde, XPC istemcisinin zaten uygulanmış olduğu Objective-C sınıfıDIAttachParamsbulunuyordu- Framework’ün istemci kodu, giriş URL’sinin quarantine durumunda olup olmadığını kontrol ediyordu
- Giriş URL’si quarantine durumundaysa attach öncesinde quarantine parametresini ayarlıyor; bu parametre XPC servisine hedef cihaza quarantine uygulamasını bildiriyordu
- Kendi XPC istemcinizi oluşturduğunuzda quarantine parametresi ayarını atlayıp doğrudan
attachWithParams:reply:çağrılabiliyordu - Bunun sonucunda quarantine’li bir DMG dosyası attach edilirken karşılık gelen cihaza quarantine uygulanmayabiliyordu
-
Yama
- Apple, macOS Sonoma 14.4’te doğrulama mantığını istemci tarafından sunucu tarafına taşıdı
- Giriş dosya yolu quarantine durumundaysa sunucu, karşılık gelen cihaza doğrudan quarantine uyguluyordu
CVE-2023-42977: PerfPowerServicesSignpostReader
- Açık bulunan servis
/System/Library/PrivateFrameworks/PowerlogCore.framework/XPCServices/PerfPowerServicesSignpostReader.xpc - Servis sandbox kısıtlamaları olmadan çalışabiliyor ve tüm XPC istemcilerini kabul ediyor
XPCSignpostReaderProtocoliçinde 6 yöntem var, ancak Apple yalnızcasubmitSignpostDataWithConfig:withReply:yöntemini uygulamış; kalan 5 yöntem boş uygulanmış- Bu yöntemin temel mantığı, günlük verilerini toplayıp gzip dosyası olarak arşivlemek
- XPC istemcisinin kontrol ettiği
tagUUIDdizesiylepowerlogyolu rastgele bir yola yönlendirilebiliyordu -
Rastgele yol silme
- Fonksiyon içinde
archiveDirectoryAt:deleteOriginal:çağrılarakpowerlogyolu siliniyor TagUUIDiçine path traversal dizesi konursa rastgele yol silme primitive’i elde edilebiliyor
- Fonksiyon içinde
-
Rastgele dizin oluşturma ve tam sandbox kaçışı
createSignpostFile:fonksiyonupowerlogyolunda dizin oluşturuyor- Bu sayede quarantine genişletilmiş özniteliği olmayan rastgele bir dizin oluşturulabiliyor
- Quarantine olmayan rastgele dizin oluşturma primitive’i tam sandbox kaçışına yol açabiliyor
- Yazıda CVE-2023-32364 tekniği kullanılıyor
- Quarantine olmayan bir
.appklasörü oluşturuluyor Contents/MacOSaltında/bin/bashsymlink’i oluşturuluyorLSEnvironmentiçindeBASH_ENVayarlanıyoropen ./poc.appile çalıştırılıyor
- Quarantine olmayan bir
-
Yama
- Apple, macOS Sonoma 14.0’da XPC istemcisinin UUID dizesini normalize edecek şekilde yama yaptı
- Girdi dizesi geçerli bir UUID değilse fonksiyondan çıkılacak şekilde işlendi
Tekrarlayan kalıp
- Temel saldırı yüzeyi System veya User domain’deki XPC servisleri değil, sistem ve private framework’ler içindeki PID domain XPC servisleri
- Service Type’ı Application olan XPC servisleri, yalnızca framework yüklenmesiyle sandbox’lı uygulamanın PID domain’ine kaydedilebiliyor
- Açık bulunan servislerin çoğu sandbox istemcilerinden çağrı beklemediği için şu kontrolleri atlamıştı
- XPC istemcisi entitlement kontrolü
- İstemcinin sandbox’lı olup olmadığı kontrolü
- Girdi yolu normalizasyonu
- Sunucu tarafında quarantine durumu doğrulaması
- Tekrar tekrar kötüye kullanılan koşullar şunlar oldu
- Quarantine olmayan dosya/klasör bırakma, tam sandbox kaçışına yol açabiliyor
- Arşiv açma sırasında quarantine genişletilmiş özniteliği kaybolursa Gatekeeper atlatmaya ve sandbox kaçışına yol açabiliyor
- Service Sandbox’ın oluşturduğu dosyalar varsayılan olarak quarantine işleminden geçirilmiyor
- Hâlâ yama bekleyen 5 rapor kaldı
App Sandbox ve Service Sandbox hakkında ek görüşler
- Apple, bir rapor için yeni çalıştırılan uygulamanın mevcut süreç bağlamında olmadığını ve mevcut sürecin entitlement’larını veya izinlerini paylaşamayacağını belirterek bunun expected behavior olduğuna karar verdi
- App Sandbox’ta bırakılan dosyalar varsayılan olarak quarantine işleminden geçirilir
- Service Sandbox’ta bırakılan dosyalar varsayılan olarak quarantine işleminden geçirilmez
- Yeni çalıştırılan sürecin mevcut servis yürütme bağlamında olmaması ve bu nedenle ilgili servisin entitlement’larını veya privilege’larını paylaşmaması başlı başına bir flaw değil diye özetleniyor
- Buna karşılık saldırganın sandbox kısıtlamalı servis bağlamında RCE elde ettikten sonra yeni, sandbox’sız bir uygulama bırakıp çalıştırarak hedef servisin sandbox kısıtlamalarından çıkabilmesi flaw olarak görülebilir
- Örnek olarak NSO Group’un 0-click exploit hedefi olan IMTranscoderAgent anılıyor
com.apple.WebDriver.HTTPService.xpc,WBSEnableSandboxStyleFileQuarantineAPI’sini manuel çağıran bir örnek olarak geçiyor- App Sandbox’tan Service Sandbox’a kaçmanın macOS’te fiilen Non Sandbox’a geçmek olduğu özetleniyor
1 yorum
Hacker News yorumları
Burada XPC servislerini tek tek yamalayarak verilen tepki biraz garip görünüyor
Bu daha çok sandbox’ın kendi tasarım sorunu gibi duruyor ve uygulama içi kullanım için tasarlanmış gibi görünen XPC servislerine sandbox’lı uygulamaların neden bu kadar çok erişebildiği soru işareti
Windows tarafında da WinRT sandbox’ı, Win32 uygulama sandbox’ı, güvenlik çekirdeği, sürücü koruması gibi benzer mekanizmalar var ama farklı yapılandırmalar arasında tek bir çalıştırılabilir dosya çalıştırmak istiyorsanız geriye dönük uyumluluğun açıkları ortaya çıkıyor
Mobil işletim sistemlerinde geriye dönük uyumluluk yok ve yürütme modelini sıkı biçimde sınırlayabildikleri için iş çok daha kolay
macOS’un, dev bir engelleme listesi yığını gibi görünen bu yaklaşım yerine, capability tabanlı bir Darwin container benzeri yapıya sahip olması gerekirdi
https://news.ycombinator.com/item?id=37655477
Masaüstünde gerçekten iyi çalışan bir güvenlik modeli yok
Başka bir yorumda dendiği gibi iOS, eski tortularla uğraşmadığı için mantıklı bir güvenlik modeli sunabildi
Öte yandan Telegram tüm kişileri ve tüm fotoğrafları paylaşma izni isterse insanlar gerçekten buna izin veriyor
İyi iş
Yine de bu mimarinin doğru yön olup olmadığından emin değilim. Belirli bir saldırıyı engellemek için her güvenlik çerçevesi oluşturulduğunda tamamen yeni bir sorun sınıfı ortaya çıkıyormuş gibi geliyor ve sonunda daha güvenli hale geldiğimiz hissi oluşmuyor
Hollanda vergi yasası gibi, istismarı önlemek için üst üste yama eklenmiş bir yapı ve belki de artık bilinç kazanmış olabilir
Doğru yaklaşım ise genellikle geriye dönük uyumluluk yüzünden ya da geliştiricilerin özellikleri benimsemeyi reddetmesi nedeniyle pazarda başarısız oluyor. WinRT sandbox’ı buna bir örnek
Telefon güvenliği daha kolaydı çünkü geriye dönük uyumluluk gerekmiyordu ve şimdiye kadar App Store kapı bekçiliği sayesinde katılmak isteyen geliştiriciler kurallara uymak zorunda kaldı
Bugün kullanılan tüm işletim sistemlerinin gelecek yüzyıla kadar güvenli kalabilmesi için en baştan yeniden yapılması ve bu süreçte çok sayıda kodun çöpe atılması gerekir. Bedeli bu
Tüketici bilişiminde de daha fazla açığı bilinçli olarak itmeye çalışan güçlü aktörler olabileceği tahmin edilebilir
Her bir ünlü örnek şunlar
https://en.wikipedia.org/wiki/Dutch_Sandwich
https://en.wikipedia.org/wiki/Intel_Management_Engine#Assert...
macOS, yani NeXTstep, en başından beri açık ve son derece genişletilebilir bir işletim sistemi olarak tasarlanmıştı
Üçüncü taraf genişletmeler veya hook’lar eklemenin sayısız yolu vardı ve yazılıma birden fazla runtime’dan erişilebildiği için o dönemde bütün bunların sorunsuz biçimde birlikte çalışması başlı başına etkileyici bir teknik başarıydı
Java, klasik Mac, X11 ve NeXTstep kod tabanları, çekirdeğin çeşitli genişletme giriş noktaları sayesinde sorun yaşamadan birlikte çalışabiliyordu
Ayrıca platformda uygulamaların birbiriyle sorunsuz iletişim kurmasını sağlayan API’ler de vardı
Ama Apple yavaş yavaş bu felsefeden uzaklaştı ve sistemi giderek daha kapalı hale getiriyor. Oldukça ilginç bir yolculuk
SBPL (sandbox profile language) ilginç. Daha fazla ayrıntı burada: https://github.com/0xbf00/simbple
macOS içinde bunu işleyen bir Scheme yorumlayıcısı bir yerlerde mi var diye merak ediyorum
Not: Bunu yapan şey galiba
sandbox-exec. Referans: https://reverse.put.as/wp-content/uploads/2011/09/Apple-Sand...Etkileyici bir bulgu. Yazının da ima ettiği gibi, benzer kusurların hâlâ sahada bulunma ihtimali çok yüksek görünüyor
Apple bu servisleri sertleştirme yaklaşımını yeniden tasarlamazsa, XPC ile ilgili CVE’ler düzenli olarak gelmeye devam edecek gibi
Sandbox’ı hem seviyorum hem sevmiyorum
Harika bir ikinci savunma hattı, ama büyük kuruluşlar sandbox’tan çıkmadan anlamlı bir iş yapılamıyorsa uzaktan kod çalıştırma açıklarını düzeltmeyi reddetme eğiliminde oluyor. Böylece sandbox ana savunma hattı gibi kullanılmaya başlanıyor ve bu üzücü
Bildiğim kadarıyla Apple, Microsoft ve Google’ın hepsinin bug bounty programı var; sandbox kaçışlarına daha yüksek ödül veriyorlar ama sandbox tarafından engellenen açıklar için de yine ödül ödüyorlar
Herkes, saldırganların şu an kullanamayacakları uzaktan kod çalıştırma açıklarını bir kenarda tutup bir sandbox kaçışı bulunduğunda bunları birlikte kullanabileceklerinin farkında
Konudan biraz sapıyor ama sandbox konusunda uzman olup da maximum "pattern serialization length" sınırını aşma stratejisini bilen biri varsa, bu mesele yüzünden epey uzun süre başım ağrıdı: https://github.com/NixOS/nix/issues/4119
Ne yazık ki
sandbox-execneredeyse hiç belgelenmemiş ve ayrıca kaldırılacağı da söyleniyor; bu yüzden çözmesi oldukça can sıkıcımacOS’ta atlatma yöntemleri bitmek bilmiyor. Çünkü bu işletim sistemi baştan böyle ince taneli yetkiler için tasarlanmadı
Eski Mac OS ve NeXTSTEP teknolojilerinin üstüne sonradan öylece eklenebilecek bir şey değil
Ben bir güvenlik araştırmacısı değilim, sadece eski bir uygulama geliştiricisiyim; buna rağmen bizzat birkaç atlatma yöntemi buldum. Yani tabiri caizse cesetlerin nereye gömüldüğünü biliyorum
Ama sonunda aramayı bıraktım. Apple’ın güvenlik açığı bildirim sistemi tam bir felaket ve sanki tek ilgilendikleri şey her şeyi olabildiğince uzun süre gizli tutmakmış gibi geldi. Zaman kaybı
Genel olarak macOS, göstermelik güvenliğin kurbanı olmuş gibi duruyor. Zayıflamış yazılımlar ve bitmek bilmeyen izin istekleriyle hem kullanıcılara hem de meşru geliştiricilere zarar verirken, gerçek saldırganlar istediklerinde bunu kolayca aşabiliyor. Eski Apple Windows Vista parodilerini hatırlatıyor
Şirketin hataları düzeltmek için mümkün olduğunca fazla zaman istemesi de oyunun bir parçası. Başka şirketler, keşfedilen açıkların olabildiğince hızlı duyurulmasını gerçekten ister mi? Kullanıcıların ne kadar hızlı yükselteceğini kontrol edemeyeceklerine göre, duyuruyu geciktirmek son kullanıcı açısından her zaman daha iyidir ve bu, araştırmacının tanıtım isteğinin önüne geçmelidir
Apple sandbox mimarisi normalde oldukça iyi tasarlanmış görünüyor. Bu olayda sorun sanki mimaride ya da iletişimde bir yerde çıkmış
Atlatmaların var olması biraz da masaüstü işletim sistemlerinden çok fazla şey beklenmesinden kaynaklanıyor. Masaüstü işletim sistemleri, sunucu platformlarından çok daha incelikli ve karmaşık sistemler olarak görülebilir. Web tarayıcılarında da çok CVE olmasının nedeni aynı. Hem güvenlik hem işlevsellik istiyoruz; bu yüzden ikisinin çakıştığı ara noktanın ortaya çıkması kaçınılmaz
Son 20 yılda macOS yazılımını ve donanımını kademeli olarak sertleştirmiş olması bunun kanıtı
Son kullanıcıların çoğunun fark etmeyeceği kadar kademeliydi ama macOS geliştiricileri, hem büyük hem küçük güncellemelerde uğraşmak zorunda kaldıkları güvenlik kaynaklı sorunları çok iyi biliyor. Örneğin:
https://eclecticlight.co/2024/08/…
https://eclecticlight.co/2024/08/…
https://eclecticlight.co/2024/08/…
https://eclecticlight.co/2024/09/…
Capability tabanlı sistemler var ama gerçekten yaygın kullanılan bir örnek yok
Çözümün ne olduğunu bilmiyorum. Yine de güvenliği sonradan eklemeye çalışmak, hiçbir şey yapmayıp tek bir uygulama açığının doğrudan tüm kullanıcı hesabının ele geçirilmesine yol açmasından daha iyi görünüyor
pid alanında gözden kaçmış XPC servisleri, macOS sandbox kısıtlarını aşmanın akıllıca bir yolu
Yetki kontrollerini atlayan
dyldenjeksiyon numarası da çok temizApple’ın yaması burada geçici bir çözüm gibi hissettiriyor; belki de sandbox kalıtımının çalışma biçimini gerçekten elden geçirmek gerekiyor