
CVE-2026-43499-aristotle-apk build-43
Exploit del kernel Android per CVE-2026-43499 (Futex-PI use-after-free) che concede root temporaneo su Xiaomi XIG04 per abilitare ADB. Include creazione automatica del payload e attivazione con un solo tocco.
Aristotle ADB Enable
Un'app Android minimale che attiva ADB su un au/KDDI Xiaomi "aristotle" (XIG04, Android 12) le cui opzioni sviluppatore non sono raggiungibili, utilizzando un root temporaneo ottenuto da CVE-2026-43499. È uno strumento device-owner nella stessa categoria di KingRoot: esegue il root del tuo telefono per modificare un'impostazione.
Ambito: il tuo XIG04 con
Xiaomi/XIG04_jp_kdi/XIG04:12/SP1A.210812.016/V14.0.3.0.TMFJPKD. Non è un exploit generico o remoto.
Cosa fa
Un pulsante, un solo compito:
- Estrae il payload dell'exploit (
preload.so) dall'APK nellafilesDirprivata dell'app,chmod 0700. - Innesca il bug del kernel lanciando un
/system/bin/truedi breve durata conLD_PRELOADche punta a quel payload. Il costruttore ELF del payload attiva la use-after-free Futex-PI, ottiene tmp-root e auto-installa un clientsu+ demone. - Conferma il root eseguendo
su -c ide verificandouid=0. - Abilita ADB come root:
settings put global development_settings_enabled 1settings put global adb_enabled 1stop adbd; start adbd(in alternativasetprop ctl.restart adbd)
Ogni passaggio viene riportato in un log a schermo.
La vulnerabilità
CVE-2026-43499 — una use-after-free nel percorso Futex-PI del kernel Linux (kernel/locking/rtmutex.c, remove_waiter()). Il kernel 5.10.136-android12 di aristotle è affetto (CONFIG_FUTEX_PI=y, CONFIG_RT_MUTEXES=y). L'exploit utilizza un "direct-root" solo dati (swap di cred, commutazione di SELinux enforcing) e forza bruta sui tag MTE per superare l'hardening del dispositivo. Il sorgente dell'exploit e gli offset misurati per aristotle si trovano nel git submodule exploit/ di questo repository.
Il payload viene compilato automaticamente
preload.so non è incluso nel repository. Viene prodotto dal submodule exploit/ e incorporato nell'APK in fase di build:
exploit/— git submodule: l'exploit CVE-2026-43499 per aristotle (compilapreload.so).- Il task Gradle
buildExploitSo(integrato inpreBuild) esegue ilmake ... API=31dell'exploit, quindi copia ilpreload.sorisultante inapp/src/main/assets/exploit/preload.soprima che l'APK venga pacchettizzato.
Un normale ./gradlew assembleDebug quindi compila e distribuisce il payload, a condizione che l'Android NDK sia installato.
Compilazione
# 1. fetch the exploit submodule
git submodule update --init --recursive
# 2. install the Android NDK r29 (the exploit Makefile auto-detects it,
# or export ANDROID_NDK_ROOT), plus JDK 17 and Android SDK platform 34
# 3. build — auto-builds preload.so (API=31) and embeds it
./gradlew assembleDebug # -> app/build/outputs/apk/debug/app-debug.apk
Niente NDK / vuoi solo la shell dell'app? Salta la build del payload (l'app riporterà quindi "exploit payload NOT deployed" e non modificherà nulla in fase di runtime):
./gradlew assembleDebug -PskipExploitBuild
Jar wrapper: gradle-wrapper.jar non è incluso. Generalo una volta con gradle wrapper --gradle-version 8.2, oppure compila con un Gradle di sistema (la CI usa un Gradle di sistema, quindi lì non è richiesto alcun wrapper jar).
CI / release
.github/workflows/build-release.yml (GitHub Actions) compila l'APK a ogni push e lo pubblica come GitHub Release (tag build-<run>), con l'app-debug.apk allegato. Il workflow scarica il submodule exploit, installa JDK 17 / Android SDK 34 / NDK r29 ed esegue gradle assembleDebug, che compila e incorpora preload.so (API=31).
Configurazione una tantum: pubblica questo repo e il repo dell'exploit sullo stesso proprietario GitHub come repository fratelli, così l'url relativo del submodule viene risolto. Se il repo dell'exploit è privato, aggiungi un PAT con scope repo come secret SUBMODULE_PAT e decommenta la riga token: nel workflow.
Struttura
.
├── settings.gradle / build.gradle / gradle.properties Gradle wiring
├── gradlew(.bat) + gradle/wrapper/ wrapper
├── exploit/ git submodule (builds preload.so)
└── app/
├── build.gradle minSdk 31 / targetSdk 31 / compileSdk 34, arm64-v8a; buildExploitSo task
└── src/main/
├── AndroidManifest.xml single launcher Activity, no dangerous perms
├── java/.../MainActivity.kt button + scrolling log
├── java/.../ExploitRunner.kt stage → LD_PRELOAD → su -c "settings ..."
├── res/{layout,values}/ UI, strings, theme
└── assets/exploit/ preload.so is embedded here at build time
Esecuzione
- Esegui
git submodule update --init --recursive, installa il NDK, poi./gradlew assembleDebug. - Installa e avvia sul XIG04. Se ADB è ciò che stai cercando di abilitare, installa l'APK direttamente dal dispositivo (download tramite file manager / browser) e aprilo dal launcher.
- Tocca Enable ADB (tmp-root) e osserva il log. In caso di successo termina con
adb_enabled is now: 1. - Collega ADB dal tuo PC come al solito.
Limitazioni / avvertenze
- Build singola. Gli offset sono fissati per la ROM sopra indicata; una build diversa richiede un payload riadattato.
- tmp-root è volatile. Il root viene perso al riavvio.
adb_enablednelle impostazioni globali di solito persiste e adbd non richiede root una volta abilitato. - SELinux / W^X. L'esecuzione di un file privato dell'app tramite
LD_PRELOADpuò essere negata a seconda del dominio dell'app; la strategia dell'exploit gestisce questo aspetto e qualsiasi negazione viene mostrata nel log anziché nascosta. - Solo per device di propria proprietà. Questo strumento serve per sbloccare ADB su hardware di tua proprietà.