
CVE-2026-43499-aristotle-apk build-43
استغلال نواة أندرويد لـ CVE-2026-43499 (استخدام بعد التحرير في Futex-PI) يحصل على صلاحيات الجذر المؤقتة على Xiaomi XIG04 لتمكين ADB. يتضمن بناء الحمولة الآلي وتفعيل بنقرة واحدة.
تمكين ADB لجهاز Aristotle
تطبيق Android صغير يقوم بتشغيل ADB على au/KDDI Xiaomi "aristotle" (XIG04, Android 12) الذي لا يمكن الوصول إلى خيارات المطور فيه، وذلك باستخدام صلاحية مؤقتة تم الحصول عليها من CVE-2026-43499. إنها أداة مملوكة للجهاز في نفس فئة KingRoot: تقوم بتجذير هاتفك الخاص لتغيير إعداد.
النطاق: جهاز XIG04 الخاص بك الذي يعمل
Xiaomi/XIG04_jp_kdi/XIG04:12/SP1A.210812.016/V14.0.3.0.TMFJPKD.
ليس استغلالًا عامًا أو عن بُعد.
ما يفعله
زر واحد، مهمة واحدة:
- تجهيز حمولة الاستغلال (
preload.so) من APK إلىfilesDirالخاص بالتطبيق، معchmod 0700. - إطلاق خطأ النواة عن طريق تشغيل
/system/bin/trueلفترة قصيرة معLD_PRELOADمشيرًا إلى تلك الحمولة. يقوم منشئ ELF الخاص بالحمولة بتشغيل استغلال use-after-free في Futex-PI، ويأخذ صلاحية مؤقتة (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 — use-after-free في مسار Futex-PI في نواة لينكس (kernel/locking/rtmutex.c, remove_waiter()). نواة 5.10.136-android12 في aristotle متأثرة (CONFIG_FUTEX_PI=y, CONFIG_RT_MUTEXES=y). يستخدم الاستغلال نهج "جذر مباشر" قائم على البيانات فقط (تبديل cred، وإيقاف فرض SELinux) ويقوم بتجربة علامات MTE لاجتياز تحسينات الجهاز. مصدر الاستغلال وعناوين aristotle المقاسة موجودة في exploit/ git submodule لهذا المستودع.
يتم بناء الحمولة تلقائيًا
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
جرة الغلاف: gradle-wrapper.jar غير مضمن. قم بإنشائها مرة واحدة باستخدام gradle wrapper --gradle-version 8.2، أو قم بالبناء باستخدام Gradle النظام (يستخدم CI Gradle النظام، لذا لا حاجة لجرة الغلاف هناك).
CI / الإصدارات
.github/workflows/build-release.yml (GitHub Actions) يقوم ببناء APK في كل دفعة وينشره كـ إصدار GitHub (علامة build-<run>)، مع إرفاق app-debug.apk. تتحقق سير العمل من الوحدة الفرعية exploit، وتثبت JDK 17 / Android SDK 34 / NDK r29، وتشغل gradle assembleDebug، الذي يبني ويضمن preload.so (API=31).
إعداد لمرة واحدة: ادفع هذا المستودع ومستودع الاستغلال إلى نفس مالك GitHub كمستودعات شقيقة، بحيث يتم حل عنوان url النسبي للوحدة الفرعية. إذا كان مستودع الاستغلال خاصًا، أضف PAT بنطاق repo كسر SUBMODULE_PAT وأزل التعليق عن سطر token: في سير العمل.
الهيكل
.
├── settings.gradle / build.gradle / gradle.properties توصيلات Gradle
├── gradlew(.bat) + gradle/wrapper/ الغلاف
├── exploit/ وحدة فرعية git (تبني preload.so)
└── app/
├── build.gradle minSdk 31 / targetSdk 31 / compileSdk 34, arm64-v8a; مهمة buildExploitSo
└── src/main/
├── AndroidManifest.xml نشاط إطلاق واحد، لا أذونات خطيرة
├── java/.../MainActivity.kt زر + سجل قابل للتمرير
├── java/.../ExploitRunner.kt تجهيز → LD_PRELOAD → su -c "settings ..."
├── res/{layout,values}/ واجهة المستخدم، النصوص، السمة
└── assets/exploit/ يتم تضمين preload.so هنا أثناء البناء
التشغيل
git submodule update --init --recursive، قم بتثبيت NDK، ثم./gradlew assembleDebug.- قم بتثبيت وتشغيل على XIG04. إذا كنت تحاول تمكين ADB، قم بتثبيت APK من الجهاز نفسه (مدير الملفات / تحميل المتصفح) وافتحه من المشغل.
- اضغط على Enable ADB (tmp-root) وشاهد السجل. عند النجاح، ينتهي بـ
adb_enabled is now: 1. - قم بتوصيل ADB من جهاز الكمبيوتر كالمعتاد.
القيود / التحذيرات
- بناء واحد. العناوين مثبتة على الروم المذكور أعلاه؛ بناء مختلف يتطلب إعادة نقل الحمولة.
- الصلاحية المؤقتة متطايرة. يتم فقدان الجذر عند إعادة التشغيل. عادةً ما يستمر
adb_enabledفي الإعدادات العامة، ولا يحتاج adbd إلى الجذر بعد التمكين. - SELinux / W^X. قد يتم رفض تنفيذ ملف خاص بالتطبيق عبر
LD_PRELOADاعتمادًا على مجال التطبيق؛ تتعامل استراتيجية الاستغلال نفسها مع هذا، ويتم عرض أي رفض في السجل بدلاً من إخفائه. - استخدام مالك الجهاز فقط. هذا لفتح ADB على جهاز تملكه.