Entry № 391
重复释放
重复释放 是什么?
重复释放对同一堆块进行两次释放的内存安全缺陷,会破坏分配器元数据,通常可被用于实现任意代码执行。
重复释放(double free)是指在同一指针上多次调用 free()/delete。分配器的空闲链表或 bin 结构变得不一致,攻击者可以让后续分配返回受其影响的内存,或与活动对象重叠,从而获得任意写入与代码执行的原语。被归类为 CWE-415,常与 use-after-free 和 double-fetch 共同出现。防御措施包括单一所有权模式(RAII、智能指针)、释放后将指针置 NULL、采用具备双释放检测的强化分配器(如 glibc tcache 防护、scudo)、使用 AddressSanitizer 测试以及内存安全语言。
● 示例
- 01
CVE-2015-1322:glibc tcache 双释放导致堆破坏。
- 02
CVE-2019-19377:由畸形镜像触发的 Linux btrfs 双释放。
● 常见问题
重复释放 是什么?
对同一堆块进行两次释放的内存安全缺陷,会破坏分配器元数据,通常可被用于实现任意代码执行。 它属于网络安全的 漏洞 分类。
重复释放 是什么意思?
对同一堆块进行两次释放的内存安全缺陷,会破坏分配器元数据,通常可被用于实现任意代码执行。
如何防御 重复释放?
针对 重复释放 的防御通常结合技术控制与运营实践,详见上方完整定义。
重复释放 还有哪些其他名称?
常见的别称包括: 重复释放漏洞。