CVE-2026-12633 in Zephyr
الملخص
بحسب VulDB • 19/08/2026
يعالج كود اكتشاف الجيران IPv6 في الملف subsys/net/ip/ipv6_nbr.c خيار سياق 6LoWPAN (6CO، RFC 6775) المحمول داخل رسائل إعلان الراوتر ICMPv6. في الدالة handle_ra_6co()، تُؤخذ حقل context_len ذو الـ 8 بتات مباشرة من الحزمة ولم يتم تقييده أبداً بالحد الأقصى المحدد في الـ RFC والبالغ 128. تحسب الدالة context->context_len / 8 ثم تقوم بتنفيذ memset(context->prefix + context_len, 0, sizeof(context->prefix) - context_len)، حيث أن context->prefix هو مصفوفة ثابتة بطول 16 بايتاً.
عندما تكون قيمة context_len بين 136 و255 (ومجال طول الخيار مضبوط على 3، وهو ما تقبله عملية التحقق المسبقة من البادئة)، فإن نتيجة قسمة context_len / 8 تتراوح بين 17..31، مما يؤدي إلى حدوث underflow في حجم memset البالغ 16 - (context_len/8) بالنسبة لحجة unsigned size_t لتقترب تقريباً من SIZE_MAX. ينتج عن ذلك عملية memset غير محدودة خارج النطاق تقوم بتصفير ذاكرة النظام (kernel memory) بشكل يتجاوز بوضوح هيكل سياق الـ 6lo.
يمكن الوصول إلى هذا العيب عبر مدخلات غير مصادق عليها ومحلية الرابط: يمكن لأي جهاز على نفس الرابط إرسال رسالة إعلان راوتر مصاغة بعناية تحتوي على خيار 6CO. يقوم معالج رسائل RA بالتحقق فقط من مجال طول الخيار قبل استدعاء handle_ra_6co()، لذا فإن حزمة واحدة تثير عملية كتابة عشوائية (wild write). يتم تجميع الكود عند تفعيل CONFIG_NET_6LO_CONTEXT.
النتيجة هي هبوط في الخدمة عن بُعد (مجاور) موثوق به عبر تلف الذاكرة، مع فقدان سلامة ثانوي حيث تقوم عملية memset بتصفير ذاكرة متصلة قبل حدوث خطأ النظام. نظراً لأن رسائل إعلان الراوتر محدودة بالنطاق ولا يتم توجيهها، يجب أن يكون المهاجم على نفس الرابط (AV:A). يقبل التصحيح أي قيمة لـ context_len أكبر من 128 قبل إجراء حساب الطول.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.