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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-43655-AppleM2ScalerCSCDriver-UAF — إفشاء عام لثغرة CVE-2026-43655 AppleM2ScalerCSCDriver use-after-free | Kitploit
أدوات/GitHubGitHub/somisomair/cve-2026-43655-applem2scalercscdriver-uaf
أمان iOSتحليل الذاكرة الجنائيتحليل الثغرات الأمنيةالاستغلالأمن الجوالأمن الأجهزةاستغلال الملفات الثنائية
GitHubsomisomair/cve-2026-43655-applem2scalercscdriver-uaf

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-43655-AppleM2ScalerCSCDriver-UAF

إفشاء عام لثغرة CVE-2026-43655 AppleM2ScalerCSCDriver use-after-free

عرض المستودع
47منذ 4 أشهرلم تتم المراجعة بعد
مشاركة

CVE-2026-43655: استخدام بعد التحرير في جدولة مشتركة لـ AppleM2ScalerCSCDriver

إفصاح تقني عام عن CVE-2026-43655، وهو خطأ استخدام بعد التحرير (use-after-free) في AppleM2ScalerCSCDriver / IOSurfaceAccelerator يمكن الوصول إليه من حاوية تطبيقات iOS الافتراضية دون تراخيص خاصة.

عالجت Apple هذه المشكلة في iOS 26.5 / iPadOS 26.5 / macOS Tahoe 26.5. يحتوي هذا المستودع على كود الإثبات (proof-of-concept) بلغة Objective-C، والتراخيص الدنيا، وملف IPA مُجمَّع، والشرح الفني اللازم لفهم وإعادة إنتاج المشكلة على جهاز متأثر.

ملخص

الخلل هو خطأ في دورة حياة/إزالة جدولة المقاييس (scaler scheduler). يمكن لعملية مستخدم إرسال عمليات مقاييس غير متزامنة، وإغلاق الاتصال IOSurfaceAcceleratorClient الذي يملك تلك العمليات، تاركةً إدخالات قديمة في هيكل الجدولة العام للسائق. يمكن لتمريرة جدولة لاحقة معالجة إدخالات لا تزال تشير إلى تخزين العمليات الذي تم تحريره بالفعل وإعادة استخدامه.

يُظهر الإثبات (PoC) خطأ دورة الحياة بقيمتين مميزتين:

  • علامة اتصال الضحية: 0xDEAD0001
  • علامة اتصال الرش/البديل: 0xBEEF0002

يقوم اتصال الضحية بإرسال عمليات غير متزامنة ثم يُغلق. تُفتح اتصالات بديلة بعد ذلك وتضبط علامتها إلى 0xBEEF0002. عندما تعمل دورة الجدولة التالية للمقياس، يقرأ الخطأ العلامة البديلة (x9 = 0x00000000BEEF0002) بدلاً من علامة الضحية. وهذا يثبت أن الجدولة قرأت من فتحة عملية تم تحريرها ثم تخصيصها لاتصال مختلف.

التهيئة المتأثرة

  • نظام التشغيل المتأثر الذي تمت ملاحظته: iOS 26.4
  • تم الإصلاح في: iOS 26.5 / iPadOS 26.5 / macOS Tahoe 26.5
  • الإضافة (Kext): com.apple.driver.AppleM2ScalerCSCDriver
  • مسار العميل-المستخدم: IOSurfaceAcceleratorClient
  • تراخيص التطبيق المستخدمة في الإثبات: get-task-allow فقط
  • لا كسر حماية، لا ترخيص منصة، لا ترخيص خاص من Apple

السبب الجذري

يحتفظ AppleM2ScalerCSCDriver بحالة جدولة مشتركة عبر عملاء المقياس. عدم التطابق في دورة الحياة ذو الصلة هو:

  1. يرسل عميل عمليات مقاييس غير متزامنة.
  2. تُدرج هذه العمليات في حالة مملوكة للجدولة.
  3. يُغلق اتصال العميل باستخدام IOServiceClose.
  4. يُحرر تخزين العمليات الخاص بكل عميل.
  5. لا يتم تطهير حالة الجدولة المشتركة بالكامل من الإدخالات التابعة للعميل المُغلق.
  6. تعالج تمريرة جدولة لاحقة مؤشرات عمليات قديمة.

