
CVE-2021-3625 - نماذج استغلال لـ Zephyr
يحتوي هذا المستودع على بعض الأمثلة لاستغلال الثغرة CVE-2021-3625.
جميع أجهزة usb المبنية على Zephyr حتى الإصدار 2.5.0 (شاملاً) تعاني من تجاوز سعة المخزن المؤقت (buffer overflow) مما يسمح بقراءة ما يصل إلى 65kB. اعتماداً على الجهاز الفعلي قد يؤدي ذلك إلى تسرب بيانات حساسة مثل مفاتيح التشفير أو بيانات الاعتماد.
يمكن استغلال المشكلة عن طريق إرسال طلبات تحكم usb (usb control transfer requests) مصممة بعناية باتجاه IN (قراءات، إلى المضيف) مع طلب كتابة محدد - على سبيل المثال set address (0x05). في مثل هذه الحالات لا تكون الكتابة إلى المضيف متوقعة، وبالتالي لا يتم تحديث طول الاستجابة مما يؤدي إلى القيمة المضبوطة مبدئياً لـ request->wLength. وبما أن wLength يتحكم فيه المستخدم، يمكن ضبطه إلى قيمة عشوائية من بايتين مثل 0xffff مما يؤدي إلى قراءة 65 كيلوبايت من ذاكرة المتحكم الدقيق. وبما أن حجم المخزن المؤقت أصغر بكثير، يحدث تجاوز يسمح للمهاجم باستخراج محتويات الذاكرة خارج حدود المخزن المؤقت.
إلى جانب طبقة التطبيق، إصدارات MCUBoot المبنية مع تمكين حزمة أجهزة Zephyr USB تتأثر أيضاً. علاوة على ذلك، بالإضافة إلى قراءة الذاكرة خارج حدود المخزن المؤقت، يمكن استغلال فئة DFU أيضاً لتحقيق كتابة تتجاوز سعة المخزن المؤقت (buffer overflow write).
للحصول على أفضل النتائج يُنصح باستخدام إصدار libusb مع زيادة حجم MAX_CTRL_BUFFER_LENGTH من القيمة الافتراضية 4096 بايت إلى 0xFFFF (libusb/os/linux_usbfs.h).
النشرة الأمنية: https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-c3gr-hgvr-f363