我正在使用地址清理器在Firefox构建中玩释放后使用漏洞。假设在利用释放后使用漏洞时,我们设法在放置释放的对象 A 的位置分配一个新对象 B,因此悬空指针指向新对象 B 中的某个位置,我有两个问题:
(1( 当我们取消引用悬空指针时,ASAN 是否仍会检测并报告与悬空指针和释放对象相关的释放后使用?
(2( 如果取消引用悬空指针现在由于指向不同的对象(B(而导致崩溃,那么ASAN是在崩溃之前还是崩溃之后检测到UAF?
假设在利用释放后使用漏洞时,我们设法在放置释放对象 A 的位置分配一个新对象 B
AddressSanitizer 以及大多数其他调试堆实现都具有隔离缓冲区。释放的存储不会在很长一段时间内重复使用,因此可以捕获任何悬空指针的使用。
(1( 当我们取消引用悬空指针时,ASAN 是否仍会检测并报告与悬空指针和释放对象相关的释放后使用?
不。如果您等待足够长的时间(或隔离缓冲区已用尽(以重新使用存储,则 ASAN 将不知道有任何问题。
(2( ...ASAN 是在崩溃之前还是之后检测到 UAF?
也不。一旦存储被重新使用,ASAN 就不知道出了什么问题。如果程序崩溃,ASAN只会告诉您"您的程序已崩溃",但不会帮助说明它崩溃的原因。