لا يزيل مسار الإزالة إدخالات الجدولة المعلقة للعميل المُغلق من كومة الجدولة المشتركة. تقرأ الجدولة لاحقًا وتكتب حقولاً عبر تلك المؤشرات القديمة.

الحقول الهامة التي تمت ملاحظتها أثناء التحليل:

الإزاحةسلوك الجدولة
operation + 0xc94يُقرأ كقيمة الائتمان/العلامة المستخدمة من قبل مسار حل الائتمان
operation + 0xc1cيُكتب بواسطة مسار محاسبة ائتمان الجدولة
operation + 0x1fe4يُكتب بواسطة مسار تحديث حالة/علم الجدولة

السلوك المُخصص للعمليات يجعل الخلل قابلاً للملاحظة: يمكن إعادة استخدام فتحات العمليات المحررة بواسطة عمليات لاحقة من اتصالات مختلفة. عن طريق إغلاق اتصال الضحية ورش اتصالات جديدة فورًا، يمكن للإثبات جعل إدخالات الجدولة القديمة تشير إلى ذاكرة أصبحت الآن مملوكة لاتصالات الرش.

لماذا يثبت x9 = 0xBEEF0002 استخدام بعد التحرير (UAF)

يستخدم الإثبات تمييزًا بين الضحية والرش:

  1. يضبط اتصال الضحية العلامة 0xDEAD0001.
  2. يرسل الضحية 50 عملية مقاييس غير متزامنة.
  3. يُغلق اتصال الضحية، محررًا كائنات عمليات الضحية.
  4. تضبط اتصالات الرش العلامة 0xBEEF0002.
  5. تعيد عمليات الرش استخدام مجموعة فتحات العمليات المحررة.
  6. تعالج الجدولة لاحقًا إدخالات الجدولة القديمة للضحية.

إذا كانت الجدولة لا تزال تقرأ من كائنات حية مملوكة للضحية، لكانت القيمة المرصودة 0xDEAD0001. بدلاً من ذلك، يقرأ الخلل المُعاد إنتاجه 0xBEEF0002، القيمة التي كتبتها اتصالات الرش البديلة. هذا هو الدليل الرئيسي على أن الجدولة تفك مرجعية مؤشر قديم إلى ذاكرة نواة تم تحريرها وإعادة استخدامها.

يظهر هذا أيضًا تأثيرًا عبر الاتصالات: تم إنشاء إدخال الجدولة بواسطة اتصال واحد، لكن الذاكرة التي لمسها لاحقًا تم إعادة تدويرها لاتصال آخر. في عمليات التشغيل المُعاد إنتاجها، يمكن أن يكون نشاط الجدولة النهائي مدفوعًا بنشاط SpringBoard/المركب/واجهة المستخدم العادي بدلاً من عملية الإثبات الأصلية.

التأثير

  • قراءة النواة من ذاكرة عمليات محررة/مُعاد استخدامها.
  • كتابة النواة إلى إزاحات ثابتة في ذاكرة عمليات محررة/مُعاد استخدامها أثناء تحديثات محاسبة/حالة الجدولة.
  • تأثير عبر الاتصالات لأن كومة الجدولة مشتركة عبر مستخدمي المقياس.
  • سلوك تحريك عبر العمليات لأن أي عملية لاحقة تدفع جدولة المقياس يمكن أن تتسبب في معالجة الإدخال القديم.
  • يمكن لحالة الجدولة القديمة البقاء بعد نافذة تنفيذ تطبيق الإثبات الفورية وتفعيلها في دورة جدولة لاحقة.

يصف الإعلان العام من Apple التأثير بأنه: "قد يتمكن تطبيق من التسبب في إنهاء غير متوقع للنظام أو قراءة ذاكرة النواة."

تسلسل إعادة الإنتاج على الجهاز الفعلي

