
CVE-2022-32832 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट और तकनीकी विश्लेषण, macOS पर Apple APFS कर्नेल रेस स्थिति जो विशेषाधिकार वृद्धि को सक्षम बनाती है।
CVE-2022-32832 AppleAPFSUserClient::methodDeltaCreateFinalize बाहरी विधि (सेलेक्टर 49) में एक भेद्यता है। यहाँ पैच-पूर्व डीकंपाइलेशन है:
__int64 __cdecl AppleAPFSUserClient::methodDeltaCreateFinalize(AppleAPFSUserClient *this, void *a2, IOExternalMethodArguments *args)
{
void *ctx;
__int64 result;
ctx = this->deltaCreateCtx;
if ( !ctx )
return 0xE00002D8LL;
AppleAPFSContainer::deltaCreateTeardown(ctx);
result = 0LL;
this->deltaCreateCtx = 0LL;
return result;
}
AppleAPFSUserClient::externalMethod बाहरी विधि कॉल को क्रमबद्ध करने के लिए किसी भी सिंक्रनाइज़ेशन तकनीक का उपयोग नहीं करता है। इसका मतलब है कि एक हमलावर के लिए यह संभव है कि वह एक ही यूज़रक्लाइंट पर AppleAPFSUserClient::methodDeltaCreateFinalize के दो कॉल को रेस करके delta_create_ctx_t और संबंधित गुणों को डबल-फ्री कर सके, क्योंकि this->deltaCreateCtx को NULL सेट करने से पहले दोनों AppleAPFSContainer::deltaCreateTeardown (वह विधि जो delta_create_ctx_t को मुक्त करने के लिए जिम्मेदार है) में कॉल कर सकेंगे।
इसे ट्रिगर करने के लिए, एक हमलावर को पहले बाहरी विधि AppleAPFSUserClient::methodDeltaCreatePrepare (सेलेक्टर 36) का उपयोग करके यूज़रक्लाइंट पर एक "डेल्टा क्रिएट कॉन्टेक्स्ट" बनाना होता है। इसके कार्य करने के लिए एक अनमाउंटेड वॉल्यूम की आवश्यकता होती है, इसलिए एक सामान्य शोषण प्रवाह में हमलावर को बाहरी विधि AppleAPFSUserClient::methodVolumeCreate का उपयोग करके एक लक्ष्य वॉल्यूम भी बनाना होता है, जिसके लिए सुपरयूज़र विशेषाधिकारों की आवश्यकता होती है। यही कारण है कि Apple ने भेद्यता के प्रभाव का वर्णन इस प्रकार किया:
रूट विशेषाधिकारों वाला कोई ऐप कर्नेल विशेषाधिकारों के साथ मनमाना कोड निष्पादित करने में सक्षम हो सकता है
इस रिपॉजिटरी में इस समस्या के लिए एक प्रूफ-ऑफ-कॉन्सेप्ट शोषण शामिल है जो एक कर्नेल ऑब्जेक्ट के संदर्भ गणना को अंडरफ्लो करके संवेदनशील macOS संस्करणों पर कर्नेल पैनिक का कारण बनता है। ऊपर बताए गए कारणों से इस शोषण को रूट के रूप में निष्पादित किया जाना चाहिए।
CVE-2022-32832 को AppleAPFSUserClient::methodDeltaCreateFinalize में IOLockLock और IOLockUnlock कॉल जोड़कर पैच किया गया था ताकि संवेदनशील कोड की सुरक्षा की जा सके।