
Fuga de información de la pila del kernel en la función exportObjectToClient
Fuga de información de la pila del kernel en la función exportObjectToClient
detalles del error:
macOS<=10.14.3 && iOS < 12.2
Hay un error en la función exportObjectToClient de la clase IOKit, que puede provocar una fuga de 4 bytes de información de la pila del kernel. exportObjectToClient, como su nombre indica, pone un OSObject arbitrario a disposición de la tarea del cliente. Es una función básica, muchas otras funciones del kernel la utilizan.
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;
}
Sabemos que io_object_t tiene una longitud de 8 bytes y en (1) se fuerza la conversión a mach_port_name_t (4 bytes), por lo que los 4 bytes superiores no se inicializan.