
कर्नेल स्टैक जानकारी लीक exportObjectToClient function में
Kernel Stack जानकारी लीक 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 बाइट्स) में forcibly convert किया गया, जिससे उच्च 4 बाइट्स प्रारंभ नहीं हुए।