
استغلال الشهادات (Cert) لأجهزة MTK. يوجد خلل منطقي في عملية التحقق من الشهادات لدى MTK. مشابه لـ CVE-2023-20696.
استغلال شهادة (Cert) لأجهزة MTK. توجد ثغرة منطقية في عملية التحقق من الشهادات في MTK. مشابهة لـ CVE-2023-20696. تم التصحيح. CVE-2023-20696 CVE-2025-20730
هناك بعض المشكلات في اكتشاف البنية (architecture). سأحتاج إلى إصلاحها عندما يتوفر لدي وقت. أو يمكن لأي شخص تقديم طلب سحب (pull request). هذه نسخة مبرمجة بأسلوب "vibe-coding"، وسأعيد كتابتها لاحقًا. لكنها قابلة للاستخدام الآن.
هذا المشروع مخصص للبحث فقط. تأكد من حصولك على إذن قبل استخدامه. غير مسموح بالاستخدام غير القانوني. غير مسموح باستخدام هذا الاستغلال لتقديم خدمات مدفوعة.
بالنسبة لأجهزة MTK، يتحقق الـ preloader من bl2_ext/lk/atf ثم يقفز إليها.
هذه الصور موقعة بشهادات ASN.1.
لكن هناك خلل منطقي في عملية تحليل ASN.1.
بالنسبة للأجهزة القديمة V5/V6، يتم تحديد محتوى الشهادة عبر bypass_mode 1.
في هذا الوضع، يتم الدخول إلى أي كائن (object).
لذلك يمكننا إنشاء شهادة مزيفة تحتوي على كائن 0x3 (سلسلة بتات).
الشهادة المزيفة غير معدلة. لذا يمكنها اجتياز التحقق.
الشهادة الحقيقية تقع تحت الشهادة المزيفة. ويمكننا وضع هاش الصورة وهاش ترويسة الصورة في بداية الشهادة الحقيقية.
بالنسبة لأجهزة V6 الجديدة، يتم تحديد محتوى الشهادة عبر bypass_mode 0
في هذا الوضع، يتم تخطي أي كائن باستثناء 0x30.
لذا يمكننا وضع هاش الصورة وهاش ترويسة الصورة في بداية الشهادة.
ثم نترك بقية الأشياء دون تعديل.
ثم يمكننا تعديل محتوى الصورة.
وبذلك نكتسب التحكم في EL3.
يمكنك تعديل (patch) ملف BL2_EXT لإزالة التحقق من lk أو atf أو gz.
ثم قم بتعديل LK لإزالة التحقق من lk_main_dtb (وإلا فسوف يتعطل النظام).
وتحتاج إلى تعديل LK لإزالة جميع أقفال مُحمّل الإقلاع (bootloader locks) بما في ذلك set_lock_state لتجنب إعادة القفل أو بعض الأعطال.
python parse-part-img.py [the original image file] --split -o out
ثم يمكنك رؤية الصور المنفصلة (مثل lk و bl2_ext و lk_main_dtb و aee)
بعد التعديل بالنسبة لأجهزة v6 الجديدة python sign_mtk_cert.py [single image file] -w بالنسبة للأجهزة القديمة v6 / أجهزة v5 python sign_mtk_cert.py [single image file] -w --legacy
ثم قم بإدراج الصورة الموقعة الجديدة مرة أخرى
python build-part-img.py replace [original image file] --name [the single image name you want to insert back] -- file [the new signed single image]
