Skip to content
KitploitKITPLOIT
أدواتالمدونة
Log in
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
mt6985-CVE-2026-43499 — محوّل استغلال CVE-2026-43499 لمعالج MT6985 MediaTek Dimensity 9300 (vivo PD2241) | Kitploit
أدوات/GitHubGitHub/233laoliu/mt6985-cve-2026-43499
أطر الاستغلالتحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةالتحقيق الجنائي الرقميأمن الجوالتحليل البرامج الثابتةاستغلال الملفات الثنائية
GitHub233laoliu/mt6985-cve-2026-43499

mt6985-CVE-2026-43499

محوّل استغلال CVE-2026-43499 لمعالج MT6985 MediaTek Dimensity 9300 (vivo PD2241)

عرض المستودع
124منذ 2 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

سجل فشل CVE-2026-43499: محاولة تكييف MT6985

الخلاصة: استهلكت 68M توكن، ولم أحصل على صلاحيات root.
السبب: هجوم التوقيت KernelSnitch غير موثوق على Dimensity 9200 من MTK، وCONFIG_PANIC_ON_OOPS=y لا يترك مجالاً للتجربة والخطأ.
هذه المقالة توثق رحلة الأخطاء الكاملة، كمرجع لمن يأتي بعدنا لتجنب هذه المزالق.


الخلفية

المشروعالقيمة
الجهازvivo PD2241 (Dimensity 9200 / MT6985), Android 15
البرنامج الثابتPD2241_A_15.2.10.2.W10.V000L1
النواة5.15.178-android13-8-gfb31f5bdd612-dirty
مُحمّل الإقلاعمقفل (ro.boot.flash.locked=1)
SELinuxEnforcing
panic_on_oopsمُفعّل → أي OOPS في النواة = إعادة تشغيل فورية
الاستغلالCyberMeowfia — CVE-2026-43499 (IonStack)
شجرة المصدرandroid_15.0_kernel_MT6985 (5.15.178) — غير مطابقة لإصدار الجهاز (المصدر هو android15 GKI، والجهاز يعمل بنظام android13 GKI)

ما تم إنجازه

1. تحليل المصدر ← استخراج إزاحات البنى

تم الاستخراج من arch/arm64/include/asm/memory.h + include/linux/fs.h + android/abi_gki_aarch64.xml:

  • تخطيط الذاكرة: KIMAGE_TEXT_BASE = 0xffffffc008000000, VA_BITS=39, DIRECT_MAP=256GB
  • task_struct: 36864 بت، محلل بالكامل (ABI XML layout-offset-in-bits)
  • file_operations: لا يوجد iopoll (android13 GKI), IOCTL=0x48, open=0x68
  • cred: atomic_t usage = 4 بايت, uid=0x04
  • struct page: 64 بايت, slab_cache=0x18

الاكتشاف الرئيسي: المصدر هو android15 GKI، والجهاز هو android13 GKI — إزاحات task_struct تختلف بمقدار 0x40~0x88 بايت، ولا يمكن نسخها حرفياً من المصدر.

2. فك حزم البرنامج الثابت ← استخراج الرموز

OTA zip (8.3GB)
  → payload.bin (8.2GB)
    → payload_dumper → boot.img (96MB, v4 header)
      → فك ضغط LZ4 → Image (50MB ARM64)
        → kallsyms-finder → 187810 رمزاً

تم استخراج الرموز من إصدارين من البرنامج الثابت (15.2.7.6 / 15.2.10.2) — نفس الرمز يختلف بين الإصدارين بمقدار 10KB~200KB، يجب استخدام الإصدار الصحيح.

3. التحقق من التفكيك ← تأكيد الإزاحات الحرجة عبر capstone

