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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
ghostlock-sabrina — CVE-2026-43499 GhostLock 针对 Chromecast with Google TV (sabrina) 的 root 漏洞利用 | Kitploit
工具/GitHubGitHub/k-o-n-t-o-r/ghostlock-sabrina
Android安全嵌入式系统安全权限提升漏洞分析漏洞利用硬件与物联网安全论文与研究Payload 开发二进制利用
GitHubk-o-n-t-o-r/ghostlock-sabrina

ghostlock-sabrina

CVE-2026-43499 GhostLock 针对 Chromecast with Google TV (sabrina) 的 root 漏洞利用

113721个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

GhostLock Sabrina

针对 Chromecast with Google TV(sabrina)的 root 漏洞利用,基于 CVE-2026-43499——Linux 内核 futex PI(优先级继承)子系统中的一个释放后使用(use-after-free)漏洞。

可在运行 Android 14、内核版本 5.15.170(PGO+BOLT+LTO,clang 17)的锁定 bootloader 设备上获取 root 权限。

漏洞

GhostLock 利用了 rt_mutex_start_proxy_lock() 中 -EDEADLK 回滚路径所调用的 remove_waiter() 里的一个缺陷。该函数清除的是 current->pi_blocked_on(即重新排队者的,此时已为 NULL),而非等待者任务的。等待者的 pi_blocked_on 从未被清除,从而在内核栈上留下一个指向已释放 rt_mutex_waiter 的悬空指针。

随后的一次 sched_setattr 会触发 rt_mutex_adjust_pi -> rt_mutex_adjust_prio_chain,后者沿着悬空指针遍历,在被回收的堆页上基于攻击者控制的数据走完一条 PI 链——通过 rb_erase 提供任意写原语。

利用链

