返回资讯中心
外部精选
软件工程
#开发者实时流

Stealthium团队发现NVIDIA Linux GPU驱动存在本地提权漏洞CVE-2026-47501

来源标题:ForgePtr: Unprivileged kernel write in Nvidia Linux GPU driver (CVE-2026-47501)

Stealthium团队发现NVIDIA Linux GPU驱动存在本地权限提升漏洞CVE-2026-47501,并已构建可用利用程序确认可获取root权限。该漏洞允许非特权用户从容器内写入内核内存,进而提权至宿主机root,并关闭ASLR、内核锁定、模块签名及Secure Boot运行时强制。团队已向NVIDIA报告,并在补丁发布前上线了漏洞利用检测方案。

Hacker News 最新rafaeldavidtin2026/11/12 · 今天21 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

ForgePtr(CVE-2026-47501)是 Stealthium 团队发现的一个 NVIDIA 驱动本地提权漏洞。我们构建了可用的利用程序来演示该漏洞并确认获取 root 权限,随后将其报告给了 NVIDIA。我们还在补丁发布之前就上线了针对该漏洞利用行为的检测。今天我们公开足够的信息,以便大家理解和防御它:不提供 PoC,并保留了一些细节。在负责任披露的框架下,我们还有 25 个以上 AI 运行时栈中的高危或严重漏洞待处理。

来看看一个 NVIDIA 驱动漏洞如何让潜在攻击者获得 root shell、从非特权容器逃逸到宿主机,并废掉包括 Secure Boot 在内的运行时配置。是时候深入 ForgePtr(CVE-2026-47501)了,准备好了吗?

让我们想想加固过的 GPU 宿主机的各层防护:

以上全部?ForgePtr 把它们全部清除出局,从一个非特权账户发起,只利用底层 NVIDIA 驱动中的一个漏洞。

一次非特权内核内存写入,就足以让容器内的普通用户变成宿主机上的 root,然后关闭 ASLR、内核 lockdown、模块签名以及 Secure Boot 的运行时强制,在一台完全锁定的机器上加载未签名内核模块。我们在受影响的硬件上验证了每一步。

对于正在或曾经租用多租户 GPU 的组织来说,这个利用程序的严重性远超“严重”级别。它远不是一个难以利用的漏洞。不需要任何 capability、不需要组成员身份、不需要 CAP_SYS_ADMIN,只需要一台安装了受影响 NVIDIA 驱动的机器上的本地账户。

本质上,ForgePtr 这个漏洞就是非特权地将选定字节写入内核内存中选定地址的能力。下面说明这如何转化为 root 权限及其他攻击者成果。

我们从 core_pattern 开始。它是一个保存在内核内存中的模板字符串,规定了进程崩溃时要运行什么。如果它以 | 开头,内核会把崩溃进程通过管道传给该程序,并以 root 身份运行它。写入它本不该是件可行的事。但在这里可行。哎呀。

ForgePtr 可以把自身路径写入 core_pattern,并布置一个返回 root shell 的小脚本。非特权用户直接 exec 进入 uid=0。

非特权用户以每次三个字节的方式重写 core_pattern,让一个子进程崩溃,然后掉进 root shell。

这就是为什么一个本地 root 漏洞对提供多租户的 GPU 云服务商以及租用这些服务的客户来说是个大问题。core_pattern 是全局内核状态。它没有命名空间隔离,因此容器内的进程写入的正是宿主机使用的那个模板。

把它指向 |/proc/%P/root/<payload>,两个众所周知的 Linux 细节就凑齐了。%P 是崩溃进程在宿主机命名空间中的 PID,而 /proc/<pid>/root/ 是指向该进程文件系统的魔法符号链接。崩溃处理器最终执行的是容器内的程序,并以真正的宿主机 root 身份、在宿主机的命名空间中运行它,无需任何共享文件夹。

从一个仅有 GPU 访问权限的非特权容器出发,这就是完全的宿主机接管:宿主机上出现 root 拥有的后门,其他所有租户的数据可读可写,节点上实现持久化,并以此为跳板干净地转移出去。

我们要明确地说:ForgePtr 对于多租户 GPU 云而言,让邻居变成了房东。

归根结底,大多数 Linux 系统防御措施都是内核内存中的变量。既然 ForgePtr 能写内核内存,它就能在宿主机范围内把配置重写为最宽松的值。

sys_prot_disable 将各项保护解析到其实时内核地址并将其驱动为零,包括那个跳过危险目标的邻接防护。

再来看 Secure Boot。Secure Boot 的运行时牙齿是内核 lockdown 和模块签名强制,两者都位于 ForgePtr 能触及的内存中。把 sig_enforce 从 Y 翻转为 N,把 lockdown 降为 none,内核就会加载未签名模块,而签名的启动链依然完好无损、完全不知情。

我们验证了这一点:在 Secure Boot 机器上执行拆除后,未签名模块成功加载。

说实话,底层漏洞几乎有些无聊……就是一个缺失的错误检查。

在驱动的事件缓冲区设置路径中,调用方提供的 handle 被转换为内核指针,而没有任何检查确认该转换成功还是失败。给它一个无法解析的 handle,驱动就会把你提供的、攻击者选定的原始值当作有效的内核指针保留下来,然后报告成功。

之后,当该对象被释放时,内核会在你提供的地址上递减一个计数器。就是这样:对选定位置进行任意递减。它之所以变成“写入任意字节”,是因为对一个字节反复递减会遍历所有可能的值,所以对于任何你能读回当前值的字节,你都能把它改成任意想要的值。

唯一的另一个要素是知道写哪里,因为现代内核会随机化其布局(KASLR)。ForgePtr 将其已知的目标偏移与一个额外的、非特权 KASLR 泄露原语配对,将每个偏移解析为实时地址。

IOMMU 管控 DMA,即设备能触及的内存。ForgePtr 从不要求 GPU 去碰目标内存。是内核自己执行写入,作用于通过普通驱动调用传给它的指针。GPU 只是通往漏洞的门径,并不是执行写入的一方。因此,IOMMU 映射、设备隔离以及针对 GPU 内存的机密计算功能,在面对 ForgePtr 时都不是适用的安全控制手段。

我们通过 NVIDIA 的开源 GPU 内核模块追踪了这一缺陷。它存在于 2022 年 5 月发布的第一个公开版本 515.43.04 中,并且在 9 月发布的版本之前的所有构建中一直存在。

这意味着过去四年里,多租户 GPU 的安全配置对攻击者来说是可选的。

(由于它存在于第一个开源版本中,很可能在闭源驱动开源之前就已存在。)

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →