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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
desc_race-1 — # استغلال desc_race لنظام iOS 15.0 - 15.1.1 (مع بدائيات قراءة/كتابة مستقرة للنواة) (CVE-2021-30955) | Kitploit
أدوات/GitHubGitHub/st-rnd/desc_race-1
أمان iOSتحليل الثغرات الأمنيةالاستغلالأمن الجوالاستغلال الملفات الثنائية
GitHubst-rnd/desc_race-1

desc_race-1

# استغلال desc_race لنظام iOS 15.0 - 15.1.1 (مع بدائيات قراءة/كتابة مستقرة للنواة) (CVE-2021-30955)

عرض المستودع
2منذ 4 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

desc_race

استغلال "desc_race" (CVE-2021-30955) لنظام iOS 15.0 - 15.1.1 (مع بدائيات قراءة/كتابة مستقرة للنواة)

طريقة الاستغلال

  1. قم بزيادة سعة مصفوفة IOSurfaceClient إلى 0x2000، والهدف هو كتابة مؤشر يكون محتواه تحت السيطرة الكاملة ثم استخدام واجهات IOSurfaceRootUserClient لتحقيق قراءة/كتابة النواة. حجم المصفوفة هو 0x2000 * 8 بايت وبالتالي تقع في الخريطة الكبيرة لـ KHEAP_KEXT وهي نفسها KHEAP_DEFAULT.

  2. ثم قم بتخصيص مخزن مؤقت للنواة بحجم 0x4000 بايت باستخدام رسالة مساعدة kmsg مع واصف ool بحجم 0x4000 بايت والذي سيتم استبداله من الخلف. ثم قم بتشغيل الخطأ مع الرسالة المخصصة، المسماة double copyin kmsg، الموضوعة خلف المخزن المؤقت المساعد للنواة مباشرة. وهذه الرسالة تحتوي على واصف منافذ ool الذي عدده 0x2000 وبالتالي سيكون قريبًا جدًا من مصفوفة IOSurfaceClient.

  3. ثم يجب أن تستلم الرسالة المساعدة. إذا نجح السباق، سيتم كشف واصف منافذ ool و يمكننا تحديد عنوان مصفوفة IOSurfaceClient.

  4. ثم قم بتخصيص مخزن مؤقت للنواة بحجم 0x4000 بايت مرة أخرى، وهذا سيشغل المخزن المؤقت المذكور أعلاه. هذه المرة أقوم ببناء رأس kmsg مزيف مع جسم مناسب. ثم أقوم بتدمير رسالة double copyin kmsg، وستبدأ النواة مع رأسنا المزيف. أستخدم واصف mach_msg_ool_descriotpor_t مزيفًا وأقوم بتشغيل

vm_copy_discard() مع نسخة تحت السيطرة الكاملة. أثناء تدمير النسخة، فإن الأسطر الأكثر قيمة توجد في _vm_map_entry_unlink_ll:

root@kitploit:~
1
2
3
4
5
6
#define _vm_map_entry_unlink_ll(hdr, entry)                             \
	MACRO_BEGIN                                                     \
	(hdr)->nentries--;                                              \
	(entry)->vme_next->vme_prev = (entry)->vme_prev;                \
	(entry)->vme_prev->vme_next = (entry)->vme_next;                \
	MACRO_END

إن entry تحت سيطرتنا، وهذا يمنحنا بدائية قراءة/كتابة مثالية. أستخدم هذا لكتابة مؤشر متحكم به إلى مصفوفة IOSurfaceClient، ثم أحقق قراءة/كتابة النواة مقترنة بواجهات IOSurfaceRootUserClient.

لقد قرأت منشور bazad "One byte to rule them all" مرارًا وتكرارًا أثناء تطوير هذا الاستغلال، واستخدمت نفس التقنية، تزييف vm_copy_t، في استغلاله. ولكن هناك بعض النقاط المختلفة.

  1. تقوم XNU بتوقيع الرسالة ولم يعد بإمكاننا استلام kmsg تالف.

  2. في إجراء التدمير، قمت بتعيين mapping_in_progress لكائن vm_object لجعل النواة تدور وبالتالي لن تتعطل بسبب فحص المنطقة.

شكر كبير لـ bazad على منشوره الرائع، وWangTielei على إعلامي بأن واجهات IOSurfaceClient أصبحت الآن غير صالحة لبدائية القراءة/الكتابة، وpedantcoder على لطفه.

تنزيل الأداة