Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
GhostLock-for-OnePlus — (CVE-2026-43499)内核漏洞利用程序,适用于未解锁 Bootloader 的一加设备。 | Kitploit
工具/GitHubGitHub/p2p3p/ghostlock-for-oneplus
Android安全权限提升漏洞利用后渗透利用学习与教育Payload 开发二进制利用
GitHubp2p3p/ghostlock-for-oneplus

GhostLock-for-OnePlus

(CVE-2026-43499)内核漏洞利用程序,适用于未解锁 Bootloader 的一加设备。

查看仓库
3613502个月前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

GhostLock — OnePlus

中文

针对已锁定引导加载程序的 OnePlus 设备的内核漏洞利用。使用 CVE-2026-43499 在不解锁引导加载程序或修改 boot.img 的情况下获取 root 权限。

仅限授权安全研究与教育目的。


目录

  • 漏洞概述
  • 支持的设备
  • 前置条件
  • 构建
  • 使用方法
  • 运行模式
  • 技术细节
  • 文件结构
  • 添加新设备
  • 常见问题

漏洞概述

项目详情
CVECVE-2026-43499
类型Futex PI(优先级继承)释放后使用
影响范围Linux 内核 2.6.39 ~ 7.1
修复于主线 7.1(提交 3bfdc63936dd)
Android 状态GKI 6.12.x 仍然存在漏洞

根本原因

pselect6 系统调用将 fd_set 复制到内核栈。当与 futex PI 等待者机制结合时,已释放的栈帧可能被重新分配为 rt_mutex_waiter 结构体。在 PI 链遍历期间,红黑树再平衡会将受控数据写入任意内核地址。

利用链

futex PI UAF (CVE-2026-43499)
  ├─ 伪造 rt_mutex_waiter 对象
  ├─ 通过 pselect/select fd_set 布局控制内核栈
  ├─ 触发 rt_mutex PI 操作以实现任意写入
  ├─ 写入 1:selinux_state.enforcing = 0
  └─ 写入 2:cred → init_cred(uid=0,完整 capabilities)

支持的设备

设备代号SoC内核固件状态
OnePlus Ace 6TPLR110SM8845(Snapdragon 8s Elite)6.12.38-android16-5-...-ab14275539-4kColorOS 16.0.2.403✅ 已验证
OnePlus Ace 6TPLR110SM8845(Snapdragon 8s Elite)6.12.38-android16-5-...-ab14552068-4kColorOS 16.0.8.301✅ 已验证
OnePlus 15PLK110SM8845(Snapdragon 8s Elite)6.12.23-android16-5-...-ab14541642-4k—✅ 已验证

同一 SoC 系列、Android 16 或内核 6.12.x 的其他 OnePlus 设备可通过 boot.img 偏移提取进行适配。


前置条件

ksud(KernelSU 必需)

GhostLock 负责权限提升。安装 KernelSU 需要 ksud(随 KMI 特定的 kernelsu.ko 一起提供):

来源说明
ReSukiSU APK(推荐)安装 ReSukiSU;APK 中捆绑了 libksud.so
CI Release从 ReSukiSU CI 下载(ksud-aarch64-linux-android.zip)

没有 ksud 时,漏洞利用仍可获得 uid=0 的 root shell,但 KernelSU 不会被安装,su 也不会持久化。


构建

前置条件

  • Android NDK(r25+)
  • 设置 ANDROID_NDK_HOME 或 ANDROID_NDK_ROOT

构建

# Default (API 35)
make

# Specify API level
make API=34

# Specify NDK path
NDK=/path/to/android-ndk make

产物

ghostlock — 静态链接的 ARM64 ELF 可执行文件。


使用方法

一次性设置

# 1. Enable ADB TCP mode
adb tcpip 5555

# 2. Push ADB key (required for bootstrap mode)
adb push ~/.android/adbkey /data/local/tmp/a/adbkey

# 3. Push the exploit
adb push ghostlock /data/local/tmp/a/e
adb shell chmod 755 /data/local/tmp/a/e

首次成功后,resetprop 会自动设置 persist.adb.tcp.port=5555,从而允许在后续重启时完全自动运行。


运行模式

完整漏洞利用(ADB shell 上下文)

/data/local/tmp/a/e
  • perf 可用,精确泄漏子进程 task_struct
  • 两阶段:W1 禁用 SELinux → W2 权限提升 → 加载 KernelSU

Bootstrap 模式(应用上下文,seccomp 受限)

