
CVE-2026-43499-aristotle-apk build-43
Android कर्नल एक्सप्लॉइट CVE-2026-43499 (Futex-PI use-after-free) के लिए जो Xiaomi XIG04 पर अस्थायी रूट प्राप्त करके ADB सक्षम करता है। इसमें स्वचालित पेलोड निर्माण और वन-टैप सक्रियण शामिल है।
Aristotle ADB Enable
एक न्यूनतम Android ऐप जो au/KDDI Xiaomi "aristotle" (XIG04, Android 12) पर ADB चालू करता है — इस डिवाइस के डेवलपर विकल्पों तक नहीं पहुँचा जा सकता — CVE-2026-43499 से प्राप्त अस्थायी रूट का उपयोग करके। यह KingRoot की ही श्रेणी का एक device-owner टूल है: यह एक सेटिंग बदलने के लिए आपके अपने फ़ोन को रूट करता है।
दायरा: आपका अपना XIG04 जिस पर
Xiaomi/XIG04_jp_kdi/XIG04:12/SP1A.210812.016/V14.0.3.0.TMFJPKDचल रहा है। यह कोई सामान्य-उद्देश्य या रिमोट exploit नहीं है।
यह क्या करता है
एक बटन, एक काम:
- exploit पेलोड (
preload.so) को APK से निकालकर ऐप के निजीfilesDirमें स्टेज करें,chmod 0700करें। - उस पेलोड की ओर इशारा करते हुए
LD_PRELOADके साथ एक अल्पकालिक/system/bin/trueलॉन्च करके कर्नेल बग को ट्रिगर करें। पेलोड का ELF कंस्ट्रक्टर Futex-PI use-after-free को ट्रिगर करता है, tmp-root प्राप्त करता है, और स्वयं एकsuक्लाइंट + डेमॉन इंस्टॉल करता है। su -c idचलाकर औरuid=0की जाँच करके रूट की पुष्टि करें।- रूट के रूप में ADB सक्षम करें:
settings put global development_settings_enabled 1settings put global adb_enabled 1stop adbd; start adbd(विफल होने परsetprop ctl.restart adbdका सहारा लें)
हर चरण ऑन-स्क्रीन लॉग में दिखाया जाता है।
भेद्यता
CVE-2026-43499 — Linux कर्नेल के Futex-PI पथ (kernel/locking/rtmutex.c, remove_waiter()) में एक use-after-free। aristotle का 5.10.136-android12 कर्नेल प्रभावित है (CONFIG_FUTEX_PI=y, CONFIG_RT_MUTEXES=y)। यह exploit एक केवल-डेटा "direct-root" (cred स्वैप करें, SELinux enforcing फ़्लिप करें) का उपयोग करता है और डिवाइस की हार्डनिंग से बचने के लिए MTE टैग्स को brute-force करता है। exploit का स्रोत और मापे गए aristotle ऑफसेट इस रिपॉजिटरी के exploit/ git सबमॉड्यूल में मौजूद हैं।
पेलोड स्वचालित रूप से बनता है
preload.so कमिट नहीं है। इसे exploit/ सबमॉड्यूल से तैयार किया जाता है और बिल्ड समय पर APK में एम्बेड किया जाता है:
exploit/— git सबमॉड्यूल: CVE-2026-43499 aristotle exploit (preload.soबनाता है)।- Gradle टास्क
buildExploitSo(preBuildसे जुड़ा हुआ) exploit काmake ... API=31चलाता है, फिर APK पैकेज होने से पहले परिणामीpreload.soकोapp/src/main/assets/exploit/preload.soमें कॉपी करता है।
इसलिए एक सामान्य ./gradlew assembleDebug पेलोड बनाकर शिप कर देता है, बशर्ते Android NDK इंस्टॉल हो।
बिल्ड करना
# 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
NDK नहीं है / सिर्फ़ ऐप शेल चाहिए? पेलोड बिल्ड छोड़ दें (तब ऐप "exploit payload NOT deployed" रिपोर्ट करता है और रनटाइम पर कुछ भी नहीं बदलता):
./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) हर push पर APK बनाता है और उसे app-debug.apk संलग्न करते हुए GitHub Release (टैग build-<run>) के रूप में प्रकाशित करता है। वर्कफ़्लो exploit सबमॉड्यूल को चेकआउट करता है, JDK 17 / Android SDK 34 / NDK r29 इंस्टॉल करता है, और gradle assembleDebug चलाता है, जो preload.so (API=31) बनाकर एम्बेड करता है।
एकमुश्त सेटअप: इस रिपॉजिटरी और exploit रिपॉजिटरी को सिबलिंग रिपॉजिटरी के रूप में एक ही GitHub owner को push करें, ताकि सबमॉड्यूल का सापेक्ष (relative) url हल हो सके। यदि exploit रिपॉजिटरी निजी है, तो repo-स्कोप वाला PAT सीक्रेट SUBMODULE_PAT के रूप में जोड़ें और वर्कफ़्लो में token: पंक्ति को अनकमेंट करें।
लेआउट
.
├── 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
चलाना
git submodule update --init --recursiveचलाएँ, NDK इंस्टॉल करें, फिर./gradlew assembleDebugचलाएँ।- XIG04 पर इंस्टॉल करें और लॉन्च करें। यदि आप ADB सक्षम करने की कोशिश कर रहे हैं, तो APK को डिवाइस से ही इंस्टॉल करें (फ़ाइल मैनेजर / ब्राउज़र डाउनलोड) और इसे लॉन्चर से खोलें।
- Enable ADB (tmp-root) पर टैप करें और लॉग देखें। सफलता पर यह
adb_enabled is now: 1के साथ समाप्त होता है। - हमेशा की तरह अपने PC से ADB कनेक्ट करें।
सीमाएँ / सावधानियाँ
- एकल बिल्ड। ऑफसेट ऊपर दिए गए ROM से बंधे हैं; एक अलग बिल्ड के लिए दोबारा पोर्ट किए गए पेलोड की आवश्यकता होती है।
- tmp-root अस्थायी है। रीबूट पर रूट खो जाता है। ग्लोबल सेटिंग्स में
adb_enabledआमतौर पर बना रहता है, और सक्षम होने के बाद adbd को रूट की आवश्यकता नहीं होती। - SELinux / W^X. ऐप डोमेन के आधार पर
LD_PRELOADके माध्यम से ऐप-निजी फ़ाइल को निष्पादित करने से मना किया जा सकता है; exploit की अपनी रणनीति इसे संभालती है, और किसी भी अस्वीकृति को छिपाने के बजाय लॉग में दिखाया जाता है। - केवल device-owner उपयोग। यह आपके स्वामित्व वाले हार्डवेयर पर ADB अनलॉक करने के लिए है।