阶段技术
KASLR 泄露使用带 PERF_SAMPLE_IP 的 perf_event_open(受 TID 门控)——最小内核 IP 位于 .entry.text(+0x10000),_text 按 2MB 对齐且 KASLR 偏移为 2MB 的倍数,因此 min_ip & ~0x1fffff 可精确还原运行时的 _text
任务结构体泄露使用带 PERF_SAMPLE_REGS_INTR 的 perf_event_open(受 TID 门控,线性映射地址的模式)
符号表校验在 setpriority(-20) 风暴期间,从 security_capable() 的寄存器参数中通过 perf-samples 采样 &init_user_ns,并与 kaslr_base + off_init_user_ns 比对——在任何盲写之前证明运行内核的 .data/.bss 布局与偏移表一致
mm_struct 泄露KernelSnitch——futex 哈希碰撞计时侧信道
堆喷射SLUB 丢弃编排(memfd-close、CPU-partial 溢出)+ io_uring_setup(256) 的 order-2 页回收
栈覆盖AF_UNIX SOCK_SEQPACKET sendmsg——move_addr_to_kernel 将 128 字节 sockaddr 复制到内核栈,覆盖悬空等待者的 task/lock/prio 字段
遍历触发使用单调 nice 阶梯(7 -> 14 -> 19)的 sched_setattr 触发 PI 链遍历,每轮覆盖触发一次
写原语rb_erase Case 1:`{pc=(TARGET-8)
关闭 SELinux(遍历 0)在 selinux_state 处的 8 字节零写入清除 enforcing、checkreqprot、initialized 和 policycap[0..4]——avc_denied() 永不拒绝(enforcing=0),且 security_compute_av() 短路为全部允许(!initialized),因此交换后的内核 SID(u:r:kernel)不再重要
凭证交换(遍历 1+2)task->cred = fake_cred 和 task->real_cred = fake_cred(uid=0、caps FULL、喷射页上自包含的伪造 user_namespace;两次写入均为必需——exec 路径中的 commit_creds() 在 cred != real_cred 时会触发 BUG_ON)
Root 检测组仅使用原始系统调用的探测(uid/SELinux//proc/1//dev/kmsg/wifi/packages//data/data/kallsyms)写入 /data/local/tmp/.ghostlock_out
Root shellexecve("/system/bin/sh")——exec 路径中的 commit_creds 将 fake_cred 复制到干净的 slab 凭证中;以所有计划中的擦除均已落地为前提

关键创新

  • SIGUSR1 先遍历后清理:SEQPACKET 覆盖层运行在一个信号处理函数中,该处理函数会中断 futex 等待,因此 PI 链的遍历会在 futex 清理路径能够争用 spray 页的自旋锁之前触发(消除了 MCS qspinlock 卡死问题)
  • 一次回收完成三次写入(模式 7):SELinux 关闭 + cred + real_cred 全部通过同页覆盖重试轮次针对同一个被回收页触发,恰好消耗 nice 阶梯的三级——整个链只掷一次堆回收骰子
  • 通过零写入关闭 SELinux:rb_right = 0 的 rb_erase 原语在任意内核地址执行一次干净的 8 字节零存储(无附带存储,无野指针解引用);将 selinux_state 的第一个 qword 清零即可得到双重宽容模式(enforcing=0 + !initialized → 全部允许),尽管存在内核 SID,这仍能解除 root 之后所有文件 I/O 的阻塞
  • 设备侧符号验证:偏移表来自参考 vmlinux,但设备内核使用不同的工具链构建——在盲写 SELinux 之前,漏洞利用会从活跃的 security_capable() 路径中通过 perf 泄漏 &init_user_ns,除非它与 kaslr_base + off_init_user_ns 匹配,否则会中止并转入仅 cred 流程
  • 伪造 user_namespace:在 spray 页上构建一个自包含的命名空间,具有恒等 uid/gid 映射和 ucounts = NULL——cap_capable 在第一次迭代即匹配,inc_rlimit_ucounts 在一次循环后终止,从而无需泄漏 &init_user_ns
  • TID 门控的 perf 采样:PERF_SAMPLE_TID 过滤器确保只统计调用线程的寄存器快照,防止繁忙的系统服务主导模式投票

目标

  • 设备:Chromecast with Google TV(sabrina),Amlogic S905X3(4x A55),2 GB RAM
  • 内核:5.15.170-android14-11-gf4a1f03072af(aarch64,PGO+BOLT+LTO,clang 17.0.2)
  • Android:14,构建号 UTTC.250917.004,安全补丁 2025-10-01
  • 配置:CONFIG_FUTEX_PI=y、CONFIG_IO_URING=y、perf_event_paranoid=-1、SELinux 强制模式、panic_on_oops=1、无用户命名空间

构建

export ANDROID_NDK_HOME=/path/to/android-ndk
make -j$(nproc)

需要 Android NDK(已使用 r27 测试)。生成静态链接的 aarch64 二进制文件。

用法

adb push ghostlock /data/local/tmp/
adb shell "cd /data/local/tmp && ./ghostlock --cred"

该漏洞利用大约需要 25 秒(KASLR/task/layout 泄漏 + 堆喷射 + KernelSnitch 暴力破解 + 三轮各 3 秒的 overlay 轮次)。成功时,它会将 root battery 写入 /data/local/tmp/.ghostlock_out,将标记写入 /data/local/tmp/.ghostlock_root,并在宽松内核下以 uid=0 执行 /system/bin/sh。

环境开关:

  • GHOST_SELINUX=0 — 跳过 SELinux 写入,运行已验证的仅 cred 路径(模式 6)
  • GHOST_SELINUX_FORCE=1 — 即使设备符号布局验证失败,也启用 SELinux 写入
  • GHOST_EXEC=0 — 写入 battery 并 exit(99),而不是执行 shell
  • CRED_ATTEMPTS=n — 当某次运行未能回收时进行完整喷射重试(默认 3)

作者

该漏洞利用由 Claude Opus 4.6(Anthropic)移植和开发,并由 GLM-5.3(Z.ai)担任内核利用顾问。

参考资料

  • CyberMeowfia / IonStack -- NebuSec 的原始 GhostLock 漏洞利用,本移植版本基于此
  • ghostlock-oneplus -- GhostLock 的 OnePlus/Pixel 适配版本
  • KernelSnitch -- 通过 futex 哈希冲突泄漏内核堆地址的时序侧信道(Gruss 等,TU Graz)
  • CVE-2026-43499 -- futex PI 释放后使用漏洞
  • Linux kernel 5.15 源码 -- kernel/futex/、kernel/locking/rtmutex.c、lib/rbtree.c

免责声明

该漏洞利用发布用于安全研究和教育目的。它针对的是研究人员拥有的设备。请勿在您不拥有或未经授权的设备上使用。

许可证

MIT

下载工具