Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2026-43499 — PD2229B的43499(ghostlock)可行性研究 | Kitploit
工具/GitHubGitHub/catxiaoshi/cve-2026-43499
Android安全权限提升漏洞分析漏洞利用逆向工程移动安全二进制利用
GitHubcatxiaoshi/cve-2026-43499

cve-2026-43499

PD2229B的43499(ghostlock)可行性研究

查看仓库
17天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

GhostLock 在 PD2229 (SM8475, 5.10.233 GKI) 的利用失败总结

一、漏洞与设备事实

1.1 CVE-2026-43499 (GhostLock) 基本信息

项目值
漏洞类型rt_mutex / futex PI 路径中的栈上 Use-After-Free
引入版本Linux 2.6.39-rc1 (2011年5月,commit 8161239a8bcc)
修复版本主线 7.1 (commit 3bfdc63936dd),各稳定分支:6.1.175 / 6.6.140 / 6.12.86 / 6.18.27 / 7.0.4
前置条件CONFIG_FUTEX_PI=y(主流内核默认开启)
CVSS7.8 High
利用稳定性NebuSec 原链 97%,约 5 秒获取 root
kernelCTF 奖金$92,337 USD

受影响内核范围:

  • 2.6.39 ≤ Linux < 6.1.175 ✅ 受影响
  • 6.2 ≤ Linux < 6.6.140 ✅ 受影响
  • 6.7 ≤ Linux < 6.12.86 ✅ 受影响
  • 6.13 ≤ Linux < 6.18.27 ✅ 受影响
  • 6.19 ≤ Linux < 7.0.4 ✅ 受影响
  • Android GKI 5.10 未在任何修复分支中 → PD2229 的 5.10.233 理论上受影响

1.2 PD2229 设备实测


二、理想利用链 vs PD2229 实际进度

2.1 NebuSec 原链(x86_64 / Pixel 10 成功)

root@kitploit:~
1. KASLR 绕过        → prefetch timing / PR_SET_MM_MAP auxv
2. UAF 触发          → 三线程 PI 依赖死锁 → FUTEX_CMP_REQUEUE_PI 返回 -EDEADLK
3. 栈回收            → PR_SET_MM_MAP 将 auxv 拷贝到 waiter 栈帧
4. rb_erase 受限写   → 覆写 inet6_protos[IPPROTO_UDP]
5. CEA + ROP         → 控制流劫持
6. core_pattern 翻转 → root shell (97% 成功率)

2.2 PD2229 各环节实际进度


三、栈回收原语穷举结果(PD2229 实测)

3.1 栈帧布局关键计算

root@kitploit:~
futex 路径总深度:
  __arm64_sys_futex    0x90
  + do_futex           0xc0
  + futex_wait_requeue_pi  0x1b0
  = 0x300
waiter 位置 = SYS_SP - 0x300 + 0x20 = SYS_SP - 0x2e0

pselect 路径:
  core_sys_select 栈帧 0x1c0, stack_fds 在 sp+0x50
  覆盖区间: SYS_SP - 0x1c0 + 0x50 = SYS_SP - 0x170 起
  与 waiter (SYS_SP - 0x2e0) 差距 0x170 (368 字节) → 不重叠

3.2 已尝试的 17 种栈写入方法

17/17 全部失败。

3.3 失败的根本原因

PD2229 的 SM8475 5.10 GKI 编译器(PGO + LTO + BOLT)输出的栈布局,导致 core_sys_select 的 stack_fds 与 futex_wait_requeue_pi 的 rt_mutex_waiter 架构性不重叠。这是编译器决定的客观事实,而非利用技巧问题。

JoinChang 仓库明确说明:"The pselect stack overlay only works when the freed rt_mutex_waiter lands within the user-controllable region of the stack_fds buffer"——PD2229 不满足此条件。


四、公开参考仓库对比分析

NebuSec/CyberMeowfia — 原始利用框架

  • 仓库:https://github.com/NebuSec/CyberMeowfia
  • 目标:x86_64 Linux / Pixel 10 (6.x GKI)
  • 栈回收:PR_SET_MM_MAP 将 auxv 拷贝到内核栈
  • 成功率:97%,约 5 秒[root shell]
  • PD2229 适用性:❌ PR_SET_MM_MAP 在 Android 上被 EPERM 拦截

