Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

English | 中文版

附录:GPU/NPU 生态中的真实内存安全漏洞

第 6 节中的六组内存安全案例研究展示了 Rust 能预防常见错误的结构性模式。然而,加速器代码中的内存安全不仅是理论问题——它已导致在野外被积极利用的零日漏洞、生产环境崩溃和安全事件,涉及所有主要 GPU/NPU 厂商。本附录记录具体的、可引用的案例。

A.1 ARM Mali GPU:被间谍软件利用的 Use-After-Free(CVE-2023-4211)

ARM Mali GPU 内核驱动的 VMA 跟踪中存在 use-after-free 漏洞,允许在数十亿安卓设备上进行权限提升。攻击者可通过 munmap() 分割多页跟踪 VMA,导致清理例程在记账仍在进行时将 kctx->process_mm 置空。Google TAG 确认此漏洞被商业监控软件供应商积极利用。Rust 的所有权模型从根本上防止 use-after-free——已释放的 VMA 会被消费/丢弃,任何后续引用都会产生编译期错误。

来源: Google Project Zero; Arm 安全公告

A.2 ARM Bifrost/Valhall GPU:被积极利用的零日漏洞(CVE-2024-4610)

ARM GPU 驱动中的另一个 use-after-free,影响 Bifrost 和 Valhall 架构(r34p0-r40p0)。CISA 确认该漏洞在数亿智能手机和嵌入式设备上被在野利用。Rust 的借用检查器强制执行独占可变访问,使悬垂引用模式不可能发生。

来源: CISA KEV 目录

A.3 NVIDIA GPU 驱动:越界写入(CVE-2024-0090)

NVIDIA Linux/Windows GPU 显示驱动中的越界写入漏洞,允许权限提升。Rust 的切片访问边界检查会通过安全的 panic 捕获此问题,而非静默的内存损坏。

来源: NVD; SecurityWeek

A.4 AMDGPU Fence:Use-After-Free 竞态条件(CVE-2023-51042)

Linux AMDGPU 驱动的 amdgpu_cs_wait_all_fences() 中的竞态条件允许代码访问已释放的 fence 对象,导致内核崩溃和潜在的权限提升,Red Hat、SUSE 和 Ubuntu 紧急发布补丁。Rust 的所有权模型使数据竞争成为编译期错误——fence 将由 Arc<Mutex<...>> 保护,同时防止 use-after-free 和底层竞态。

来源: NVD

A.5 NVIDIA CUDA Toolkit:整数溢出导致堆缓冲区溢出(CVE-2024-53873)

NVIDIA CUDA Toolkit cuobjdump 工具中的九个漏洞,由 cubin 文件解析时的整数溢出导致堆缓冲区溢出。Rust 的检查算术(debug 模式溢出 panic,显式包装需要 wrapping_mul)防止整数溢出,Vec/切片边界检查防止后续堆损坏。

来源: Palo Alto Unit42

A.6 Qualcomm Adreno GPU:三个被定向攻击利用的零日漏洞(CVE-2025-21479/21480/27038)

Qualcomm Adreno GPU 驱动中的三个零日漏洞,包括未授权 GPU 微码命令执行和渲染期间的 use-after-free。在针对数十亿安卓设备的定向攻击中被积极利用。Rust 的内存安全保障防止 UAF,所有权模型约束对 GPU 资源的操作。

来源: The Hacker News; BleepingComputer

A.7 PyTorch CUDA 内核:静默越界访问(Issue #37153)

在 PyTorch 的 Reduce.cuh 中,对标量输入访问 iter.shape()[0](此时 iter.shape() 返回空数组)导致越界内存读取。这导致了极难复现或诊断的间歇性测试失败——典型的静默数据损坏模式。Rust 的切片索引在空切片访问时 panic,而非静默读取垃圾内存。

来源: PyTorch Issue #37153

A.8 TensorFlow GPU 内核:反复出现的堆缓冲区溢出(CVE-2023-25668, CVE-2020-15198, CVE-2019-16778)

TensorFlow GPU 内核中的堆缓冲区溢出模式:QuantizeAndDequantize 越界读取(CVE-2023-25668),SparseCountSparseOutput 张量形状不匹配(CVE-2020-15198),UnsortedSegmentSum 将 int64 截断为 int32 产生负索引(CVE-2019-16778)。这些漏洞尤其危险,因为从不可信来源加载的 ML 模型可以触发它们。Rust 防止所有三种情况:边界检查捕获溢出,类型系统强制形状一致性,显式 as 转换语义防止静默截断。

来源: Snyk: CVE-2023-25668; GitHub Advisory: CVE-2019-16778

A.9 GPU 内存利用的乐趣与利益(USENIX Security 2024)

学术研究表明,CUDA 内核全局内存中的缓冲区溢出可被利用进行代码注入、GPU 上的返回导向编程,以及跨租户 ML 模型权重篡改。与 CPU 不同,GPU 内存空间缺乏 ASLR、栈金丝雀等标准保护。恶意 GPU 内核可以在共享 GPU 云部署中篡改其他租户的模型权重。Rust 的边界检查在安全代码中完全防止缓冲区溢出——正是本文所展示的攻击类别。

来源: USENIX Security 2024

总结

CVE组件漏洞类型是否被利用?
CVE-2023-4211ARM Mali GPU 驱动Use-after-free是(间谍软件)
CVE-2024-4610ARM Bifrost/Valhall GPUUse-after-free
CVE-2024-0090NVIDIA GPU 驱动越界写入已修补
CVE-2023-51042AMDGPU Linux 驱动Use-after-free(竞态)已修补
CVE-2024-53873NVIDIA CUDA Toolkit堆缓冲区溢出已修补
CVE-2025-21479Qualcomm Adreno GPU内存损坏 / UAF是(定向攻击)
#37153PyTorch CUDA 内核越界读取N/A
CVE-2023-25668+TensorFlow GPU 内核堆缓冲区溢出N/A
USENIX ’24CUDA 内存模型缓冲区溢出(跨租户)已演示

每个主要 GPU/NPU 厂商——NVIDIA、AMD、ARM、Qualcomm——都在其加速器驱动和工具链中发布过包含内存安全漏洞的版本。其中至少四个在野外被积极利用。漏洞类型——use-after-free、越界写入、缓冲区溢出、竞态条件——正是 Rust 的所有权模型、借用检查器和边界检查在编译期消除的类别。这就是 ascend-rs 的实际动机:不仅是更干净的代码,而是消除具有现实安全后果的漏洞。