
Vazamento de informações da pilha do kernel na função exportObjectToClient
Vazamento de informações da pilha do kernel na função exportObjectToClient
detalhes do bug:
macOS<=10.14.3 && iOS < 12.2
Existe um bug na função exportObjectToClient na classe IOKit, que pode levar ao vazamento de 4 bytes de informações da pilha do kernel. exportObjectToClient, como o nome indica, torna um OSObject arbitrário disponível para a tarefa do cliente. É uma função básica, muitas outras funções do kernel a utilizam.
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 o comprimento de io_object_t é 8 bytes e em (1) foi feita uma conversão forçada para mach_port_name_t (4 bytes), levando a que os 4 bytes altos não sejam inicializados.