针对 NVIDIA Linux GPU 驱动程序中的两项发现的 PoC 代码和原始证据, 两项发现均通过 NVIDIA 的 VDP 提交,且均被 NVIDIA 以“符合预期/预期行为”为由关闭。 发布本文档旨在使该行为有据可查且可复现;两项发现均无 CVE 编号,且均不会被修复。
| # | 发现 | 类别 | 厂商结论 | 目录 |
|---|---|---|---|---|
| 1 | 通过 NVML 实现跨 UID GPU 进程遥测 | 信息泄露(CWE-200 / CWE-862) | “符合预期行为”;已于 2026-08-20 获得书面授权的公开披露 | 01-nvml-cross-uid-telemetry/ |
| 2 | 通过 P2P 拆除竞态实现非特权 Xid 31 拷贝引擎 MMU 故障 | GPU 故障,非特权且确定性触发 | “属于预期行为,因此不是缺陷”,于 2026-08-04 关闭 | 02-xid31-p2p-teardown-race/ |
已在驱动程序 595.71.05-open、A100-SXM4-80GB x4(NV4 全网格,无 NVSwitch,MIG 关闭)、 Ubuntu 24.04 / 内核 6.8.0、CUDA 工具包 12.9 上完成测试。发现 1 也已在 565.57.01-open 上复现。
发现 1 是真实的跨 UID 暴露。发现 2 是影响未经证实的故障。 两者强度不同,本文档也未将其等同呈现。
发现 2 证明非特权用户能够确定性触发 NVLink GPU 对故障(5/5,可归因至 PID,对照 4/4 干净的阴性对照)。它并未证明该故障的持续时间超过触发进程。该测量从未进行——测试装置在探测前反射性地重置了 GPU,且节点在可重复测试前已被取消配置。有两项独立证据表明该故障会自行清除:NVIDIA 的 Xid 目录将 Xid 31 归类为需立即执行 RESTART_APP 操作,且 GPU 自身的 Recovery Action 字段在重置前读取为 None。在有人于 02-xid31-p2p-teardown-race/ 中运行进程终止后的金丝雀测试之前,请将此视为影响范围未经证实的故障,而非拒绝服务。
如果您有闲置的 NVLink 对,那一个实验是任何人能在此做出的最有价值的贡献。只需几分钟。
git clone https://github.com/abhinavagarwal07/nvidia-gpu-security-poc
cd nvidia-gpu-security-poc
./capture_env.sh # 记录您主机的设备权限、驱动程序、拓扑、/proc 选项
# 发现 1 — 需要第二个用户运行任意 CUDA 工作负载
(cd 01-nvml-cross-uid-telemetry/poc && make && ./nvml_harvest)
# 发现 2 — 需要两块 NVLink 连接的 GPU。会使 GPU 对发生故障。请勿在共享硬件上运行。
(cd 02-xid31-p2p-teardown-race/poc && ./build.sh && \
CUDA_VISIBLE_DEVICES=0,1 ./p2p_teardown_race_verbose --a 0 --p 1)
capture_env.sh 的输出是您在报告与我们结果存在差异时应附上的内容——它会记录 ls -l /dev/nvidia*、/proc/driver/nvidia/params 的设备模式条目、/proc 挂载选项(hidepid= 挂载会改变发现 1 的结果)、拓扑、驱动程序及 pynvml 版本。
发现 2 会故意使 GPU 对发生故障。它会在内核日志中产生 Xid 31 条目,并可能需要 nvidia-smi --gpu-reset 来清除——在 Ampere 代 NVLink/NVSwitch 系统上,NVIDIA 文档记载在致命主干链路情况下,恢复是织物级操作,而非单 GPU 操作。请仅在您拥有或已获得书面授权可中断的硬件上运行,且无其他租户。 所有原始测试均在授权集群租约下、由研究者控制的单租户节点上完成。
发现 1 是只读且被动的。它读取驱动程序已向每个本地用户暴露的遥测数据;不写入任何内容,也不注入任何内容。
每个目录中的 results/ 保存了原始的机器评分逐次运行判定 JSON、捕获的 dmesg Xid 行、阳性与阴性对照、观察者权限审计以及测试节点的环境捕获。GPU UUID、硬件序列号和节点 IP 已做脱敏处理;其他内容均未改动。
两项发现的 Full Disclosure 帖子,包括厂商通信和披露时间线:https://abhinavagarwal07.github.io
PoC 代码和文档:参见 LICENSE。