GhostLock CVE-2026-43499:潜伏15年的Linux内核提权漏洞,容器逃逸风险极高

2026年7月7日,Nebula Security团队公开了Linux内核中一个潜伏长达15年的高危本地权限提升漏洞,编号CVE-2026-43499,命名为GhostLock。该漏洞位于内核rtmutex(实时互斥锁)子系统的remove_waiter()函数中,属于典型的栈释放后使用(Stack Use-After-Free)漏洞。攻击者仅需本地普通用户权限,即可实现内核提权至root,并可完成容器环境逃逸

事件概述

GhostLock漏洞自Linux 2.6.39版本(2011年5月)引入,覆盖直至7.1版本的几乎所有主流Linux发行版。该漏洞由Nebula Security的AI驱动漏洞挖掘工具VEGA发现,而非传统的人工代码审计。

漏洞核心在于remove_waiter()函数在FUTEX_CMP_REQUEUE_PI代理加锁回滚路径中的逻辑错误:该函数本应用于清理当前线程自身的等待者状态,但在代理锁回滚时,它错误地操作了发起requeue线程的pi_blocked_on指针,而实际等待者的pi_blocked_on仍指向其已释放的内核栈帧——形成悬空指针。

技术细节

漏洞原理

当代理加锁失败回滚后,睡眠的等待者线程被唤醒并返回用户空间,其内核栈上的rt_mutex_waiter结构体随栈帧释放,但该线程的pi_blocked_on仍指向这块已释放的栈内存。后续当该线程再次进入内核态时,内核栈被复用,若内核通过pi_blocked_on指针访问等待者结构,即触发释放后使用

利用链

Nebula团队公开的利用链分为4个核心阶段,攻击耗时约5秒,成功率97%

  1. 触发悬空指针:构造三线程PI依赖循环,触发futex_requeue死锁检测回滚路径
  2. 栈内存复用与对象伪造:利用prctl(PR_SET_MM, PR_SET_MM_MAP, ...)在相同偏移位置写入可控数据
  3. 构造受控写原语:触发rtmutex红黑树擦除操作,实现向任意地址写入8字节0值
  4. 函数表劫持与提权:覆写inet6_protos[IPPROTO_UDP]等内核函数表,通过ROP链执行提权代码

影响范围

  • 受影响版本:Linux内核 2.6.39 ~ 7.1(2011年至2026年4月前)
  • 修复版本:Linux 6.1.175+、6.6.140+、6.12.86+、6.18.27+、7.0.4+
  • 前置条件:内核启用CONFIG_FUTEX_PI=y(默认开启)

影响评估

维度 评估
CVSS 3.1 7.8 High
攻击向量 本地
攻击复杂度
利用稳定性 97%(Nebula测试数据)
PoC/EXP 已公开

风险场景

  • 本地提权:普通用户通过webshell、SSH低权限账号获取root权限
  • 容器逃逸:Docker/Kubernetes环境中,容器内进程突破至宿主机
  • 多租户云环境:共享主机、CI/CD runner等场景下横向渗透

修复建议

官方补丁

上游内核已通过commit 3bfdc63936dd修复,核心修改是将remove_waiter()中所有操作current的逻辑替换为操作waiter->task。各发行版已陆续推送安全更新:

  • Ubuntu:升级至对应LTS版本的最新内核
  • Debian:升级至6.12.95+
  • RHEL/CentOS:安装对应RHSA安全公告补丁

注意:2026年4月的初始补丁引入了次生漏洞CVE-2026-53166,建议直接安装7月之后推送的最终修复版本。

临时缓解措施

  1. 限制不可信用户本地访问,严格管控容器权限
  2. 启用内核加固配置:CONFIG_RANDOMIZE_KSTACK_OFFSET栈随机化
  3. 容器环境启用Seccomp过滤,禁止PR_SET_MM_MAP等危险操作
  4. 监控异常内核oops和提权行为

参考来源