
커널 스택 정보 누출 (exportObjectToClient 함수)
exportObjectToClient 함수에서 커널 스택 정보 누출
버그 세부사항:
macOS<=10.14.3 && iOS < 12.2
IOKit 클래스의 exportObjectToClient 함수에 버그가 있어 커널 스택 정보 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바이트가 초기화되지 않습니다.