Windows内核EPATHOBJ 0day漏洞
发布时间:2016-11-21 11:38:30 所属栏目:交互 来源:站长网
导读:Windows内核EPATHOBJ 0day漏洞是通过对PATHALLOC()进行内存压力测试爆出的,首先利用PATHREC指向相同的的用户空间PATHREC EPATHOBJ::bFlatten它会自旋进行无限链表遍历。 如:PathRecord-next = PathRecord; 虽然它会自旋,但它会通过另一个线程池来打补丁(p
Windows内核EPATHOBJ 0day漏洞是通过对PATHALLOC()进行内存压力测试爆出的,首先利用PATHREC>指向相同的的用户空间PATHREC EPATHOBJ::bFlatten它会”自旋”进行无限链表遍历。 如:PathRecord->next = PathRecord; 虽然它会自旋,但它会通过另一个线程池来打补丁(pprFlattenRec)到列表中的节点(因为它是在用户空间)。 首先,创建一个”监控线程( watchdog)”,atomically补丁列表,因为pprFlattenRec过早退出,bug不能被利用会导致HeavyAllocPool pprFlattenRec :.text:BFA122B8 call newpathrec ; EPATHOBJ::newpathrec(_PATHRECORD * *,ulong *,ulong) .text:BFA122BD cmp eax, 1 ; Check for failure .text:BFA122C0 jz short continue .text:BFA122C2 xor eax, eax ; Exit early .text:BFA122C4 jmp early_exit 所以要创建一个这样的节点列表: PathRecord->Next = PathRecord;PathRecord->Flags = 0; 然后 EPATHOBJ::bFlatten()自旋: BOOL __thiscall EPATHOBJ::bFlatten(EPATHOBJ *this){ /* ... */ for ( ppr = ppath->pprfirst; ppr; ppr = ppr->pprnext ) { if ( ppr->flags & PD_BEZIER ) { ppr = EPATHOBJ::pprFlattenRec(pathobj, ppr); } } /* ... * |