Torna agli aggiornamenti
New releaseJul 30, 2026

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.

Condividi

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:

  1. Estrae il payload dell'exploit (preload.so) dall'APK nella filesDir privata dell'app, chmod 0700.
  2. Innesca il bug del kernel lanciando un /system/bin/true di breve durata con LD_PRELOAD che punta a quel payload. Il costruttore ELF del payload attiva la use-after-free Futex-PI, ottiene tmp-root e auto-installa un client su + demone.
  3. Conferma il root eseguendo su -c id e verificando uid=0.
  4. Abilita ADB come root:
    • settings put global development_settings_enabled 1
    • settings put global adb_enabled 1
    • stop adbd; start adbd (in alternativa setprop 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 (compila preload.so).
  • Il task Gradle buildExploitSo (integrato in preBuild) esegue il make ... API=31 dell'exploit, quindi copia il preload.so risultante in app/src/main/assets/exploit/preload.so prima 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

  1. Esegui git submodule update --init --recursive, installa il NDK, poi ./gradlew assembleDebug.
  2. 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.
  3. Tocca Enable ADB (tmp-root) e osserva il log. In caso di successo termina con adb_enabled is now: 1.
  4. 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_enabled nelle 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_PRELOAD può 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à.

Categorie