/data/local/tmp/a/e --bootstrap
  1. 写入 1 → 禁用 SELinux
  2. 使用释放的权限通过 setprop 启用 ADB TCP 5555
  3. 内置 Mini ADB 客户端连接到 127.0.0.1:5555
  4. 使用预推送的密钥进行 RSA 认证
  5. 通过 ADB shell 执行完整漏洞利用(无 seccomp)

仅写入 1

/data/local/tmp/a/e --write1
  • 最多尝试 20 次
  • 适用于调试或临时禁用 SELinux

技术细节

1. 运行时内核匹配

偏移存储在 src/devices/offsets.h 查找表中,以 uname -r 为键。程序在启动时自动匹配;未知内核会被拒绝。

static const struct kernel_offsets known_offsets[] = {
  OFFSETS_ENTRY("6.12.38-android16-5-...-ab14275539-4k", ...),
  OFFSETS_ENTRY("6.12.38-android16-5-...-ab14552068-4k", ...),
  OFFSETS_ENTRY("6.12.23-android16-5-...-ab14541642-4k", ...),
  { .uname_r = NULL }  /* sentinel */
};

偏移来源

类型数量提取方式
kallsyms 全局符号28tools/extract_target.py
BTF 结构体字段57tools/extract_btf.py
派生值9自动计算
固定常量12硬编码

BTF 验证的结构体

结构体字段数用途
task_struct17进程描述符、cred、seccomp
rt_mutex_waiter6UAF 伪造目标
cred4凭据、capabilities
seccomp3Seccomp 过滤器状态
pipe_inode_info11管道缓冲区操作
file_operations13伪造 fops 表
mm_struct1内存描述符所有者

2. KASLR 绕过

SLIDE 模式 — boot_id 泄漏

当内核指针受限(kptr_restrict)时,通过用内核地址覆盖的 boot_id 泄漏基地址:

Read /proc/sys/kernel/random/boot_id
  └─ UUID contains nfulnl_logger address
      └─ KASLR slide = leaked_addr - image_offset
          └─ kaslr_base

FOPS/CFI 模式 — fops 表泄漏

当 ashmem 设备可访问时,使用 configfs 读/写原语从 ashmem fops 表读取函数指针并计算 KASLR 偏移。

3. 内核堆喷射

在 order-3(32KB)页上伪造内核对象:

  • 伪造 file_operations — 劫持 ashmem miscdevice fops 指针
  • 伪造 rt_mutex_waiter — 模拟 PI 链等待者节点
  • 伪造 task_struct — PI 遍历期间的任务引用
  • 伪造 rt_mutex(锁) — 正确的等待者/所有者信息

通过 SKB(套接字缓冲区) + KernelSnitch 实现:

  • KernelSnitch — futex 哈希冲突以泄漏 mm_struct 地址
  • SKB 喷射 — sendmsg 填充内核堆

4. 物理内存读/写(管道)

获得 KASLR 基地址后,使用管道缓冲区进行物理级内存访问:

1. Locate pipe buffer in physmap
2. Forge pipe_buffer ops table pointing to known pipe_buf_ops
3. Hijack pipe_buffer.page to target physical address
4. Arbitrary physical read/write via normal pipe operations

支持:pipe_read64、pipe_write64、pipe_phys_read_data、pipe_phys_write_data

5. 两阶段写入

写入 1 — 禁用 SELinux

Target: selinux_state.enforcing (offset 0x00)
Method: child-node PI write → forge waiter __rb_parent_color
        pointing to selinux_enforcing - 8
        rb-tree rebalance writes 0x00

写入 2 — 提升至 Root

Target: child process cred pointer
Method: 1. fork child → perf_find_task() locate task_struct
        2. calculate cred field offset
        3. child-node PI write → cred = init_cred (uid=0, full caps)
        4. clear seccomp (TIF_SECCOMP + seccomp struct zeroed)

在 cred 覆盖后执行 capability 回读验证。

6. 内置 Mini ADB 客户端

src/core/miniadb.c — 用于 bootstrap 模式的轻量级 ADB 协议客户端:

1. TCP connect 127.0.0.1:5555
2. A_CNXN → connection request
3. A_AUTH → RSA token challenge
4. dlopen("libcrypto.so") → PEM_read_bio_RSAPrivateKey → RSA_sign
5. A_AUTH (AUTH_SIGNATURE) → signed response
6. A_CNXN → connection established
7. A_OPEN "shell:/data/local/tmp/a/e" → full exploit

支持 SHA-1 和 SHA-256 签名算法。


文件结构

下载工具