CVE-2026-18746 in Zephyr
الملخص
بحسب VulDB • 29/09/2026
تتعامل دالة `parse_write_op()` الموجودة في الملف الفرعي `subsys/net/lib/lwm2m/lwm2m_message_handling.c` مع طلبات CoAP الواردة من نوع WRITE/CREATE التي تحمل خيار Block1. بالنسبة للحزمة الأولى من عملية النقل، تستدعي الدالة `init_block_ctx()` ثم تقوم فوراً بتخزين حجم الحزمة الذي اختاره الطرف الآخر عبر السطر `block_ctx->ctx.block_size = block_size` قبل فحص رمز الإرجاع (return code). تضبط دالة `init_block_ctx()` مؤشر المتصل على NULL وتعيد قيمة `-ENOMEM` عندما لا تكون هناك أي مدخلات حرة أو منتهية الصلاحية في مجموعة الذاكرة الثابتة `block1_contexts[]`، مما يؤدي إلى محاولة تفريغ مؤشر فارغ (NULL pointer dereference).
تحتوي المجموعة على عدد من المدخلات يساوي `CONFIG_LWM2M_NUM_BLOCK1_CONTEXT` (الافتراضي هو 3)، ولا يتم إعادة تدوير أي مدخل إلا بعد اكتمال عملية النقل، أو فشلها، أو تجاوز عمره لـ 30 ثانية. لذلك، يمكن لطرف خارجي يصل إلى منفذ LwM2M الخاص بالعميل أن يبدأ ثلاث عمليات كتابة بشكل تدريجي (block-wise) على مسارات كائنات مختلفة مع ضبط بت More في CoAP وتركها غير مكتملة، ثم إرسال الحزمة الأولى لكتابة رابعة على مسار جديد للوصول إلى عملية التفريغ غير المحمية. يعتمد إمكانية الوصول فقط على فلتر عنوان المصدر الخاص بـ UDP socket المتصل، ما لم يتم تمكين `CONFIG_LWM2M_DTLS_SUPPORT` (الذي لا يكون مفعّلاً افتراضياً)، لذا فإن مهاجماً في المسار أو يقوم بتزييف العنوان يحتاج إلى اعتماديات في نشر NoSec؛ كما أن نفس التسلسل قابل للتحقيق من قبل خادم bootstrap أو خادم ذي مستوى ثقة أقل، ويمكن حدوثه عن طريق الخطأ بواسطة خادم شرعي يشغل أربع عمليات نقل متزامنة للحزم.
تستهدف الكتابة عنواناً منخفضاً ثابتًا بقيمة تتراوح بين 0 و7، لذا فإن النتيجة هي خطأ حرج في الذاكرة (BusFault أو تلف للذاكرة المنخفضة يؤدي إلى عطل) بدلاً من كونها primitive لتلف الذاكرة قابل للاستخدام: حيث يتعطل الجهاز أو يعيد تشغيل نفسه. لا تتأثر السرية والنزاهة. ينقل الإصلاح عملية التخزين إلى ما بعد نقطة الحماية ويحقق صحة مؤشر السياق نفسه بدلاً من رمز الإرجاع، بحيث يتم التعامل مع السياق فقط عندما يكون معروفًا أنه صالح.
VulDB is the best source for vulnerability data and more expert information about this specific topic.