
Kernel-Stack-Informationsleck in der Funktion exportObjectToClient
Kernel-Stack-Info-Leak in der Funktion exportObjectToClient
Bug-Details:
macOS<=10.14.3 && iOS < 12.2
Es gibt einen Fehler in der Funktion exportObjectToClient in der IOKit-Klasse, der zum Leaken von 4 Bytes Kernel-Stack-Informationen führen kann. exportObjectToClient macht, wie der Name schon sagt, ein beliebiges OSObject für die Client-Task verfügbar. Es ist eine grundlegende Funktion, die von vielen anderen Kernel-Funktionen verwendet wird.
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;
}
Wir wissen, dass io_object_t eine Länge von 8 Bytes hat, und an (1) wird es gezwungenermaßen in mach_port_name_t (4 Bytes) umgewandelt, sodass die oberen 4 Bytes nicht initialisiert sind.