العودة إلى التحديثات
New releaseJul 30, 2026

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.
ليس استغلالًا عامًا أو عن بُعد.


ما يفعله

زر واحد، مهمة واحدة:

  1. تجهيز حمولة الاستغلال (preload.so) من APK إلى filesDir الخاص بالتطبيق، مع chmod 0700.
  2. إطلاق خطأ النواة عن طريق تشغيل /system/bin/true لفترة قصيرة مع LD_PRELOAD مشيرًا إلى تلك الحمولة. يقوم منشئ ELF الخاص بالحمولة بتشغيل استغلال use-after-free في Futex-PI، ويأخذ صلاحية مؤقتة (tmp-root)، ويقوم بتثبيت عميل su + خادم.
  3. تأكيد الجذر عن طريق تشغيل su -c id والتحقق من uid=0.
  4. تمكين ADB كجذر:
    • settings put global development_settings_enabled 1
    • settings put global adb_enabled 1
    • stop 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 هنا أثناء البناء

التشغيل

  1. git submodule update --init --recursive، قم بتثبيت NDK، ثم ./gradlew assembleDebug.
  2. قم بتثبيت وتشغيل على XIG04. إذا كنت تحاول تمكين ADB، قم بتثبيت APK من الجهاز نفسه (مدير الملفات / تحميل المتصفح) وافتحه من المشغل.
  3. اضغط على Enable ADB (tmp-root) وشاهد السجل. عند النجاح، ينتهي بـ adb_enabled is now: 1.
  4. قم بتوصيل ADB من جهاز الكمبيوتر كالمعتاد.

القيود / التحذيرات

  • بناء واحد. العناوين مثبتة على الروم المذكور أعلاه؛ بناء مختلف يتطلب إعادة نقل الحمولة.
  • الصلاحية المؤقتة متطايرة. يتم فقدان الجذر عند إعادة التشغيل. عادةً ما يستمر adb_enabled في الإعدادات العامة، ولا يحتاج adbd إلى الجذر بعد التمكين.
  • SELinux / W^X. قد يتم رفض تنفيذ ملف خاص بالتطبيق عبر LD_PRELOAD اعتمادًا على مجال التطبيق؛ تتعامل استراتيجية الاستغلال نفسها مع هذا، ويتم عرض أي رفض في السجل بدلاً من إخفائه.
  • استخدام مالك الجهاز فقط. هذا لفتح ADB على جهاز تملكه.

الفئات