AMD 基于 Zen 2 的 CPU(其中包括 Ryzen 5 3600、3700X 等热门芯片)存在“use-after-free”漏洞,为此AMD 更新了其安全公告,新发布的文章 ID 为 AMD-SB-7008。
台式机方面,AMD的Ryzen 3000系列(Mattise)、Ryzen 4000和4000G系列(Renoir)榜上有名;移动设备方面,包括Ryzen 5000(Lucienee)、Ryzen 4000(Renoir)和Ryzen 7020(Mendocino)。
AMD 的安全公告总结了 ID CVE-2023-20593 追踪的新漏洞,还列出了将修补 Zenbleed 漏洞的 AGESA 固件。其中大部分固件计划于 2023 年 10 月至 12 月间发布:
https://www.amd.com/en/resources/product-security/bulletin/amd-sb-7008.html
谷歌安全漏洞研究员塔维斯-奥曼迪(Tavis Ormandy)发现了这一漏洞,并在博文中对此进行了解释。该问题与 128 位寄存器 (XMM) 和从错误预测的 vzeroupper 错误恢复有关。奥曼迪写道:
原来,通过精确调度,可以使某些处理器从错误预测的 vzeroupper 错误中恢复过来!
这个错误的原理是这样的:首先,你需要触发一种叫做 XMM 寄存器合并优化的东西,然后是寄存器重命名和错误预测的 vzeroupper。这一切都必须在一个精确的窗口内发生才能起作用。
我们现在知道,strlen、memcpy 和 strcmp 等基本操作将使用矢量寄存器,因此我们可以有效地监视系统中任何地方发生的这些操作!无论这些操作是在其他虚拟机、沙箱、容器、进程中进行的,都没有关系!
之所以能做到这一点,是因为寄存器文件被同一物理内核上的所有设备共享。事实上,两个超线程甚至可以共享同一个物理寄存器文件。
如果您不知道,UAF(Use-After-Free)是一种安全漏洞,当程序或应用程序在释放动态内存部分后未能正确管理内存指针时,就会出现这种安全漏洞,进而导致攻击者执行代码。
指针存储与应用程序正在使用的内存的某个地址相关的数据。但动态内存会被不断刷新和重新分配,供不同的应用程序使用。但是,如果指针在其相应的内存空间被释放或解除分配后没有设置为空,攻击者就可以成功利用指针数据访问相同的内存部分,从而传递任意恶意代码。这就是该漏洞被命名为 "Use-After-Free "的原因。
AMD 在给 Tom's Hardware 的一份声明中表示,尽管目前还没有利用该漏洞的案例,但性能影响(如果有的话)将因工作负载和系统配置而异。
任何性能影响都将因工作负载和系统配置而异。在研究环境之外,AMD 未发现任何利用所述漏洞的已知情况。