面向 CVE-2026-43499 的受保护、仅源码的 Humane AI Pin root PoC
GhostLock for Humane AI Pin 是一个开源、启动作用域内的 root 概念验证,针对一个确切的零售固件版本。它通过普通的已授权 ADB shell 触发 CVE-2026-43499,这是一个 Linux rtmutex 释放后使用漏洞。
该运行器刻意保持狭窄范围。在暂存任何内容之前,它会检查完整的固件指纹、内核构建、槽位、shell UID 和 SELinux 状态。任何不匹配都会停止运行。
[!WARNING] 这是一个内核漏洞利用。它可能导致 Pin 崩溃、重启或硬挂起。硬挂起可能需要拔掉设备并等待电池耗尽。仅在你拥有且能够承受恢复的设备上使用。重启后 root 会消失。
| 属性 | 接受值 |
|---|---|
| 设备 | Humane AI Pin,零售单元 |
| 固件 | qti/atoll/atoll:12/SKQ1.230401.001/101.000470.45.20:user/release-keys |
| Android | 12 |
| 内核 | 4.14.190-perf,构建于 Mon Nov 4 18:37:23 PST 2024 |
| 槽位 | 仅 _b |
| 内核架构 | aarch64 |
| Android ABI | arm64-v8a |
| 配置文件 ID | humane-aipin-45.20-nov4 |
| 构建项目 | humane-aipin-45.20 |
| 内核镜像 SHA-256 | d4f4e0deb20871fce207f1f095ba1934162081c2f10afaccbb2e6a1e938719fb |
| 候选发布重放 | 待最终干净启动重放 |
槽位 _a、开发者固件、相近固件版本以及其他 Qualcomm atoll 产品均被拒绝。参见兼容性详情。匹配的 Android 指纹不足以绕过此检查:A/B 槽位可以在相同的用户空间构建标识下携带不同的启动镜像和内核布局。
兼容性由 profiles/ 下的版本化清单定义。主机启动器、运行器、生成的本地预检、分配器几何、最小符号和构建的载荷都绑定到同一清单。向清单添加槽位仍然需要对确切配置的内核镜像进行干净启动的物理重放。
你需要:
adb、Python 3.10 或更新版本、make 和 C 编译器;28.2.13676358(r28c)来构建载荷。此仓库不包含 ADB 私钥、固件镜像、启动镜像、bugreport、设备日志或预构建载荷。
使用 Android 的命令行工具安装固定版本的 NDK:
sdkmanager "ndk;28.2.13676358"
确认 ADB 已将 Pin 识别为 device:
$ adb devices
List of devices attached
YOUR_SERIAL device
克隆仓库,然后对每条命令使用相同的显式序列号:
git clone https://github.com/TheAndersMadsen/humane-aipin-ghostlock.git
cd humane-aipin-ghostlock
./ghostlock check --serial YOUR_SERIAL
./ghostlock run --serial YOUR_SERIAL
./ghostlock verify --serial YOUR_SERIAL
check 是只读的。它会打印检测到的固件、内核、slot、shell 边界、SELinux 状态、电池、电源、NDK 版本以及构建工具状态。其诊断输出默认会遮蔽设备序列号。
run 执行一次受保护的尝试。它会要求你输入 ROOT YOUR_SERIAL,从源码构建,在推送 payload 后验证其哈希,捕获当前启动的 bugreport 以推导 KASLR,默认删除该原始 bugreport,并且仅在第二次完整预检之后才启动漏洞利用。启动器默认要求至少 20% 电量和外部电源,随后运行器会在消耗本次启动的唯一尝试之前立即重新检查这两项。--min-battery 0 会禁用这两道电源门控,仅应在已独立确认电源稳定的情况下使用。
verify 会独立要求启动作用域的 root broker 运行 id 和 getenforce。
成功的验证如下所示:
uid=0(root) gid=0(root) groups=0(root) context=u:r:kernel:s0
SELinux: Permissive
Boot epoch: <redacted>; uptime: <redacted>s
确切的 SELinux 上下文因内核和固件而异。验收条件是通过 broker 获得 UID/GID 0,且在同一次启动中 SELinux 处于 permissive 模式。
对于当前启动,payload 会:
init_cred;/data/local/tmp/su;它不会写入分区、解锁引导加载程序、安装模块、修改验证启动、创建重启持久化、联系网络服务或上传遥测数据。
从另一个 ADB shell 运行 root 命令:
adb -s YOUR_SERIAL shell '/data/local/tmp/su -c id'
运行器每次内核启动仅允许一次尝试。如果它报告未命中、超时、断开连接、状态不确定、panic 或重启,请勿在该次启动中重试。请先重启,然后再次运行 check。
如果 ADB 仍有响应:
adb -s YOUR_SERIAL reboot
如果 Pin 被硬挂起且 ADB 无响应,请断开所有外部电源。经测试的零售硬件没有可靠且用户可访问的强制重启方式,因此恢复可能需要等待电池耗尽后再重新连接电源。
正常重启后,root 权限会丢失。暂存文件可能以惰性状态保留在 /data/local/tmp 下;一个干净的 shell 可以删除它们,包括与特定启动相关的原子尝试声明:
adb -s YOUR_SERIAL shell 'rm -f /data/local/tmp/ghostlock-aipin.so /data/local/tmp/su /data/local/tmp/.ghostlock-su.sock /data/local/tmp/.ghostlock-aipin-attempt'
adb -s YOUR_SERIAL shell 'rm -rf /data/local/tmp/.ghostlock-aipin-attempt.*.lock'
在使用 PoC 之前请阅读 SAFETY.md,在重试失败的运行之前请阅读 TROUBLESHOOTING.md。
运行记录会写入一个权限为 0700 的临时目录。这些记录包含设备序列号、启动标识、内核地址以及漏洞利用遥测数据。切勿将该目录或原始 Android bugreport 附加到问题报告中。
请改为创建一份精简报告:
./ghostlock report /private/tmp/ghostlock-aipin-TIMESTAMP --output ghostlock-report.json
分享前请先检查 JSON。脱敏器会省略序列号、启动 ID、主机路径、原始命令输出和内核地址。它会包含预检、漏洞利用、验证和总运行时间的固定单调时长,以便在不共享设备证据的情况下比较失败情况。参见 PRIVACY.md。
构建 Android payload:
./ghostlock build
当存在多个有证据支撑的画像时,需明确选择一个:
./ghostlock build --profile humane-aipin-45.20-nov4
运行所有主机测试和两个独立构建:
./scripts/verify-release.sh
有效载荷被写入:
source/build/humane-aipin-45.20/bin/preload.so
构建产物已被 Git 忽略。发布资产应使用对应 GitHub 发布版本附带的校验和进行验证。
该漏洞利用 CVE 中悬空的栈驻留 rt_mutex_waiter 来引导一次受控的红黑树更新。KernelSnitch 首先通过 futex 哈希时序泄露一个 mm_struct 地址。随后,一个同 PFN 的 perf-event 门控证明已释放的 order-3 slab 页已被受控的 socket 缓冲区数据回收,之后才会继续触发损坏。启动绑定的 KASLR 基址由至少两个一致的当前启动 WARN 锚点推导得出。由此产生的读/写路径解析当前任务并执行启动范围内的凭据更改。
目标配置文件仅包含此路径所消耗的偏移量和符号。内核 Image 和完整符号表不予分发。TECHNICAL.md 描述了各阶段和故障关闭门控。
这是一个针对不受支持的消费设备的实验性研究发布。它不是通用的 Android root 工具,且与 Humane、HP 或 CosmOS 无关联。
代码采用 Apache-2.0 许可。实现基于 NebuSec 的 Apache-2.0 CyberMeowfia 工作;AI Pin 移植和发布工具记录在 PROVENANCE.md 和 THIRD_PARTY_NOTICES.md 中。
在报告漏洞或滥用问题之前,请阅读 SECURITY.md。