JoinChang/ghostlock-oneplus — 一加锁 BL jailbreak

  • 仓库:https://github.com/JoinChang/ghostlock-oneplus
  • 已验证设备:
    • OnePlus Ace 6T (PLR110, SM8845) — 6.12.38 GKI ✅
    • OnePlus 15 (PLK110, SM8845) — 6.12.23 GKI ✅
  • 技术要点:
    • 偏移自动提取:kallsyms (28) + BTF (57) + 派生 (9) + 常量 (12) = 103/103
    • pselect 栈覆盖,SP diff = -64
    • PSELECT_SHIFT = -2
    • 利用链:futex UAF → 伪造 waiter → pselect 控制栈 → rb_erase 受限写 → selinux_state.enforcing=0 → cred 覆写为 init_cred
  • 明确声明不可行:"Not Feasible (stack layout incompatible)" — 仅适用于 pselect stack_fds 与 waiter 重叠的内核
  • PD2229 适用性:❌ 内核代次不符(6.12 vs 5.10),且栈布局不重叠

p2p3p/GhostLock-for-OnePlus — 一加 6.12 完整利用

  • 仓库:https://github.com/p2p3p/GhostLock-for-OnePlus
  • 已验证:OnePlus Ace 6T (SM8845, 6.12.38) ✅
  • PD2229 适用性:❌ 同 JoinChang,内核代次不符

YuKongA/ghostlock-oplus — OPPO Find N5/X8

  • 仓库:https://github.com/YuKongA/ghostlock-oplus
  • 内核:6.6.118 GKI
  • PD2229 适用性:❌ 内核代次不符

OPPO Find X6 Pro (PGEM10) 适配 — 5.15.149

  • 设备:SM8550, 5.15.149-android13, Android 15
  • 进展:✅ KASLR 绕过(perf_event_open + callchain sampling);后续阶段未公开完整利用
  • 意义:证明 5.15 GKI 上 KASLR 绕过可行,但栈回收阶段未公开验证

pubglite55/oppo-ghostlock — OPPO Find N2

  • 仓库:https://github.com/pubglite55/oppo-ghostlock
  • 设备:OPPO Find N2 (CPH2413, SM8475)
  • 内核:5.10.236-android12-9-o-g74d132f4467a
  • Android:16 (BP2A.250605.015)
  • 已实现:
    • ✅ Firefox CVE-2026-10702 AAW(Stage 1)
    • ✅ KASLR bypass(直接计算 kaslr_base)
    • ✅ GhostLock FUTEX 触发(FUTEX_CMP_REQUEUE_PI ret=0)
    • ✅ KernelSnitch mm_struct 泄漏
    • ✅ sk_buff 堆喷射(4/4 send 成功)
    • ✅ IDA Pro 70+ 偏移验证
  • 核心阻塞:

    "pselect 无法操纵 waiter 结构 — NFDS >336 时 fd_set 在堆上;configfs/ashmem 不支持(ashmem SET_NAME 被截断);所有其他内核写入路径被阻塞(/proc/self/mem, /dev/mem, binder)"

  • PD2229 关系:同平台同代次(SM8475, 5.10.236 vs 5.10.233),仅差 3 个小版本,面临完全相同的架构性限制

harry1080/oppo-ghostlock — OPPO Find N2

  • 仓库:https://github.com/harry1080/oppo-ghostlock
  • 设备:OPPO Find N2 (CPH2413, SM8475)
  • 内核:5.10.236-android12-9-o-g74d132f4467a
  • Android:16 (BP2A.250605.015)
  • 社区公开声明:

    "pixel10 能利用的版本的 pselect stack_fds 正好和 rt_waiter 在内核栈上重合,这个部分实际上是最麻烦的地方,OPPO findN2 的内核这两个调用的栈部分完全不重合,或者重合也不可控,得找另外的控制栈的方法,要换其他可控内核栈的系统调用来构造栈,简单适配偏移是不可能成功的,oppo 的 rt_waiter 完全与 pselect stack_fds 不重合"

  • PD2229 关系:与 PD2229 同为 SM8475 5.10 GKI,结论完全适用

4.3 参考仓库对比总表


五、关键内核符号与偏移(PD2229 vmlinux 实测)

静态基址 0xffffffc008000000,运行时需加 KASLR slide。

rt_mutex_waiter 结构体(vivo 5.10.233 定制)

