कई नए macOS sandbox escape भेद्यताएँ
(jhftss.github.io)- macOS sandbox escape रिसर्च में अब तक अपेक्षाकृत कम देखी गई PID domain XPC services एक attack surface के रूप में सामने आईं, जिससे 10 से अधिक नई vulnerabilities मिलीं
- मुख्य target System/User domain की Mach services नहीं, बल्कि app या framework लोड होने पर PID domain में रजिस्टर होने वाली Application type XPC services हैं
- प्रभावित मामलों में CVE-2023-27944, CVE-2023-32414, CVE-2023-32404, CVE-2023-41077, CVE-2023-42961, CVE-2024-27864, CVE-2023-42977 आदि शामिल हैं, जिनमें से कुछ TCC bypass, SIP-संबंधित privileges, और iOS impact तक जुड़ते हैं
- बार-बार दिखी failure point यह थी कि non-sandboxed services फाइल, directory, archive और DMG को प्रोसेस करते समय quarantine extended attributes, path strings, और client privilege verification को सुरक्षित ढंग से हैंडल नहीं कर पा रहीं थीं
- Apple की प्रतिक्रिया में कमजोर XPC services को हटाना, input normalization, server-side verification को पहले लागू करना, और private entitlement की आवश्यकता शामिल थी, लेकिन अभी भी 5 reports patch का इंतज़ार कर रही हैं
macOS sandbox मॉडल और escape का लक्ष्य
- macOS में Apple की अपनी services और third-party apps सहित कई processes सीमित sandbox environment में चलते हैं
- अगर attacker को sandboxed process में remote code execution (RCE) मिल भी जाए, तब भी execution capability और file access permissions सीमित रहती हैं, इसलिए अगला कदम ज्यादा व्यापक permissions पाने के लिए sandbox escape होता है
-
App Sandbox
- Mac App Store की requirements के कारण कई apps App Sandbox restrictions के साथ चलते हैं
- sandboxed app के पास
com.apple.security.app-sandboxentitlement होना चाहिए - restrictions ऐप के
mainfunction से पहले dyld initialization चरण में लागू हो जाती हैं - App Sandbox में प्रवेश करने के बाद app containerized हो जाता है, और file operations data container path तक सीमित हो जाते हैं
- sandboxed app द्वारा बनाई गई files पर डिफ़ॉल्ट रूप से
com.apple.quarantineextended attribute लगती है - sandbox profile में इस extended attribute को हटाने से रोकने वाले rules होते हैं
- App Sandbox की detailed permissions
/System/Library/Sandbox/Profiles/application.sbमें परिभाषित हैं - network, hardware, filesystem, और accessible Mach services सीमित रहते हैं
forkकिए गए child processes parent की App Sandbox restrictions inherit करते हैंLaunchService.frameworkसे execute किए गए processes restrictions inherit नहीं करते; उदाहरण के लिए systemopencommand से non-sandboxed app को सीधे चलाया जा सकता है
-
Service Sandbox
- Apple की कई daemon services Service Sandbox context में चलती हैं
- service sandbox profiles मुख्य रूप से
/System/Library/Sandbox/Profiles/*.sbऔर/usr/share/sandbox/*.sbमें होती हैं - Service Sandbox restrictions service के
mainfunction मेंsandbox_init_XXXAPI कॉल करके manually लागू की जाती हैं - Service Sandbox में गई services आम तौर पर containerized नहीं होतीं
- एक महत्वपूर्ण अंतर यह है कि Service Sandbox में बनाई गई files पर डिफ़ॉल्ट रूप से quarantine apply नहीं होता
- जब तक quarantine-संबंधित API को manually कॉल न किया जाए, बनी हुई files पर quarantine नहीं लगेगा
macOS sandbox escape के मौजूदा रास्ते
-
LaunchService.framework attack
- पहले से प्रचलित आम तरीकों में से एक LaunchService.framework के जरिए non-sandboxed apps को target करना है
- CVE-2021-30864 में system non-sandboxed app Terminal.app के लिए
$HOMEenvironment variable को manipulate किया गया था - Terminal launch होने पर नियंत्रित किए जा सकने वाले
$HOME/.profileके अंदर का malicious payload sandbox restrictions के बिना execute हो गया - एक दूसरा scenario नया non-sandboxed app drop करके उसे चलाने का है
- लेकिन sandboxed app द्वारा नया drop किया गया app quarantine में चला जाता है, इसलिए उसका execution block हो जाता है
- अगर quarantine के बिना file या folder drop किया जा सके, तो App Sandbox को पूरी तरह bypass किया जा सकता है
- CVE-2023-32364 में devfs द्वारा extended attributes को support न करने का फायदा उठाकर quarantine-रहित folder drop किया गया था
-
Accessible Mach services पर attack
- दूसरा आम तरीका App Sandbox profile में सूचीबद्ध Mach services को target करना है
- system की Mach service जानकारी
/System/Library/xpc/launchd.plistमें stored होती है bootstrap_look_upAPI से sandboxed app के भीतर किसी specific Mach service की accessibility चेक की जा सकती है- ऐसी Mach services System domain या User domain में मौजूद होती हैं
- इस रिसर्च की शुरुआत इस बिंदु से हुई कि App Sandbox से accessible XPC services इन दो domains के बाहर भी मौजूद हैं
नया attack surface: PID domain XPC services
- नज़रअंदाज़ की गई XPC services PID domain में मौजूद हैं
- आम तौर पर देखी जाने वाली System/User domain XPC services के विपरीत, इनका service type Application होता है
- Application type XPC services app request पर launch होती हैं और request करने वाला app बंद होते ही साथ में बंद हो जाती हैं
- System/User domain की XPC services तक sandboxed app से पहुँच केवल तभी संभव होती है जब वे
application.sbमें defined हों - app और framework को जिन XPC services की जरूरत होती है, वे संबंधित app के PID domain में दिखाई देती हैं
- PID domain की कई XPC services यह मानकर नहीं चलतीं कि उन्हें sandboxed app कॉल करेंगे, इसलिए incoming XPC clients के लिए entitlement checks या sandbox checks नहीं हो सकते
-
SystemShoveService.xpc का मामला
SystemShoveService.xpcsystem privateShoveService.frameworkके अंदर का XPC bundle है- Info.plist में इसका service type Application है, और bundle identifier
com.apple.installandsetup.shoveservice.systemहै - अगर sandboxed app
/System/Library/PrivateFrameworks/ShoveService.frameworkको लोड करे, तो संबंधित XPC service अपने-आप PID domain में रजिस्टर हो जाती है SystemShoveService.xpcrequest करने वाले XPC client की जाँच नहीं करती थी, इसलिए इसका उपयोग App Sandbox escape के लिए किया जा सकता था- इस service के पास
com.apple.rootless.installनाम का शक्तिशाली SIP-संबंधित entitlement था, जिससे SIP protection bypass भी संभव हो सकता था - इस vulnerability को CVE-2022-26712 सौंपा गया था, और विस्तृत जानकारी पिछली पोस्ट में दी गई है
-
खोजने का तरीका
- जिन भी XPC services का Service Type Application है, वे App Sandbox escape के संभावित targets हैं
- system frameworks और private frameworks में XPC services enumerate करके इन्हें खोजा जा सकता है
/System/Library/Frameworks/System/Library/PrivateFrameworks
- अगर कोई PID domain XPC service incoming XPC clients की जाँच नहीं करती, तो निम्न तरीकों से attack की कोशिश की जा सकती है
- quarantine के बिना app folder drop करके पूर्ण sandbox escape हासिल करना
- non-sandboxed app वाली ZIP या DMG file को quarantine के बिना drop करना
केवल beta वाली 2 भेद्यताएँ
-
Beta-No-CVE-1: StorageKit में मनमाना command execution
- Apple ने इस भेद्यता को additional recognitions में दर्ज किया, लेकिन CVE आवंटित नहीं किया
- Apple के अनुसार, CVE केवल production में release किए गए software vulnerabilities को दिया जाता है, और beta-only software भेद्यताओं को नहीं
- इसका प्रभाव केवल macOS Sonoma Beta versions पर था
- भेद्य XPC service path
/System/Library/PrivateFrameworks/StorageKit.framework/XPCServices/storagekitfsrunner.xpcहै - यह service sandbox restrictions के बिना चल सकती थी और delegate method में सभी XPC clients को allow करती थी
SKRemoteTaskRunnerProtocolका एकमात्र methodrunTask:arguments:withReply:दिए गए executable path और arguments के साथ मनमाने commands चलाने के लिए design किया गया था- executable path और arguments को sandboxed XPC client नियंत्रित कर सकता था, इसलिए sandbox restrictions के बिना मनमाने system commands चलाए जा सकते थे
- Apple ने macOS Sonoma 14.0 की final release से पहले इस भेद्य XPC service को OS से पूरी तरह हटा दिया
-
Beta-No-CVE-2: AudioAnalyticsHelperService के ZIP creation का दुरुपयोग
- इस भेद्यता को भी उसी beta-only कारण से CVE नहीं दिया गया
- भेद्य XPC service path
/System/Library/PrivateFrameworks/AudioAnalyticsInternal.framework/XPCServices/AudioAnalyticsHelperService.xpcहै - यह service sandbox restrictions के बिना चल सकती थी और सभी XPC clients को allow करती थी
createZipAtPath:hourThreshold:withReply:method XPC client द्वारा दिए गए मनमाने path को compress करता है- यदि दिए गए path पर
compressedfolder नहीं हो, तो उसे बनाया जाता है, फिर.jsonfiles खोजकर उस folder में ले जाया जाता है और उसके बाद ZIP file बनाई जाती है - हमलावर
compressedfolder को symlink से बदलकर मनमानी files को मनमाने स्थान पर move कर सकता है - source file contents की जाँच नहीं की जाती, और target file path में
.jsonsuffix होना चाहिए - नई बनाई गई ZIP file पर quarantine लागू नहीं होता, क्योंकि service sandboxed नहीं थी
- Apple ने macOS Sonoma 14.0 release से पहले patch किया ताकि incoming XPC clients के
com.apple.audioanalytics.helper.serviceentitlement की जाँच की जाए - नवीनतम macOS में private
AudioAnalyticsInternal.frameworkऔर संबंधित XPC service को पूरी तरह हटा दिया गया है
CVE-2023-27944: TrialArchivingService
- भेद्य service
/System/Library/PrivateFrameworks/TrialServer.framework/XPCServices/TrialArchivingService.xpcहै - यह service
/System/Library/Sandbox/Profiles/com.apple.trial.TrialArchivingService.sbprofile के साथ Service Sandbox में चलती है - Service Sandbox होने के कारण dropped files पर quarantine लागू नहीं होता
- यह service सभी incoming XPC clients को allow करती है
extractArchiveFromHandle:withArchiveName:toDirectory:destDirExtension:postExtractionCompression:completion:method sandboxed app द्वारा दी गई archive file को निर्दिष्ट स्थान पर extract करता है- extracted content पर quarantine extended attribute propagate नहीं होता, इसलिए बिना quarantine वाली file drop संभव थी
-
exploitation conditions और bypass
- इस method का दुरुपयोग करने पर archive के भीतर की Mach-O files extraction के बाद execute permission खो देती हैं, इसलिए उन्हें तुरंत चलाया नहीं जा सकता
- CVE-2021-30990 की technique की तरह symlink का उपयोग एक bypass हो सकता है
- लेकिन यह XPC method केवल directories और regular files extract करता है, और archive से symlink extraction की अनुमति नहीं देता
- एक bypass तरीका payload app को sandbox app container path में extract करना है
- sandboxed app के पास उस path पर read/write permission होती है, इसलिए वह सीधे symlink बना सकती है या
chmodसे execute permission दे सकती है - दूसरा तरीका payload app को दो बार archive करना है
- भेद्य XPC method से outer ZIP को extract करें
- system
opencommand से inner ZIP को extract करें
-
patch
- Apple ने macOS Ventura 13.3 में patch किया ताकि incoming XPC clients के
com.apple.TrialArchivingService.internalentitlement की जाँच की जाए - यदि यह entitlement न हो, तो XPC connection reject कर दिया जाता है
- Apple ने macOS Ventura 13.3 में patch किया ताकि incoming XPC clients के
CVE-2023-32414: ArchiveService
- भेद्य service
/System/Library/PrivateFrameworks/DesktopServicesPriv.framework/XPCServices/ArchiveService.xpcहै - यह service Service Sandbox में चलती है, लेकिन dropped files पर quarantine लागू नहीं होता
- यह service सभी XPC clients को allow करती है
unarchiveItemWithURLWrapper:…method sandboxed app द्वारा दिए गए item को निर्दिष्ट स्थान पर decompress करता है- extracted content पर quarantine extended attribute propagate नहीं होता, इसलिए sandboxed app बिना quarantine वाली मनमानी files drop कर सकती थी
- XPC client
DesktopServicesPriv.frameworkकी Objective-C classDSArchiveServiceमें पहले से implement था -
patch
- Apple ने macOS Ventura 13.4 में patch किया ताकि incoming XPC clients के
com.apple.private.ArchiveService.XPCentitlement की जाँच की जाए - यदि यह entitlement न हो, तो XPC connection reject कर दिया जाता है
- Apple ने macOS Ventura 13.4 में patch किया ताकि incoming XPC clients के
CVE-2023-32404: ShortcutsFileAccessHelper
- भेद्य service
/System/Library/PrivateFrameworks/WorkflowKit.framework/XPCServices/ShortcutsFileAccessHelper.xpcहै - यह service sandbox restrictions के बिना चल सकती थी, इसलिए App Sandbox escape के लिए इसका दुरुपयोग संभव था
- code signing में Full Disk Access के लिए विशेष TCC entitlement भी शामिल था
- इसलिए इस भेद्यता का उपयोग TCC protection को पूरी तरह bypass करने के लिए भी किया जा सकता था
- यह service सभी XPC clients को allow करती है
WFFileAccessHelperProtocolका एकमात्र methodextendAccessToURL:completion:XPC client को मनमाने URL के लिए read/write permission देने के लिए design किया गया था- अंदरूनी रूप से यह file access token जारी करने के लिए
sandbox_extension_issue_fileAPI को call करता है - मनमाना URL sandboxed XPC client द्वारा निर्दिष्ट किया जाता है
- अंदरूनी रूप से यह file access token जारी करने के लिए
-
patch
- Apple ने macOS Ventura 13.4 में patch किया ताकि incoming XPC clients के
com.apple.shortcuts.file-access-helperentitlement की जाँच की जाए - यदि यह entitlement न हो, तो XPC connection reject कर दिया जाता है
- Apple ने macOS Ventura 13.4 में patch किया ताकि incoming XPC clients के
CVE-2023-41077: mscamerad-xpc और बार-बार किए गए patch bypass
- भेद्य service
/System/Library/Frameworks/ImageCaptureCore.framework/XPCServices/mscamerad-xpc.xpcहै - यह service sandbox प्रतिबंधों के बिना चल सकती थी, इसलिए इसका दुरुपयोग App Sandbox से बाहर निकलने के लिए किया जा सकता था
- code signing में ऐसे विशेष TCC entitlement थे जिनसे बिना user prompt के Photos और Removable Volumes तक पहुँचा जा सकता था
- इसलिए इन TCC सुरक्षा उपायों को भी साथ में bypass किया जा सकता था
-
भेद्य flow
- default service नाम
com.apple.mscamerad-xpcहै - service सभी XPC clients को अनुमति देती है
ICXPCDeviceManagerProtocolकाopenDevice:withReply:एक नयाMSCameraDeviceखोलता और configure करता है- नए device initialization के दौरान, camera device के लिए service routine देने हेतु एक और anonymous XPC service खोली जाती है
- यह anonymous XPC service भी सभी XPC clients को अनुमति देती है
ICCameraDeviceProtocolकाrequestReadDataFromObjectHandle:options:withReply:method अनुरोधित file item की सामग्री पढ़कर XPC client को लौटाता है- अनुरोधित file path को XPC client नियंत्रित कर सकता था, इसलिए sandbox app container के बाहर की arbitrary files पढ़ सकती थी
- service के शक्तिशाली TCC entitlement की वजह से user prompt के बिना user की Photos भी पढ़ी जा सकती थीं
- default service नाम
-
नकली camera device configuration
MSCameraDeviceDMG file बनाकर और mount करके emulation कर सकता था- DMG volume के अंदर file path यदि किसी विशेष regex से मेल खाता, तो file item को
ICCameraFileके रूप में index किया जाता था - folder नाम के उदाहरण:
123abcde,DCIM,dcIm - file नाम के उदाहरण:
abcd1234.mp3,1234E5678.HEIC - sandbox app DMG file drop करके, उसे खोलकर और mount करके इस समस्या को trigger कर सकती थी
- XPC client पहले से
ImageCaptureCoreframework में implement किया गया था
-
patch और bypass
- Apple ने macOS Sonoma 14 में
acceptConnection:में नई जाँच जोड़ी - अगर client के पास
com.apple.private.imagecapturecore.authorization_bypassprivate entitlement हो तो उसे अनुमति दी जाती थी - या अगर client platform binary हो तो भी अनुमति दी जाती थी
- platform binary वाली शर्त को bypass किया जा सकता था क्योंकि Apple-signed binary में dynamic library inject की जा सकती थी
- entitlement के बिना Apple-signed binary
/bin/lsचुना गया DYLD_INSERT_LIBRARIESenvironment variable से पहले वाले exploit code वाली dylib inject की गई- इसके बाद पहले की तरह XPC service से संचार किया गया
- entitlement के बिना Apple-signed binary
- Apple ने इस bypass report को CVE-2024-23253 दिया
- macOS 14.4 में दूसरी शर्त को और कड़ा किया गया, ताकि XPC client सिर्फ platform binary ही न हो बल्कि
CS_REQUIRE_LVयाCS_FORCED_LVflags के साथ signed भी हो - इस patch को भी bypass किया जा सकता था
/bin/lsमें dylib inject की गई- runtime पर
csopsAPI से आवश्यक flags manually set किए गए - इसके बाद XPC service की जाँच पार कर ली गई
- Apple ने इस दूसरे bypass को CVE-2024-40831 दिया
- macOS Sequoia 15 में फिर patch करके केवल उन्हीं XPC clients को अनुमति दी गई जिनके पास
com.apple.private.imagecapturecore.authorization_bypassprivate entitlement है
- Apple ने macOS Sonoma 14 में
CVE-2023-42961: intents_helper
- इस भेद्यता का दुरुपयोग iOS पर भी किया जा सकता है
- भेद्य service
/System/Library/Frameworks/Intents.framework/XPCServices/intents_helper.xpcहै - service sandbox प्रतिबंधों के बिना चल सकती है और सभी XPC clients को अनुमति देती है
filePathForImageWithFileNamefunction में path traversal की वजह से arbitrary path access संभव थाfileNameparameter XPC client द्वारा नियंत्रित किया जा सकने वाला arbitrary string है-
प्रभावित methods
- भेद्य function तक दो XPC methods से पहुँचा जा सकता था
retrieveImageWithIdentifier:completion:का दुरुपयोग.pngextension वाली arbitrary file पढ़ने के लिए किया जा सकता था- पढ़ा गया data
INImageinstance के member variable में store होकर XPC client को लौटाया जाता था purgeImageWithIdentifier:completion:का दुरुपयोग arbitrary file path delete करने के लिए किया जा सकता था
-
patch
- Apple ने macOS Sonoma 14.0 में XPC client input string को normalize करने वाला patch जारी किया
- path traversal में इस्तेमाल होने वाले special characters को काट दिया गया
CVE-2024-27864: diskimagescontroller
- CVE entry लेखन के समय public disclosure की प्रतीक्षा में थी
- भेद्य service
/System/Library/PrivateFrameworks/DiskImages2.framework/XPCServices/diskimagescontroller.xpcहै - इस service के code signing में
com.apple.diskimages.creator-ucentitlement था, जिससे यह शक्तिशाली operations कर सकती थी - इस entitlement की दो मुख्य भूमिकाएँ हैं
- यह FDA entitlement वाले
/usr/libexec/diskimagesiodसे संचार करता है, जो वास्तविक attach operation करता है - यह IOKit service
AppleDiskImagesControllerसे connect होकर DMG files के लिए device बनाता है और quarantine लागू करता है
- यह FDA entitlement वाले
-
भेद्यता का कारण
- service सभी XPC clients को अनुमति देती है
DIControllerProtocolकाattachWithParams:reply:method attack surface था- अंदर से यह
checkAttachEntitlementWithErrorको call करता है, लेकिन नाम के विपरीत यह function हमेशा TRUE लौटाता है DiskImages2.frameworkमें Objective-C classDIAttachParamsके रूप में XPC client पहले से implement किया गया है- framework का client code जाँचता है कि input URL quarantine स्थिति में है या नहीं
- अगर input URL quarantine स्थिति में हो, तो attach से पहले quarantine parameter set किया जाता है, और यह parameter XPC service को target device पर quarantine लागू करने के लिए कहता है
- अपना XPC client बनाने पर quarantine parameter set करना छोड़ा जा सकता है और
attachWithParams:reply:को सीधे call किया जा सकता है - परिणामस्वरूप, quarantined DMG file attach करते समय संबंधित device पर quarantine लागू नहीं किया जा सकता था
-
patch
- Apple ने macOS Sonoma 14.4 में validation logic को client side से server side पर move किया
- यदि input file path quarantine स्थिति में हो, तो server संबंधित device पर सीधे quarantine लागू करता है
CVE-2023-42977: PerfPowerServicesSignpostReader
- भेद्य service
/System/Library/PrivateFrameworks/PowerlogCore.framework/XPCServices/PerfPowerServicesSignpostReader.xpcहै - यह service sandbox प्रतिबंधों के बिना चल सकती थी और सभी XPC clients को अनुमति देती थी
XPCSignpostReaderProtocolमें 6 methods हैं, लेकिन Apple ने केवलsubmitSignpostDataWithConfig:withReply:को implement किया था और बाकी 5 empty implementations थे- इस method का मुख्य logic log data इकट्ठा करके उसे gzip file के रूप में archive करना है
- XPC client द्वारा नियंत्रित
tagUUIDstring सेpowerlogpath को मनचाहे path पर hijack किया जा सकता था -
मनचाहे path को delete करना
- function के भीतर
archiveDirectoryAt:deleteOriginal:को call करकेpowerlogpath delete किया जाता है TagUUIDमें path traversal string डालने पर मनचाहे path deletion primitive मिल सकता है
- function के भीतर
-
मनचाही directory बनाना और पूर्ण sandbox escape
createSignpostFile:functionpowerlogpath पर directory बनाता है- इससे quarantine extended attribute के बिना मनचाही directory बनाई जा सकती है
- quarantine के बिना मनचाही directory creation primitive पूर्ण sandbox escape तक ले जा सकता है
- लेख में CVE-2023-32364 की तकनीक का उपयोग किया गया है
- quarantine के बिना
.appfolder बनाया जाता है Contents/MacOSके नीचे/bin/bashsymlink बनाया जाता हैLSEnvironmentमेंBASH_ENVset किया जाता हैopen ./poc.appसे execute किया जाता है
- quarantine के बिना
-
patch
- Apple ने macOS Sonoma 14.0 में XPC client की UUID string को normalize करने के लिए patch किया
- input string valid UUID न होने पर function तुरंत return कर देता है
दोहराया जाने वाला पैटर्न
- मुख्य attack surface System या User domain की XPC services नहीं, बल्कि system और private frameworks के भीतर की PID domain XPC services हैं
- जिन XPC services का Service Type Application है, वे सिर्फ framework load होने से sandboxed app के PID domain में register हो सकती हैं
- कई भेद्य services ने sandboxed client calls की अपेक्षा नहीं की, इसलिए वे ये checks छोड़ बैठीं
- XPC client entitlement check
- sandboxed client है या नहीं, इसकी जाँच
- input path normalization
- server-side quarantine state verification
- बार-बार exploit की गई शर्तें इस प्रकार थीं
- quarantine के बिना file·folder drop पूर्ण sandbox escape तक ले जा सकता है
- unzip के दौरान quarantine extended attribute हट जाने पर Gatekeeper bypass और sandbox escape हो सकता है
- Service Sandbox द्वारा बनाई गई files पर default रूप से quarantine लागू नहीं होता
- अभी भी patch की प्रतीक्षा में 5 reports बाकी हैं
App Sandbox और Service Sandbox पर अतिरिक्त टिप्पणियाँ
- Apple ने एक report के बारे में कहा कि नया execute हुआ application वर्तमान process context में नहीं होता और वह वर्तमान process के entitlement या privileges share नहीं कर सकता, इसलिए यह expected behavior है
- App Sandbox में drop की गई files पर default रूप से quarantine लागू होता है
- Service Sandbox में drop की गई files पर default रूप से quarantine लागू नहीं होता
- यह तथ्य अपने आप में flaw नहीं माना गया कि नया execute हुआ process वर्तमान service execution context में नहीं होता, इसलिए वह उस service के entitlement या privilege share नहीं करता
- इसके विपरीत, यदि attacker sandbox-restricted service context में RCE हासिल करने के बाद नया non-sandbox app drop और execute करके target service के sandbox प्रतिबंधों से बाहर निकल सकता है, तो इसे flaw माना जा सकता है
- उदाहरण के तौर पर NSO Group के 0-click exploit target IMTranscoderAgent का उल्लेख किया गया है
com.apple.WebDriver.HTTPService.xpcउस उदाहरण के रूप में आता है जोWBSEnableSandboxStyleFileQuarantineAPI को manually call करता है- निष्कर्ष यह है कि App Sandbox से Service Sandbox में escape करना macOS पर व्यवहारिक रूप से Non Sandbox में जाने जैसा है
1 टिप्पणियां
Hacker News की राय
यहाँ XPC services को एक-एक करके अलग से patch करना थोड़ा अजीब लगता है
यह sandbox के अपने design की समस्या जैसा दिखता है, और सवाल है कि apps के अंदर इस्तेमाल के लिए दिखने वाली इतनी सारी XPC services sandboxed apps से accessible क्यों हैं
Windows में भी WinRT sandbox, Win32 app sandbox, secure kernel, driver protection जैसे मिलते-जुलते कई mechanism हैं, लेकिन अलग-अलग configurations में एक ही executable चलाना हो तो backward compatibility की खामियाँ रह जाती हैं
Mobile operating systems के लिए यह काफ़ी आसान है, क्योंकि उनमें backward compatibility नहीं होती और execution model को बहुत सख़्ती से limit किया जा सकता है
MacOS को किसी विशाल blocklist के ढेर जैसी approach के बजाय, capability-based Darwin containers जैसी चीज़ की ज़रूरत है
https://news.ycombinator.com/item?id=37655477
Desktop पर अच्छी तरह काम करने वाला कोई security model नहीं है
दूसरे comment की तरह, iOS पुराने baggage से मुक्त था, इसलिए वह एक ऐसा security model दे पाया जो समझ में आता है
वहीं अगर Telegram contacts और photos की पूरी sharing माँगे, तो लोग सच में allow कर देते हैं
अच्छा काम है
लेकिन शक है कि ऐसी architecture सही दिशा है या नहीं. किसी attack को रोकने के लिए जब भी security framework बनाया जाता है, लगता है पूरी तरह नई तरह की problems निकल आती हैं, और अंत में यह महसूस नहीं होता कि चीज़ें ज़्यादा safe हुई हैं
यह Dutch tax law जैसा है, जहाँ misuse रोकने के लिए patches लगातार जमा होते गए हैं, और शायद अब वह चेतना भी प्राप्त कर चुका हो
सही तरीका अक्सर backward compatibility या developers द्वारा features adopt करने से इनकार के कारण market में fail हो जाता है. WinRT sandbox इसका example है
Phone security आसान थी, क्योंकि backward compatibility की चिंता नहीं थी, और अब तक App Store gatekeeping की वजह से जो developers participate करना चाहते थे, उन्हें मानना ही पड़ता था
आज चल रहे सभी operating systems को अगले century तक secure रखना है तो उन्हें शून्य से फिर बनाना होगा, और इस process में बहुत सारा code फेंकना होगा. यही चुकानी पड़ने वाली कीमत है
अंदाज़ा लगाया जा सकता है कि consumer computing में भी ज़्यादा vulnerabilities डालने की कोशिश करने वाली मजबूत शक्तियाँ हो सकती हैं
इनके मशहूर examples ये हैं
https://en.wikipedia.org/wiki/Dutch_Sandwich
https://en.wikipedia.org/wiki/Intel_Management_Engine#Assert...
MacOS, यानी NeXTstep, शुरुआत से ही एक open और बेहद extensible operating system के तौर पर बनाया गया था
Third-party extensions या hooks जोड़ने के अनगिनत तरीके थे, और कई runtimes से software तक access किया जा सकता था, इसलिए उस समय यह सब smoothly साथ काम करता था—यह अपने-आप में एक impressive technical achievement था
Java, classic Mac, X11, और NeXTstep codebase kernel के कई extension entry points की वजह से बिना समस्या साथ-साथ चलते थे
इसके अलावा platform में ऐसे APIs भी थे जो apps को आपस में आसानी से communicate करने देते थे
लेकिन Apple धीरे-धीरे उस philosophy से पीछे हटता गया, और system को लगातार बंद करता जा रहा है. यह काफ़ी दिलचस्प सफ़र है
SBPL(sandbox profile language) दिलचस्प है. Details यहाँ हैं: https://github.com/0xbf00/simbple
सोच रहा हूँ कि macOS के अंदर इसे handle करने वाला कोई Scheme interpreter कहीं मौजूद है या नहीं
PS: लगता है यह काम
sandbox-execकरता है. संदर्भ: https://reverse.put.as/wp-content/uploads/2011/09/Apple-Sand...प्रभावशाली खोज है. लेख में भी संकेत है कि इसी तरह की कमियाँ अभी भी बाहर मौजूद होने की संभावना बहुत अधिक लगती है
अगर Apple ऐसी services को harden करने की approach को redesign नहीं करता, तो XPC-related CVEs लगातार आते रहेंगे
sandbox मुझे पसंद भी है और नापसंद भी
यह शानदार second line of defense है, लेकिन बड़े organizations sandbox से बाहर निकले बिना meaningful काम न कर पाने वाली remote code execution vulnerabilities को fix करने से इनकार करने की तरफ झुकते हैं. इसलिए sandbox को main defense की तरह इस्तेमाल किया जाने लगता है, और यही दुखद है
मेरी जानकारी में Apple, Microsoft, Google—तीनों के पास bug bounty programs हैं, और sandbox escapes पर बड़ा reward देते हैं, लेकिन sandbox में रुक जाने वाली vulnerabilities पर भी reward देते हैं
सभी अच्छी तरह जानते हैं कि attackers ऐसी remote code execution vulnerabilities जमा रखते हैं जो फिलहाल usable नहीं हैं, और sandbox escape मिलने पर उन्हें साथ में इस्तेमाल करते हैं
विषय से थोड़ा हटकर, लेकिन अगर sandbox विशेषज्ञों में से किसी को maximum "pattern serialization length" सीमा को bypass करने की कोई रणनीति पता हो, तो इस issue ने मुझे काफ़ी समय तक परेशान किया है: https://github.com/NixOS/nix/issues/4119
दुर्भाग्य से
sandbox-execकी documentation लगभग नहीं के बराबर है, और इसे deprecated किए जाने की बातें भी हैं, इसलिए इसे हल करना काफ़ी सिरदर्द हैmacOS में bypasses का सिलसिला कभी खत्म नहीं होता। वजह यह है कि यह operating system मूल रूप से ऐसे granular permissions के लिए कभी design ही नहीं किया गया था
इसे legacy Mac OS और NeXTSTEP technologies के ऊपर बाद में यूं ही नहीं चढ़ाया जा सकता
मैं security researcher भी नहीं, बस पुराने apps का developer हूं, फिर भी मैंने खुद कई bypasses खोजे हैं। कहें तो मुझे पता है कि लाशें कहां दबी हैं
लेकिन आखिरकार मैंने ढूंढना छोड़ दिया। Apple का security vulnerability reporting system पूरी तरह गड़बड़ है, और ऐसा लगा कि उनकी दिलचस्पी बस जितना हो सके उतने लंबे समय तक मुंह बंद रखवाने में है। समय की बर्बादी है
कुल मिलाकर macOS security theater का शिकार लगता है। कमजोर किए गए software और अंतहीन permission requests से users और legitimate developers दोनों को नुकसान होता है, जबकि असली attackers चाहें तो आसानी से bypass कर सकते हैं। यह Apple की पुरानी Windows Vista parody जैसा है
कंपनी अपने bugs ठीक करने के लिए ज्यादा से ज्यादा समय चाहती है, यह खेल का हिस्सा भी है। क्या वे सच में चाहेंगे कि दूसरी कंपनियां मिली हुई vulnerabilities को जितनी जल्दी हो सके public कर दें? users कितनी जल्दी upgrade करेंगे, इस पर आपका control नहीं होता, इसलिए disclosure में देरी करना end users के लिए हमेशा बेहतर होता है और researcher की publicity की इच्छा से ऊपर होना चाहिए
Apple sandbox architecture आम तौर पर काफ़ी अच्छी तरह design किया हुआ लगता है। इस मामले में architecture या communication में कहीं समस्या हुई लगती है
bypasses मौजूद होने की एक वजह यह भी है कि desktop operating systems से बहुत ज्यादा features की मांग की जाती है। desktop operating systems को server platforms की तुलना में कहीं ज्यादा sophisticated और complex operating systems माना जा सकता है। web browsers में इतने CVEs होने की वजह भी यही है। हमें security भी चाहिए और features भी, इसलिए दोनों के टकराने वाला कोई middle ground अनिवार्य रूप से बनता है
पिछले 20 वर्षों में macOS software और hardware को धीरे-धीरे harden किया जाना इसका सबूत है
यह इतना gradual था कि ज्यादातर end users ने ध्यान भी नहीं दिया, लेकिन macOS developers major updates और minor updates दोनों में झेलने पड़ने वाले security-related issues को बहुत अच्छी तरह जानते हैं। उदाहरण के लिए:
https://eclecticlight.co/2024/08/…
https://eclecticlight.co/2024/08/…
https://eclecticlight.co/2024/08/…
https://eclecticlight.co/2024/09/…
capability-based systems हैं, लेकिन वास्तव में व्यापक रूप से इस्तेमाल होने वाला कोई नहीं है
समाधान क्या है, यह ठीक से नहीं पता। फिर भी security को ऊपर से जोड़ने की कोशिश कुछ न करने से बेहतर लगती है, जहां किसी application vulnerability का मतलब तुरंत पूरे user account पर कब्जा हो जाना हो
pid domain में छूट गई XPC services macOS sandbox restrictions को bypass करने का smart तरीका हैं
permission checks से बचने वाली
dyldinjection trick भी साफ-सुथरी हैApple के patches यहां अस्थायी उपाय जैसे लगते हैं, और शायद sandbox inheritance के काम करने के तरीके को ठीक से दुरुस्त करना पड़े