تفصيل مهم لإعادة الإنتاج: بعد النقر على TEARDOWN UAF، لا يتوقف الجهاز بالضرورة فورًا. يقوم الإثبات أولاً بتهيئة حالة الجدولة القديمة. يحدث الخلل في دورة جدولة المقياس التالية، والتي تحدث عمليًا عندما يدفع نشاط SpringBoard/المركب المقياس. في إعادة الإنتاج على جهازي الفعلي، قمت بتفعيل دورة الجدولة تلك عن طريق النقر/التفاعل مع Dynamic Island بعد أن أنهى الإثبات تهيئة حالة الجدولة القديمة.

الخطوات:

  1. أعد تشغيل الجهاز المتأثر قبل تشغيل الإثبات.
  2. ثبّت وشغّل ScalerTeardownUAF.ipa.
  3. انقر على TEARDOWN UAF.
  4. يفتح الإثبات اتصال ضحية AppleM2ScalerCSCDriver.
  5. ينشئ الإثبات كائنات IOSurface مصدر/وجهة.
  6. يرسل الإثبات عملية مقاييس أساسية متزامنة.
  7. يضبط الإثبات بيانات الائتمان/العلامة للمُحدد 10 إلى 0xDEAD0001 على اتصال الضحية.
  8. يرسل الإثبات 50 عملية غير متزامنة على اتصال الضحية.
  9. يغلق الإثبات اتصال الضحية باستخدام IOServiceClose، محررًا كائنات عمليات مملوكة للضحية بينما تبقى إدخالات الجدولة القديمة.
  10. يفتح الإثبات 50 اتصال رش.
  11. يضبط كل اتصال رش بيانات الائتمان/العلامة للمُحدد 10 إلى 0xBEEF0002.
  12. يرسل الإثبات عمليات غير متزامنة إضافية على اتصالات الرش لإعادة استخدام فتحات العمليات المحررة والحفاظ على ضغط الجدولة نشطًا.
  13. عندما يطلب التطبيق المشغل، انقر/تفاعل مع Dynamic Island لتسبب نشاط SpringBoard/المركب ودفع جدولة المقياس.
  14. يتوقف الجهاز/يعيد التشغيل عند معالجة إدخال الجدولة القديم.
  15. بعد إعادة التشغيل، تحقق من أن حالة سجل التوقف تحتوي على x9 = 0x00000000BEEF0002.

شرط الإثبات المتوقع:

  • x9 = 0x00000000BEEF0002 يعني أن الجدولة قرأت علامة الرش من الذاكرة التي كانت تنتمي أصلاً إلى عملية الضحية المحررة.
  • 0xBEEF0002 ليست علامة الضحية؛ إنها علامة اتصال البديل.
  • لذلك، حدثت قراءة الجدولة بعد التحرير وإعادة الاستخدام.

سلوك الإثبات

يقوم المصدر المُضمن بتنفيذ التسلسل التالي:

open victim connection
create IOSurface source/destination pair
submit sync baseline scaler request
set victim marker = 0xDEAD0001 through selector 10
submit 50 async scaler operations
close victim connection
open 50 spray connections
set spray marker = 0xBEEF0002 through selector 10
submit repeated async scaler operations on spray connections
wait for SpringBoard/compositor scheduler trigger

ملف المصدر ذو الصلة هو ScalerTeardownUAF.m.

البناء

xcrun -sdk iphoneos clang -framework Foundation -framework UIKit -framework IOKit \
  -framework IOSurface -isysroot $(xcrun --sdk iphoneos --show-sdk-path) \
  -arch arm64 -arch arm64e -miphoneos-version-min=16.0 -fobjc-arc \
  -o iPhoneProbe.app/iPhoneProbe ScalerTeardownUAF.m
ldid -S entitlements.plist iPhoneProbe.app/iPhoneProbe
mkdir -p /tmp/pkg/Payload
cp -r iPhoneProbe.app /tmp/pkg/Payload/
cd /tmp/pkg && zip -qr ScalerTeardownUAF.ipa Payload

ملفات المستودع

الملفالوصف
ScalerTeardownUAF.mمصدر الإثبات بلغة Objective-C ينفذ تسلسل إغلاق الضحية + إعادة استخدام الرش.
ScalerTeardownUAF.ipaأثر إعادة الإنتاج بصيغة IPA مُجمعة.
entitlements.plistملف التراخيص الأدنى يحتوي على get-task-allow.

الجدول الزمني

تنزيل الأداة