
إثبات المفهوم وشرح للثغرة الأمنية 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 لا تستخدم أي تقنيات مزامنة لتسلسل استدعاءات الطرق الخارجية. هذا يعني أنه من الممكن للمهاجم تحرير الذاكرة مرتين (double-free) للبنية delta_create_ctx_t والخصائص المرتبطة بها، من خلال مضاهاة استدعاءين للطريقة AppleAPFSUserClient::methodDeltaCreateFinalize على نفس userclient، حيث سيتمكن كلاهما من الاستدعاء إلى AppleAPFSContainer::deltaCreateTeardown (الطريقة المسؤولة عن تحرير delta_create_ctx_t) قبل تعيين this->deltaCreateCtx إلى NULL.
لتفعيل هذا، يحتاج المهاجم أولاً إلى إنشاء "سياق إنشاء دلتا" (delta create context) على userclient باستخدام الطريقة الخارجية AppleAPFSUserClient::methodDeltaCreatePrepare (المحدد 36). يتطلب هذا وحدة تخزين غير مُحمّلة لكي تعمل، لذا يتطلب سير الاستغلال العادي من المهاجم أيضًا إنشاء وحدة تخزين هدف باستخدام الطريقة الخارجية AppleAPFSUserClient::methodVolumeCreate، الأمر الذي يتطلب صلاحيات الجذر (superuser). ولهذا السبب وصفت Apple تأثير الثغرة على النحو التالي:
قد يتمكن تطبيق بصلاحيات الجذر من تنفيذ كود تعسفي بصلاحيات النواة
يتضمن هذا المستودع استغلالًا لإثبات المفهوم لهذه المشكلة يسبب تعطلًا للنواة (kernel panic) على إصدارات macOS المعرضة للخطر عن طريق تقليل عدد مراجع كائن في النواة (reference count). يجب تنفيذ هذا الاستغلال بصلاحيات الجذر للأسباب المذكورة أعلاه.
تم تصحيح CVE-2022-32832 عن طريق إضافة استدعاءات IOLockLock وIOLockUnlock إلى AppleAPFSUserClient::methodDeltaCreateFinalize لحماية الكود المعرض للخطر.