HeadlinesBriefing favicon HeadlinesBriefing.com

CVE-2025-13032:Avast 防病毒沙盘逃逸利用

Hacker News •
×

Introduction 这篇博客文章是我们 Avast 研究系列的第二部分也是最后一部分,将重点关注对 CVE-2025-13032 的利用,这是我们在 Avast 的内核驱动中发现的双重取值漏洞。本文回顾了该漏洞,并演示了如何在当时的最新 Windows 11 系统上利用它。如果您错过了第一部分,请点击阅读 → https://www.safateam.com/intelligence-hub/research/technical-articles/cve-2025-13032-entering-and-breaking-the-avast-antivirus-sandbox-part-1

Bug Explanation 我们想要利用的漏洞是一个导致内核池溢出的双重取值问题。下面展示的代码片段本应捕获由用户提供的 `_UNICODE_STRING` 结构,但用户输入的 `Length` 字段被多次获取,从而导致了双重取值问题。第一次取值是为了分配一个字符串将被复制的缓冲区,第二次取值是基于检索到的值执行 memcpy,结果如果用户在这两次操作之间更改了它,就会导致内存池溢出。要利用双重取值,第二个线程在紧循环中运行,持续在共享的 `_UNICODE_STRING` 的 `Length` 字段之间切换一个安全的小值和一个大的恶意值(例如 `0x1000`,大于已分配的缓冲区)。主线程循环调用易受攻击的 IOCTL。当时机对齐——内核在 `ExAllocatePoolWithTag` 调用中将 `Length` 读取为小值,然后在 `memmove` 中将其读取为大值——复制的字节数多于已分配的字节,从而产生内存池溢出。竞争窗口很窄,但可以在适度的迭代次数内可靠地获胜。我们的目标是利用此内存池溢出获得任意内核读写原语并实现本地特权提升。该漏洞为我们提供了良好的利用条件:溢出目标是 `PAGED_POOL`,分配大小和溢出大小均受控,内容也受控。Paged Pool 是 Windows 内核用于对象和数据的内存区域,这些内核或驱动程序需要这些内存,但这些内存可以被分页到磁盘。它用于不需要由高优先级关键代码访问的内存。分配器按大小类别分组,这意味着大小相同的对象倾向于在内存中靠近——这一属性使得堆喷射变得可行。自 Windows 10 19H1 以来,这由 Segment Heap 处理,它使用两个后端:LFH 用于小型分配,在大小桶内随机选择空闲槽,VS 分配器用于较大的分配,提供右大小的第一个可用块——每种都需要不同的喷射策略。我们还可以注意,大多数 Windows 对象都存储在 paged ...