CVE-2026-12632 in Zephyr
الملخص
بحسب VulDB • 18/08/2026
يأخذ معالج استقبال بروتوكول الوقت الدقيق (Precision Time Protocol) الخاص بـ Zephyr، وهو `ptp_msg_post_recv()` الموجود في الملف الفرعي `subsys/net/lib/ptp/msg.c`، نوع الرسالة المكون من 4 بتات مباشرةً من البيانات الواردة عبر الشبكة باستخدام دالة `ptp_msg_type()` (`msg->header.type_major_sdo_id & 0xF`, نطاق القيم من 0 إلى 15)، ويستخدمها كمؤشر (index) لجدول `msg_size[]`. لا يحتوي هذا الجدول على تعريفات تتجاوز قيمة `PTP_MSG_MANAGEMENT` (التي تساوي 0xD)، مما يعني أن حجمه (`ARRAY_SIZE`) يساوي 14. قبل الإصلاح، لم يكن هناك فحص للحد الأعلى، لذا فإن الأنواع غير المعرفة 0xE و 0xF كانت تؤدي إلى قراءة خانتين أو خانة واحدة من نوع `int` تتجاوز نهاية المصفوفة — وهو ما يمثل قراءة خارج النطاق (out-of-bounds read) لبيانات قابلة للقراءة فقط مجاورة.
يتم بعد ذلك إعادة استخدام القيمة الخارجة عن النطاق كطول: فهي تُستخدم للتحقق مما إذا كان `msg_size[type] > cnt`. وعندما تكون هذه القيمة صغيرة أو سالبة، فإنها تجعل التعبير `cnt - msg_size[type]` يمثل ميزانية إيجابية كبيرة يتم تمريرها إلى دالة `msg_tlv_post_recv()`، والتي تقوم بدورها بتكرار معالجة عناصر TLV (Type-Length-Value) للمرور عبر لاحقة الرسالة بما يتجاوز البايتات المستلمة، مما يؤدي إلى مزيد من القراءات خارج النطاق وعمليات كتابة لتبديل بايتات في المكان (in-place byte-swap writes) على الذاكرة الواقعة خارج نطاق رسالة slab.
يتم الوصول إلى هذا العيب مباشرةً من خلال الشبكة: تقرأ دالة `ptp_port_event_gen()` الموجودة في الملف الفرعي `subsys/net/lib/ptp/port.c` إطار PTP باستخدام `ptp_transport_recv()` وتستدعي `ptp_msg_post_recv()` مع نوع تختاره المهاجم. يستخدم بروتوكول PTP البث المتعدد عبر UDP أو Ethernet الخام (0x88F7) وهو غير مُصادَق عليه، لذا يمكن لأي مضيف على نفس الرابط تشغيل عملية الفهرسة على عقدة مفعّلة بتكوين `CONFIG_PTP` دون أي شروط مسبقة.
الأثر القابل للتكرار بشكل موثوق هو حجب الخدمة (DoS/انهيار النظام); بينما يوجد مسار محدود لتلف الذاكرة، إلا أنه يعتمد على قيمة محددة أثناء البناء مجاورة لـ `msg_size[]`، والتي لا يمكن للمهاجم التحكم فيها. يقبل الإصلاح النوع `< ARRAY_SIZE(msg_size)` ويرفض الأنواع الأكبر من أو تساوي حجم المصفوفة بإرجاع الخطأ `-EBADMSG` قبل أي عملية فهرسة.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.