
CVE-2026-43499-aristotle-apk build-43
Exploit du noyau Android pour CVE-2026-43499 (use-after-free Futex-PI) offrant un accès root temporaire sur Xiaomi XIG04 afin d'activer ADB. Comprend une compilation automatisée du payload et une activation en un clic.
Activer ADB sur Aristotle
Une application Android minimale qui active ADB sur un au/KDDI Xiaomi « aristotle » (XIG04, Android 12) dont les options de développeur sont inaccessibles, à l'aide d'un root temporaire obtenu grâce à CVE-2026-43499. Il s'agit d'un outil de propriétaire d'appareil dans la même catégorie que KingRoot : il roote votre propre téléphone pour modifier un paramètre.
Périmètre : votre propre XIG04 fonctionnant sous
Xiaomi/XIG04_jp_kdi/XIG04:12/SP1A.210812.016/V14.0.3.0.TMFJPKD. Pas un exploit à usage général ou à distance.
Ce qu'elle fait
Un bouton, une seule tâche :
- Placez la charge utile de l'exploit (
preload.so) extraite de l'APK dans lefilesDirprivé de l'application,chmod 0700. - Déclenchez le bug du noyau en lançant un
/system/bin/trueéphémère avecLD_PRELOADpointant vers cette charge utile. Le constructeur ELF de la charge utile déclenche l'use-after-free Futex-PI, obtient un root temporaire et installe automatiquement un clientsu+ un démon. - Confirmez le root en exécutant
su -c idet en vérifiant la présence deuid=0. - Activez ADB en tant que root :
settings put global development_settings_enabled 1settings put global adb_enabled 1stop adbd; start adbd(repli sursetprop ctl.restart adbd)
Chaque étape est affichée dans un journal à l'écran.
La vulnérabilité
CVE-2026-43499 — une utilisation après libération (use-after-free) dans le chemin Futex-PI du noyau Linux (kernel/locking/rtmutex.c, remove_waiter()). Le noyau 5.10.136-android12 d'aristotle est concerné (CONFIG_FUTEX_PI=y, CONFIG_RT_MUTEXES=y). L'exploit utilise un « direct-root » data-only (échange du cred, bascule du mode enforcing de SELinux) et effectue un brute-force des balises MTE pour survivre au durcissement de l'appareil. Le code source de l'exploit et les offsets mesurés d'aristotle se trouvent dans le sous-module git exploit/ de ce dépôt.
La charge utile est construite automatiquement
preload.so n'est pas commité. Il est produit à partir du sous-module exploit/ et intégré dans l'APK au moment de la compilation :
exploit/— sous-module git : l'exploit aristotle CVE-2026-43499 (construitpreload.so).- La tâche Gradle
buildExploitSo(branchée surpreBuild) exécute lemake ... API=31de l'exploit, puis copie lepreload.soobtenu dansapp/src/main/assets/exploit/preload.soavant l'empaquetage de l'APK.
Un simple ./gradlew assembleDebug construit donc la charge utile et l'embarque, à condition que le NDK Android soit installé.
Compilation
# 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
Pas de NDK / vous voulez seulement l'enveloppe de l'application ? Ignorez la compilation de la charge utile (l'application signale alors « exploit payload NOT deployed » et ne modifie rien à l'exécution) :
./gradlew assembleDebug -PskipExploitBuild
Wrapper jar : gradle-wrapper.jar n'est pas commité. Générez-le une fois avec gradle wrapper --gradle-version 8.2, ou compilez avec un Gradle système (la CI utilise un Gradle système, donc aucun wrapper jar n'y est nécessaire).
CI / versions
.github/workflows/build-release.yml (GitHub Actions) compile l'APK à chaque push et le publie sous forme de GitHub Release (tag build-<run>), avec l'app-debug.apk joint. Le workflow récupère le sous-module exploit, installe JDK 17 / Android SDK 34 / NDK r29, et exécute gradle assembleDebug, qui compile et intègre preload.so (API=31).
Configuration initiale : poussez ce dépôt et le dépôt de l'exploit vers le même propriétaire GitHub en tant que dépôts frères, afin que l'URL relative du sous-module soit résolue. Si le dépôt de l'exploit est privé, ajoutez un PAT doté du scope repo comme secret SUBMODULE_PAT et décommentez la ligne token: dans le workflow.
Arborescence
.
├── 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
Exécution
git submodule update --init --recursive, installez le NDK, puis./gradlew assembleDebug.- Installez et lancez l'application sur le XIG04. Si ADB est ce que vous essayez d'activer, installez l'APK depuis l'appareil lui-même (gestionnaire de fichiers / téléchargement depuis le navigateur) et ouvrez l'application depuis le lanceur.
- Touchez Enable ADB (tmp-root) et suivez le journal. En cas de succès, il se termine par
adb_enabled is now: 1. - Connectez ADB depuis votre PC comme d'habitude.
Limitations / avertissements
- Compilation unique. Les offsets sont liés à la ROM ci-dessus ; une autre compilation nécessite une charge utile re-portée.
- Le root temporaire est volatile. Le root est perdu au redémarrage.
adb_enableddans les paramètres globaux persiste généralement, et adbd n'a pas besoin de root une fois activé. - SELinux / W^X. L'exécution d'un fichier privé de l'application via
LD_PRELOADpeut être refusée selon le domaine de l'application ; la stratégie propre de l'exploit gère ce cas, et tout refus est affiché dans le journal plutôt que masqué. - Utilisation sur appareil personnel uniquement. Cela sert à déverrouiller ADB sur du matériel que vous possédez.