root@kitploit:~
struct rt_mutex_waiter {
    uint64_t private;           // +0x00  (vivo 私有字段)
    struct rb_node {
        uint64_t rb_parent_color; // +0x08
        uint64_t rb_right;        // +0x10  (vivo 调换顺序)
        uint64_t rb_left;         // +0x18
    } tree;
    struct task_struct *task;   // +0x20
    struct rt_mutex *lock;      // +0x28
};
// 总大小 0x30 (48 字节)

六、已实现 vs 需实现

✅ 已实现的基础设施

  1. KASLR 绕过 — perf_event_open + callchain sampling(与 OPPO Find X6 Pro 5.15.149 方法一致)
  2. UAF 触发 — 三线程 PI 死锁,FUTEX_CMP_REQUEUE_PI 返回 -EDEADLK
  3. 完整符号表 — 103+ 符号通过 IDA 验证(参照 JoinChang 的 103/103 提取方法论)
  4. rt_mutex_waiter 结构体布局 — vivo 定制偏移已确认
  5. 栈帧布局精确分析 — futex 与 pselect/io_uring 路径深度计算完成
  6. 17 种栈回收候选的穷举排除 — 建立完整的"不可行"矩阵

❌ 未实现(核心阻塞)

  1. 栈回收原语 — SM8475 5.10 GKI 编译器栈布局导致架构性不可用
  2. 受限写原语 — 因栈回收失败而无法触发 rb_erase
  3. 后续所有阶段 — 级联阻塞

七、最终结论

⚠️ GhostLock (CVE-2026-43499) 在 PD2229 (vivo X Fold+, SM8475, 5.10.233 GKI, Android 15 OriginOS 5) 上不可利用。

根本原因是 SM8475 5.10 GKI 编译器(PGO+LTO+BOLT)输出的栈布局,导致所有已知 syscall 的栈帧与 rt_mutex_waiter 架构性不重叠。这是编译器决定的客观事实,不是利用技巧问题。

成功利用的案例均为 6.6/6.12 GKI,因为这些新内核的编译器输出使 pselect fd_set 与 waiter 完美重叠(SP diff=-64)。5.10 GKI 不具备这一条件。


已建立的基础设施

  • ✅ KASLR 绕过原语(perf_event_open 侧信道)
  • ✅ 103+ 内核符号与偏移
  • ✅ rt_mutex_waiter 结构体布局
  • ✅ UAF 触发能力
  • ✅ 17 种栈回收候选的排除矩阵

九、参考仓库索引


