
تسريب معلومات مكدس النواة في دالة exportObjectToClient
تسريب معلومات من مكدس النواة في دالة exportObjectToClient
تفاصيل الثغرة:
macOS<=10.14.3 && iOS < 12.2
توجد ثغرة في الدالة exportObjectToClient في فئة IOKit، والتي يمكن أن تؤدي إلى تسريب 4 بايتات من معلومات مكدس النواة. إنّ exportObjectToClient، كما يوحي اسمها، تجعل أي كائن OSObject متاحًا لمهمة العميل. إنها دالة أساسية تستخدمها العديد من دوال النواة الأخرى.
IOReturn IOUserClient::exportObjectToClient(task_t task, OSObject *obj, io_object_t *clientObj)
{
mach_port_name_t name; name = IOMachPort::makeSendRightForTask( task, obj, IKOT_IOKIT_OBJECT );
*(mach_port_name_t *)clientObj = name; // (1). force the type convert to mach_port_name_t
if (obj) obj->release();
return kIOReturnSuccess;
}
نعلم أن طول io_object_t هو 8 بايتات، وعند (1) يتم تحويل النوع قسريًا إلى mach_port_name_t (4 بايتات)، لذا يؤدي ذلك إلى أن البايتات الأربعة العليا تبقى غير مهيأة.