
CVE-2016-7608: تجاوز سعة المخزن المؤقت في IOFireWireFamily.
IOFireWireFamily-overflow هو استغلال لإثبات المفهوم للثغرة CVE-2016-7608، وهي تجاوز سعة مخزن مؤقت في
IOFireWireUserClient تم إصلاحه في macOS Sierra 10.12.2. يمكن تشغيل هذه الثغرة
للتسبب في رفض الخدمة أو ربما تنفيذ تعليمات برمجية عشوائية على الأجهزة المزوّدة بمنفذ
FireWire.
لا يتحقق أسلوب AppleFWOHCI::updateROM من طول وسيط OSData قبل تنفيذ bcopy على محتوياته إلى منطقة ذاكرة ثابتة الحجم مخصصة عبر AppleFWOHCI_IOMemoryBlock32::create.
يمكن تشغيل الاستغلال باستخدام مثيل من IOFireWireUserClient. استدعاء الأسلوب
localConfigDirectory_Create يعيد مقبضًا إلى IOLocalConfigDirectory. يمكن إضافة بيانات عشوائية
إلى كائن الدليل هذا باستخدام الأسلوب localConfigDirectory_addEntry_Buffer، الذي لا
يقيد حجم البيانات بما يتجاوز حدود وسيط size ذي 32 بت. أخيرًا، يمكن تشغيل الاستغلال
باستدعاء localConfigDirectory_Publish، والذي يستدعي في النهاية
IOFireWireController::UpdateROM. ينشئ UpdateROM كائن OSData يمثل الـ ROM المُجمَّع،
بما في ذلك البيانات التي يتحكم فيها المستخدم والمضافة سابقًا. ثم يمرر كائن OSData إلى
AppleFWOHCI::updateROM، الذي ينسخ البيانات إلى منطقة الذاكرة المشار إليها بواسطة
fpNextConfigROM. هذه منطقة ذاكرة بحجم 4096 بايت مخصصة في AppleFWOHCI::setupAsync باستخدام
AppleFWOHCI_IOMemoryBlock32::create. إذا تم تمرير أكثر من 4096 بايت إلى
localConfigDirectory_addEntry_Buffer، فإن عملية الكتابة ستتجاوز هذا التخصيص إلى
الصفحات التالية.
عمليًا، الصفحة التي تلي المخزن المؤقت الذي تعرّض للتجاوز غالبًا ما تكون غير معيّنة، مما يسبب انهيار النواة عند التجاوز.
الكود البرمجي لـ IOFireWireFamily-overflow مُتاح في الملكية العامة (public domain). كمجاملة، أطلب منك إذا
أشرت إلى أو استخدمت أيًا من هذا الكود أن تنسبه إليّ.