
Утечка информации из стека ядра в функции exportObjectToClient
Утечка информации из стека ядра в функции 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 байта), поэтому старшие 4 байта не инициализируются.