下载工具
项目值
SoCQualcomm SM8475 (Snapdragon 8 Gen 1 Plus)
内核版本5.10.233-gki-g6e61de9f5b58 #1 SMP PREEMPT (Nov 24 2025)
Android 版本15 (OriginOS 5)
编译时间2025/11/25
安卓补丁2025/11/01
CONFIG_FUTEX_PIy ✅
CONFIG_UNMAP_KERNEL_AT_EL0y (KPTI 开启)
kptr_restrictenforced
CONFIG_IO_URINGy ✅(vmlinux 符号确认,且 seccomp 未拦截 io_uring_setup)
阶段状态说明
1. KASLR 绕过✅ 已实现perf_event_open + callchain sampling 侧信道(与 OPPO Find X6 Pro 5.15.149 适配方法一致)
2. UAF 触发✅ 已实现三线程 PI 死锁成功,FUTEX_CMP_REQUEUE_PI 返回 -EDEADLK
3. 栈回收原语❌ 架构性失败所有已知 syscall 的栈帧与 waiter 不重叠(详见第三节)
4. rb_erase 受限写❌ 阻塞中前置条件未满足
5. inet6_protos 覆写❌ 未开始依赖阶段 4
6. ROP / 控制流劫持❌ 未开始依赖阶段 5
7. root shell❌ 未开始依赖阶段 6
#方法系统调用PD2229 结果核心失败原因
1stamp_prctlPR_SET_MM_MAP❌ EPERMAndroid 硬拦截
2stamp_pselectpselect6 (NFDS=320)❌ 不重叠waiter 在 fd_set 下方 120B
3stamp_pselectpselect6 (NFDS>336)❌ 堆分配kvmalloc 路径
4stamp_socketMCAST_JOIN_SOURCE_GROUP❌ 覆盖不足仅写 lock 字段
5stamp_sendmsgsendmsg❌ 距 waiter 80B栈帧 0x90 深度不足
6stamp_sendmmsgsendmmsg❌ 距 waiter 112B栈帧不足
7stamp_recvmmsgrecvmmsg❌ 清零 task/lock0x1d0 栈帧破坏关键指针
8stamp_process_vmprocess_vm_writev❌ 不重叠子线程栈独立分配
9stamp_keyctlKEYCTL_INSTANTIATE_IOV❌ EOPNOTSUPP系统调用不支持 + 栈帧 0x40
10stamp_tcpTCP_ZEROCOPY_RECEIVE❌ 栈帧不足预估深度不够
11stamp_futexFUTEX_CMP_REQUEUE_PI 递归❌ 逻辑不可行破坏 UAF 窗口
12binder ioctlBINDER_WRITE_READ❌ EACCESshell 无 /dev/binder 权限
13pollpoll❌ 堆分配pollfd 在堆上
14epoll_waitepoll_wait❌ 帧太浅栈帧 0xE0
15sched_setattrsched_setattr❌ 深度不足栈帧 0xb0
16timerfd_settimetimerfd_settime❌ 无栈复制无大栈缓冲区
17io_uring_registerIORING_REGISTER_*❌ 双失败①栈帧仅 0xF0,copy_from_user 目标固定 sp+0x8(与 waiter 的 sp+0x1D0 差 424 字节);②虽然 io_uring_setup 未被 seccomp 拦截(返回 EFAULT 而非 ENOSYS),但栈布局不匹配
仓库设备SoC内核栈回收方法状态PD2229 可复用性
NebuSec/CyberMeowfiaPixel 10-6.xPR_SET_MM_MAP✅ 97%❌ Android 拦截
JoinChang/ghostlock-oneplusOnePlus Ace 6TSM88456.12.38pselect (SP diff=-64)✅ 已验证❌ 内核代次不符
p2p3p/GhostLock-for-OnePlusOnePlus Ace 6TSM88456.12.38pselect✅ 已验证❌ 内核代次不符
YuKongA/ghostlock-oplusFind N5/X8-6.6.118pselect✅❌ 内核代次不符
OPPO Find X6 Pro 适配Find X6 ProSM85505.15.149perf KASLR + ?🟡 KASLR ✅, 后续未公开❌ 平台不同
pubglite55/oppo-ghostlockFind N2SM84755.10.236穷举失败❌ 核心阻塞⚠️ 同平台同代次,命运一致
harry1080/oppo-ghostlockFind N2SM84755.10.236穷举失败❌ 架构性不可行⚠️ 同平台同代次,命运一致
PD2229 (本报告)PD2229SM84755.10.23317 种候选全失败❌ 架构性不可行—
符号地址用途
rt_mutex_start_proxy_lock0xffffffc00822baa8漏洞触发入口
futex_wait_requeue_pi0xffffffc0082d7df4waiter 分配,栈帧 0x1b0
__arm64_sys_futex0xffffffc0082dfe9c栈帧 0x90
do_futex0xffffffc0082d0768栈帧 0xc0
core_sys_select0xffffffc008634cf0pselect 栈帧 0x1c0
____sys_sendmsg0xffffffc0093eda88栈帧 0x90
do_recvmmsg0xffffffc0093ef49c栈帧 0x1d0
__arm64_sys_io_uring_register0xffffffc008aae328栈帧 0x10+0x70
__io_uring_register0xffffffc008aae5f8栈帧 0x80
inet6_protos0xffffffc00ab0a278阶段 4 写入目标
selinux_state0xffffffc00aee8c70SELinux 禁用目标
init_task0xffffffc00ab0c240cred 读取源
仓库URL关键价值
NebuSec/CyberMeowfiahttps://github.com/NebuSec/CyberMeowfia原始利用框架,97% 成功率
JoinChang/ghostlock-oneplushttps://github.com/JoinChang/ghostlock-oneplus6.12 GKI 成功适配,103 偏移提取方法论
p2p3p/GhostLock-for-OnePlushttps://github.com/p2p3p/GhostLock-for-OnePlus6.12 GKI 完整利用链
YuKongA/ghostlock-oplushttps://github.com/YuKongA/ghostlock-oplus6.6 GKI OPPO 适配
pubglite55/oppo-ghostlockhttps://github.com/pubglite55/oppo-ghostlockSM8475 5.10.236 同平台失败参照
harry1080/oppo-ghostlockhttps://github.com/harry1080/oppo-ghostlockSM8475 5.10.236 同平台失败参照
NebuSec 技术分析https://nebusec.ai/research/ionstack-part-2/GhostLock 原链技术细节
上游修复commit 3bfdc63936dd修复代码