thin-vec: Use-After-Free and Double Free in IntoIter::drop When Element Drop Panics 漏洞概述 在 crate 的 和 实现中发现了一个双重释放(Double Free)/ 释放后使用(Use-After-Free, UAF)漏洞。这两个漏洞共享相同的根本原因:当在顺序元素释放期间发生 panic 时,随后的清理代码( )永远不会被执行。在栈展开过程中,容器被再次丢弃,导致已释放的内存被重新释放。 影响范围 受影响版本: 0.2.15 修复版本: 0.2.16 漏洞分类: - CWE-415: Double Free - CWE-416: Use-After-Free 触发条件: 1. 存储堆拥有的类型(如 , , 等)。 2. 通过 创建迭代器,并在完全消耗前丢弃,或者 在剩余元素触发 panic 时调用。 3. 剩余元素的 Drop 实现会触发 panic。 潜在影响: 结合 类型,利用原始指针算术,已通过堆喷和 vtable 劫持确认可实现任意代码执行(ACE)。 修复方案 两种漏洞都可以通过相同的模式解决: DropGuard 模式: 在调用 之前插入一个 RAII 守卫,以确保 无论是否发生 panic 都会被调用。 预置零方法: 在调用 之前将长度设置为 0。 POC 代码 PoC-1: IntoIter::drop PoC-2: ThinVec::clear