# داخل rt_mutex_adjust_pi:
LDR x21, [x19, #0x8b0]  → pi_blocked_on = 0x8b0 (قيمة android15، وليست frankel)

هذا يؤكد أن تخطيط task_struct هو فرع android15، وليس android13 الخاص بـ frankel.

4. الترجمة ← نجحت

NDK r29, make PROJECT=android_15.0_kernel_MT6985 → preload.so (150KB).

5. التشغيل ← انهيارات متكررة

[+] preload starting pid=25414
[+] p0 profile ... تم تحميل جميع الرموز بشكل صحيح
[-] KernelSnitch mm_struct leak failed     ← أحياناً لا تظهر هذه الرسالة (نجاح عرضي)
[+] slide child context route=pselect      ← بدء العملية الفرعية لتسريب KASLR slide
[انفجار النواة]                                ← rt_mutex_adjust_prio_chain+0x1b0

تعليمة الانهيار (capstone):

ldar w8, [x27]    ; x27 = waiter->lock (محملة من [x28, #0x38])
                  ; قيمة x27 غير صالحة → لا يوجد تعيين لصفحة الذاكرة → translation fault
                  ; → die() → panic → إعادة تشغيل

لماذا فشل

السبب الجذري 1: KernelSnitch غير موثوق على MTK

KernelSnitch هو مدخل الاستغلال بالكامل — فهو يسرب عنوان mm_struct عبر فروق التوقيت في جدول تجزئة futex:

  1. كشف التصادم نجح — تم العثور على 5 تصادمات تحت العتبة المنخفضة
  2. مطابقة bruteforce تفشل دائماً تقريباً — المشكلة الأساسية في:
MT6985 يحتوي على CONFIG_KASAN_HW_TAGS=y → النواة تستخدم وسوم MTE لتمييز تخصيصات slab
مؤشر mm_struct يحمل وسم KASAN → futex_hash يُحسب بناءً على المؤشر الموسوم

لكن مسح bruteforce يغطي الـ direct map (عناوين غير موسومة) → التجزئة المحسوبة غير متطابقة
حتى مع إضافة تكرار وسوم MTE (0-14 أي 15 نوعاً)، على نظام VA_BITS=39
بتات الوسم (bit56-59) تتداخل مع بتات توسيع الإشارة → بعض تركيبات الوسوم تولد عناوين غير صالحة → تفويت

أجهزة Pixel لا تحتوي على KASAN_HW_TAGS، وهذه الآلية تعمل هناك. MTK لا تعمل.

السبب الجذري 2: CONFIG_PANIC_ON_OOPS هو القاتل

Pixel:  OOPS في النواة → dump_stack → متابعة التشغيل → يمكن إعادة محاولة الاستغلال
MT6985: OOPS في النواة → die() → panic() → إعادة تشغيل فورية → لا مجال للتجربة والخطأ
أي انحراف بسيط في سلسلة π يؤدي لانهيار كامل، بينما في Pixel الانحراف يعني فقط "لم تنجح هذه المرة، جرب مجموعة عناوين أخرى".

كما أن مُحمّل الإقلاع مقفل (flash.locked=1) → لا يمكن وميض نواة مخصصة لإزالة هذا الخيار.

السبب الجذري 3: انحراف إصدار النواة

شجرة المصدر: 5.15.178 android15 GKI
الجهاز:      5.15.178-android13 (بائع vivo)

رغم أن رقم الإصدار الرئيسي هو 5.15.178 في كليهما، إلا أن فرع GKI مختلف (android13 مقابل android15)، وتخطيطات البنى الحرجة مثل task_struct/cred غير متطابقة. تم التنقل مراراً بين مجموعتي إزاحات frankel/android15، وفي النهاية تم التثبيت عبر التفكيك فقط.


التعديلات التي تمت تجربتها (كلها بلا فائدة)

التعديلالهدفالنتيجة
THRESHOLD_MULT 10→5→3خفض عتبة كشف التصادم<5 إيجابيات كاذبة كثيرة جداً
APPENDED_FUTEXES 4096→8192زيادة فرق سلسلة التجزئةبلا تأثير
REPEAT_MEASUREMENT/AVERAGEزيادة دقة أخذ العيناتبلا تأثير
MTE=1جعل bruteforce يتكرر عبر الوسومأبطأ، بل قلل الانهيارات
MM_STRUCT_SZ 0x500→0x400تصحيح خطوة mm_structضروري، ABI الفعلي 992 بايت
IDENTITY_END 64GB→256GBتوسيع نطاق المسحبطيء جداً (تكرار MTE)، وما زال غير متطابق
إزاحات TASK: android15↔frankelتثبيت الإزاحة الصحيحةالتفكيك يؤكد android15
إزاحات FOPS: android15↔frankelandroid13 لا يحتوي iopollاستخدام frankel

الوضع الحالي لـ target.h

في exploit/targets/android_15.0_kernel_MT6985/target.h:

الفئةدرجة الثقةطريقة التحقق
تخطيط الذاكرةصحيححساب memory.h + التحقق عبر kallsyms _text
إزاحات الرموز (22 رمزاً)صحيحةمستخرجة من boot.img الخاص بـ 15.2.10.2
إزاحات task_structصحيحةABI XML + تفكيك capstone (pi_blocked_on=0x8b0)
إزاحات FOPSخاطئة (تم تصحيحها في 2026-07-31)القيمة الأصلية منسوخة من frankel (android13 بلا iopoll)؛ ABI شجرة المصدر الفعلي يحتوي iopoll@0x30، ioctl=0x50، open=0x70 — انظر VERIFICATION.md
إزاحات CREDصحيحة (تم التحقق منها)ABI XML: uid=0x04، securebits=0x24، caps=0x28، security=0x78

التجميع ينجح، والتشغيل يعمل، والخسارة كانت في الميل الأخير.


إذا كنت تريد المتابعة

الشروط الضرورية (لا غنى عن أي منها)

  1. إزالة CONFIG_PANIC_ON_OOPS — إما بوميض نواة مخصصة (يتطلب فك قفل مُحمّل الإقلاع)، أو إيجاد جهاز MT6985 آخر يكون هذا الخيار معطلاً افتراضياً
  2. حل مشكلة KernelSnitch — يتطلب معايرة توقيت ذاكرة التخزين المؤقت لـ Dimensity 9200 من MTK، أو استبدال KernelSnitch بالكامل في الاستغلال بطريقة أخرى لتسريب mm_struct

أفكار بديلة محتملة

  • /proc/self/pagemap — مقيد على هذا الجهاز (يعيد أصفاراً)
  • واجهات تصحيح أخطاء خاصة بـ MTK (/proc/mtk_*) — موجودة لكنها تحتاج مزيداً من التحليل
  • ثغرات ioctl في مشغلات الكاميرا/GPU من MTK — مسار تصعيد أسهل
  • انتظار تكييف مجتمعي لنسخة MTK

القيمة المتبقية في هذا المستودع

  • symbols/kallsyms_PD2241_15.2.10.2.txt — جدول رموز كامل لإصدار 15.2.10.2، يمكن لمن يأتي بعدنا استخدامه مباشرة
  • device_config.txt — إعدادات النواة الفعلية للجهاز، يمكن رؤية ما غيّره البائع
  • exploit/targets/android_15.0_kernel_MT6985/target.h — إزاحات البنى تم التحقق منها
  • scripts/server_compile.py — ترجمة آلية، إعادة الترجمة سريعة بعد تغيير المعاملات

قائمة المزالق (لمن يأتي بعدنا)

تنزيل الأداة