
CVE-2022-32832 भेद्यता के लिए प्रमाण-की-अवधारणा और लेख, जो iOS 15.6 में पैच किया गया था
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) एक्सटर्नल मेथड का उपयोग करके यूज़रक्लाइंट पर एक "delta create context" बनाना होगा। इसके काम करने के लिए एक अनमाउंटेड वॉल्यूम की आवश्यकता होती है, इसलिए एक सामान्य एक्सप्लॉइट फ्लो में हमलावर को AppleAPFSUserClient::methodVolumeCreate एक्सटर्नल मेथड का उपयोग करके एक टार्गेट वॉल्यूम भी बनाना होता है, जिसके लिए सुपरयूज़र अनुमतियाँ आवश्यक हैं। इसी कारण Apple ने कमजोरी के प्रभाव को इस प्रकार वर्णित किया:
root अनुमतियों वाला ऐप कर्नेल अनुमतियों के साथ मनमाना कोड निष्पादित कर सकता है
इस रिपॉजिटरी में इस समस्या के लिए एक प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट शामिल है जो असुरक्षित macOS संस्करणों पर कर्नेल पैनिक का कारण बनता है, जो एक कर्नेल ऑब्जेक्ट के रेफरेंस काउंट को अंडरफ्लो करके होता है। ऊपर बताए गए कारणों से इस एक्सप्लॉइट को रूट के रूप में निष्पादित किया जाना चाहिए।
CVE-2022-32832 को IOLockLock और IOLockUnlock कॉल को AppleAPFSUserClient::methodDeltaCreateFinalize में जोड़कर पैच किया गया था ताकि कमजोर कोड को सुरक्षित किया जा सके।