释放后使用
释放后使用 是什么?
释放后使用程序在内存被释放之后仍继续使用该内存的安全缺陷,通常使攻击者得以控制对象状态并劫持执行。
释放后使用(Use-After-Free,UAF)是指 free()/delete 释放对象之后,指针仍在引用该对象。若攻击者能令同一块内存被重新分配为另一种对象——这一技术称为堆布局操纵或"堆风水"(heap feng shui)——这个悬空指针实际上就形成了类型混淆,非常适合用于覆盖虚函数指针、回调地址或敏感状态。UAF 主导着浏览器与内核的利用,并被归类为 CWE-416。
一些有名的案例说明了它的影响。CVE-2018-8174 是 VBScript 引擎中一个可经由 Internet Explorer 触达的 UAF,被武器化为"Double Kill"零日漏洞,并被纳入漏洞利用工具包。CVE-2022-0609 是 Chrome 的 Animation 组件中的一个 UAF,曾作为零日漏洞在野被利用;谷歌威胁分析小组(TAG)将相关攻击活动归因于针对媒体和金融科技公司的朝鲜国家级行为者。正是由于这类缺陷如此普遍,微软和谷歌都报告称,其历史 CVE 中约 70% 源自内存安全错误,这也推动整个行业转向 Rust。
flowchart TD A[对象已分配 指针 P 引用它] --> B["free 或 delete 被调用"] B --> C[P 成为悬空指针 内存归还给分配器] C --> D[攻击者喷射堆以重新占用该槽位] D --> E[同一内存被重新分配为攻击者控制的对象] E --> F[程序解引用 P] F --> G[类型混淆 劫持虚表与控制流]
防御措施包括严谨的所有权模型(RAII、智能指针)、垃圾回收或内存安全语言(如 Rust)、强化的分配器(隔离区、隔离池、GWP-ASan),以及 KASAN/Valgrind 测试。浏览器还部署了 MiraclePtr 与 PartitionAlloc 风格的保护机制。
● 示例
- 01
CVE-2018-8174(VBScript 引擎):被 APT 利用的 UAF。
- 02
CVE-2022-0609(Chrome 动画):作为零日被利用的 UAF。
● 常见问题
释放后使用 是什么?
程序在内存被释放之后仍继续使用该内存的安全缺陷,通常使攻击者得以控制对象状态并劫持执行。 它属于网络安全的 漏洞 分类。
释放后使用 是什么意思?
程序在内存被释放之后仍继续使用该内存的安全缺陷,通常使攻击者得以控制对象状态并劫持执行。
如何防御 释放后使用?
针对 释放后使用 的防御通常结合技术控制与运营实践,详见上方完整定义。
释放后使用 还有哪些其他名称?
常见的别称包括: UAF。