
Perdita di informazioni dello stack del kernel nella funzione exportObjectToClient
Perdita di informazioni dallo stack del kernel nella funzione exportObjectToClient
dettagli del bug:
macOS<=10.14.3 && iOS < 12.2
C'è un bug nella funzione exportObjectToClient della classe IOKit, che può portare alla perdita di 4 byte di informazioni dallo stack del kernel. exportObjectToClient, come suggerisce il nome, rende disponibile un OSObject arbitrario al task client. È una funzione di base, molte altre funzioni del kernel la usano.
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;
}
Sappiamo che la lunghezza di io_object_t è di 8 byte e in (1) viene forzata la conversione a mach_port_name_t (4 byte), quindi i 4 byte alti non vengono inizializzati.