
استغلال إثبات المفهوم لـ CVE-2020-27949، يوضح قراءة/كتابة ذاكرة عشوائية في عمليات macOS عبر ioctl الخاص بـ DTrace fasttrap دون امتيازات مرتفعة.
يتمتّع جهاز /dev/fasttrap المستخدم لإنشاء عُقد التتبّع في عمليات مساحة المستخدم لمزوّدي
pid وobjc بصلاحيات 666. وعلى النقيض من /dev/dtrace، الذي يتمتّع أيضًا
بصلاحيات 666، يفتقر fasttrap إلى فحص الصلاحيات. وهذا يسمح لأي عملية بإصدار ioctl
من نوع FASTTRAPIOC_MAKEPROBE أو FASTTRAPIOC_GETINSTR.
يمكن للمهاجم إنشاء probes في أي عملية أخرى لأي موقع ذاكرة باستخدام
FASTTRAPIOC_MAKEPROBE. عند تفعيل هذه الـ probes، يتم استبدال القيم في موقع الذاكرة المحدّد
بتعليمة trap (0xCC على x86) وتوضع القيمة الأصلية في ذاكرة ظلّية. يمكن استرجاع
القيمة الأصلية عبر ioctl من نوع FASTTRAPIOC_GETINSTR. وهذا يتيح للمهاجم قراءة
ذاكرة عشوائية من عملية أخرى عن طريق وضع عدة traps.
تُتتبَّع هذه الثغرة كـ CVE-2020-27949، تم إصلاحها في macOS Big Sur 11.1، والتحديث الأمني 2020-001 Catalina، والتحديث الأمني 2020-007 Mojave .
0xCC على x86) إلى أي موقع ذاكرة في عمليات أخرى تُنفَّذ تحت DTrace دون صلاحيات مرتفعة. بل يمكن حتى كتابة ذاكرة إلى عمليات تعمل بصلاحيات root. وضمن تعليمات أخرى أو عناوين قفز، يمكن تغيير مسار تدفق التحكم في الضحية، مما يتيح تصعيد الصلاحيات.كمستخدم، أتوقّع أن تفعيل DTrace يسمح فقط للعمليات ذات صلاحيات root بتتبّع أو قياس أو تعديل العمليات الأخرى. DTrace أداة قيّمة للمهام الإدارية وتوفّر أدوات مثل dtruss وiotop وغيرها.
الضحية لدينا (target) هو ملف تنفيذي يعمل بصلاحيات root. المهاجم (memaccess) هو ملف تنفيذي يعمل بصلاحيات مستخدم عادية. يسجّل سكربت التتبع libc_monitor.d عدد استدعاءات الدوال في الكائن المشترك libsystem_c.dylib (هذا مجرد مثال بسيط على سكربت إداري قد يشغّله مالك الجهاز).
libc_monitor.d).FASTTRAPIOC_GETINSTR لقراءة قيم الذاكرة الخاصة بالـ probes المُنشأة.الخطوة 4 تستبدل الذاكرة في عملية الضحية بقيمة تعليمة trap. واعتمادًا على التطبيق، يمكن للمهاجم استخدام هذا لكتابة قيمة معروفة مسبقًا إلى موقع ذاكرة حرج. على سبيل المثال، يمكن للمهاجم التحكم في بذرة مولّد أرقام عشوائية (RNG) أو استبدال مفاتيح التشفير في عملية ما.
ملاحظة: لا يحتاج المهاجم أبدًا إلى صلاحيات مرتفعة أو صلاحيات root.
ملاحظة 2: لا يلزم وجود سكربتات DTrace مكتوبة ذاتيًا. على سبيل المثال، يستخدم dapptrace أيضًا مزوّد pid لتتبّع أي دالة.
تنفيذ فحوصات صلاحيات في /dev/fasttrap كما في /dev/dtrace أو إزالة صلاحية الكتابة للجميع.
ملاحظة: لم نتحقق من الإصلاح المُصدر.
target واتبع التعليمات التي تظهر على الشاشة.