Linux Kernel 披露 「GhostLock」本地权限提升漏洞
安全研究机构 Nebula Security 于 2026 年 7 月 7 日公开了 Linux 内核高危本地提权漏洞 GhostLock(CVE-2026-43499)的完整技术分析。该漏洞存在于内核 futex 优先级继承(Priority Inheritance, PI)子系统的 rtmutex(实时互斥锁)实现中,NVD 评定 CVSS v3.1 分数为 7.8(高危),漏洞类型为释放后使用(Use After Free, CWE-416)。本地攻击者可利用此漏洞将权限提升至 root,在容器环境中还可能逃逸至宿主机。触发漏洞不需要特殊权限,也不依赖用户命名空间。
漏洞的根因在于 Requeue-PI 代理锁定的回滚路径中,内核函数 remove_waiter() 错误地将当前执行线程 current 当作实际等待线程 waiter->task 进行清理。正常加锁路径中二者恰好是同一个线程,但在 Requeue-PI 场景下,一个线程会代理另一个已睡眠的线程参与 rtmutex 操作,此时二者并非同一线程。当代理锁定因死锁检测返回错误并触发回滚时,真实等待者的 pi_blocked_on 指针未被清除,仍指向其自身内核栈上已结束生命周期的 waiter 结构体,形成内核栈上的释放后使用条件。
引入这一问题的是 2011 年 1 月合入的一次 rtmutex 算法简化重构提交。该提交旨在精简优先级继承逻辑,让最高优先级等待者获得锁,目的本身合理,但在重构中引入了一个隐含假设:调用 remove_waiter() 时,当前线程即为被清理的等待者。漏洞因此在代码中潜伏约 15 年,影响从 Linux 2.6.39-rc1 到 7.1-rc1 之前的大量版本,前提是内核启用了 CONFIG_FUTEX_PI(主流发行版默认开启)。
Nebula Security 于 2026 年 4 月 18 日向内核安全团队报告漏洞并提交修复草案,上游修复于 4 月 20 日合入。核心改动是将 remove_waiter() 中对 current 的操作替换为对 waiter->task,并修正后续优先级链调整中的 task 参数。
安全研究机构 Nebula Security 于 2026 年 7 月 7 日公开了 Linux 内核高危本地提权漏洞 GhostLock(CVE-2026-43499)的完整技术分析。该漏洞存在于内核 futex 优先级继承(Priority Inheritance, PI)子系统的 rtmutex(实时互斥锁)实现中,NVD 评定 CVSS v3.1 分数为 7.8(高危),漏洞类型为释放后使用(Use After Free, CWE-416)。本地攻击者可利用此漏洞将权限提升至 root,在容器环境中还可能逃逸至宿主机。触发漏洞不需要特殊权限,也不依赖用户命名空间。
漏洞的根因在于 Requeue-PI 代理锁定的回滚路径中,内核函数 remove_waiter() 错误地将当前执行线程 current 当作实际等待线程 waiter->task 进行清理。正常加锁路径中二者恰好是同一个线程,但在 Requeue-PI 场景下,一个线程会代理另一个已睡眠的线程参与 rtmutex 操作,此时二者并非同一线程。当代理锁定因死锁检测返回错误并触发回滚时,真实等待者的 pi_blocked_on 指针未被清除,仍指向其自身内核栈上已结束生命周期的 waiter 结构体,形成内核栈上的释放后使用条件。
引入这一问题的是 2011 年 1 月合入的一次 rtmutex 算法简化重构提交。该提交旨在精简优先级继承逻辑,让最高优先级等待者获得锁,目的本身合理,但在重构中引入了一个隐含假设:调用 remove_waiter() 时,当前线程即为被清理的等待者。漏洞因此在代码中潜伏约 15 年,影响从 Linux 2.6.39-rc1 到 7.1-rc1 之前的大量版本,前提是内核启用了 CONFIG_FUTEX_PI(主流发行版默认开启)。
Nebula Security 于 2026 年 4 月 18 日向内核安全团队报告漏洞并提交修复草案,上游修复于 4 月 20 日合入。核心改动是将 remove_waiter() 中对 current 的操作替换为对 waiter->task,并修正后续优先级链调整中的 task 参数。