返回更新列表
新发布Jul 30, 2026

CVE-2026-43499-aristotle-apk build-43

Android内核漏洞利用,针对CVE-2026-43499(Futex-PI释放后使用),可在小米XIG04上获取临时root权限以启用ADB。包含自动化有效载荷构建和一键激活。

分享

Aristotle ADB Enable

一个极简的安卓应用,用于在无法进入开发者选项的 au/KDDI 小米 "aristotle" (XIG04, Android 12) 上开启 ADB,通过 CVE-2026-43499 获取的临时 root 权限实现。它与 KingRoot 属于同一类设备所有者工具:通过 root 自己的手机来切换一个设置。

范围:你自己的运行 Xiaomi/XIG04_jp_kdi/XIG04:12/SP1A.210812.016/V14.0.3.0.TMFJPKD 的 XIG04。 非通用或远程利用。


功能

一键完成:

  1. 将利用载荷(preload.so)从 APK 中部署到应用的私有 filesDir,并 chmod 0700
  2. 通过启动一个短暂的 /system/bin/true,并将 LD_PRELOAD 指向该载荷来触发内核漏洞。载荷的 ELF 构造函数触发 Futex-PI 释放后使用(use-after-free),获取临时 root,并自行安装 su 客户端和守护进程。
  3. 通过运行 su -c id 并检查输出是否为 uid=0 来确认 root 权限。
  4. 以 root 身份启用 ADB:
    • settings put global development_settings_enabled 1
    • settings put global adb_enabled 1
    • stop adbd; start adbd(如果失败则回退到 setprop ctl.restart adbd

每一步都会显示在屏幕日志中。

漏洞

CVE-2026-43499 — Linux 内核 Futex-PI 路径(kernel/locking/rtmutex.cremove_waiter())中的释放后使用漏洞。aristotle 的 5.10.136-android12 内核受影响(CONFIG_FUTEX_PI=yCONFIG_RT_MUTEXES=y)。该利用采用纯数据的“直接 root”(交换 cred,关闭 SELinux 强制模式),并暴力破解 MTE 标签以绕过设备的加固。利用源码和测量的 aristotle 偏移量位于本仓库的 exploit/ git 子模块中。


载荷自动构建

preload.so 不提交。它由 exploit/ 子模块生成,并在构建时嵌入 APK:

  • exploit/ — git 子模块:CVE-2026-43499 aristotle 利用(构建 preload.so)。
  • Gradle 任务 buildExploitSo(接入 preBuild)运行利用的 make ... API=31,然后将生成的 preload.so 复制到 app/src/main/assets/exploit/preload.so,之后 APK 被打包。

因此,正常运行 ./gradlew assembleDebug 即可构建并包含载荷,前提是已安装 Android NDK。

构建

# 1. 获取利用子模块
git submodule update --init --recursive

# 2. 安装 Android NDK r29(利用的 Makefile 会自动检测,或者设置 ANDROID_NDK_ROOT 环境变量),以及 JDK 17 和 Android SDK platform 34

# 3. 构建 — 自动构建 preload.so(API=31)并嵌入
./gradlew assembleDebug          # -> app/build/outputs/apk/debug/app-debug.apk

没有 NDK / 只想要应用外壳?跳过载荷构建(应用会显示“利用载荷未部署”,且运行时不做任何更改):

./gradlew assembleDebug -PskipExploitBuild

Wrapper jar: gradle-wrapper.jar 不提交。使用 gradle wrapper --gradle-version 8.2 生成一次,或使用系统 Gradle 构建(CI 使用系统 Gradle,因此不需要 wrapper jar)。

CI / 发布

.github/workflows/build-release.yml(GitHub Actions)在 每次推送 时构建 APK,并将其作为 GitHub Release(标签 build-<run>)发布,附带上 app-debug.apk。该工作流检出 exploit 子模块,安装 JDK 17 / Android SDK 34 / NDK r29,并运行 gradle assembleDebug,该命令会构建并嵌入 preload.so(API=31)。

一次性设置:将此仓库和利用仓库推送到 同一 GitHub 所有者 下作为兄弟仓库,以便子模块的相对 URL 能解析。如果利用仓库是私有的,请添加一个具有 repo 范围的 PAT 作为密钥 SUBMODULE_PAT,并取消工作流中 token: 行的注释。

布局

.
├── settings.gradle / build.gradle / gradle.properties   Gradle 配置
├── gradlew(.bat) + gradle/wrapper/                       wrapper
├── exploit/                                              git 子模块(构建 preload.so)
└── app/
    ├── build.gradle          minSdk 31 / targetSdk 31 / compileSdk 34, arm64-v8a; buildExploitSo 任务
    └── src/main/
        ├── AndroidManifest.xml         单个启动 Activity,无危险权限
        ├── java/.../MainActivity.kt    按钮 + 滚动日志
        ├── java/.../ExploitRunner.kt   部署 → LD_PRELOAD → su -c "settings ..."
        ├── res/{layout,values}/        UI、字符串、主题
        └── assets/exploit/             构建时 preload.so 嵌入于此

运行

  1. git submodule update --init --recursive,安装 NDK,然后 ./gradlew assembleDebug
  2. 在 XIG04 上安装并启动。如果试图启用 ADB,请从设备本身(文件管理器 / 浏览器下载)安装 APK,并从启动器打开。
  3. 点击 启用 ADB(临时 root) 并查看日志。成功时以 adb_enabled is now: 1 结束。
  4. 像往常一样从 PC 连接 ADB。

限制 / 注意事项

  • 单一构建。 偏移量固定于上述 ROM;不同构建需要重新移植载荷。
  • 临时 root 是易失的。 重启后 root 丢失。全局设置中的 adb_enabled 通常保持不变,启用后 adbd 不需要 root。
  • SELinux / W^X。 通过 LD_PRELOAD 执行应用私有文件可能会被拒绝,取决于应用域;利用自身的策略处理了这一点,任何拒绝都会在日志中显示,而非隐藏。
  • 仅限设备所有者使用。 仅用于在你拥有的硬件上解锁 ADB。

分类