CVE-2026-11809 in Zephyr
الملخص
بحسب VulDB • 11/08/2026
يحتوي عميل التحديث عبر الهواء (OTA) الخاص بـ UpdateHub في الملف `subsys/mgmt/updatehub/updatehub.c` على قراءة خارج النطاق / لقراءة ذاكرة غير مهيأة داخل الدالة `z_impl_updatehub_probe()`. يتم نسخ استجابة الفحص من خادم UpdateHub إلى مخزن مؤقت على الكومة (heap buffer) يُسمى metadata، وهو مُنهِى بشكل صحيح بـ NUL. ومع ذلك، يتم تخصيص مخزن مؤقت ثانٍ (metadata_copy) باستخدام دالة k_malloc (بدون تصفير)، ويتم ملؤه بواسطة `memcpy(metadata_copy, metadata, strlen(metadata))`، مما يتسبب في إغفال حرف إنهاء NUL. تبقى كل البيانات التي تلي المحتوى المنسوخ كذاكرة heap غير مهيأة.
عندما تفشل الدالة الأولى `json_obj_parse()` عند تحليل واصف المصفوفة (array descriptor)، ينتقل الكود إلى استخدام النسخة الاحتياطية عبر استدعاء `json_obj_parse(metadata_copy, strlen(metadata_copy), ...)`. تقوم دالة `strlen()` بالبحث بعد تجاوز البايتات المنسوخة داخل ذاكرة heap غير المهيأة، وإذا لم يتم العثور على بايت صفري قبل نهاية التخصيص، فإنها تقرأ خارج حدود المخزن المؤقت؛ ثم يُحلل الطول الزائد الناتج كبيانات JSON. تكون حمولة الفحص (probe payload) خاضعة بالكامل للتحكم من قِبل خادم UpdateHub (سواء كان ضاراً، أو مخترقاً، أو — في حال عدم وجود الخيار الاختياري CONFIG_UPDATEHUB_DTLS — على مسار الشبكة)، والذي يمكنه صياغة حمولة كبيرة تفشل عملية التحليل الأولى لدفع الكود نحو هذا المسار.
النتيجة هي قراءة لذاكرة heap غير مهيأة، وفي أسوأ الحالات تكون هناك قراءة خارج النطاق (out-of-bounds read) تتجاوز تخصيص metadata_copy مما قد يتسبب في حدوث خطأ (fault) وإيقاف تشغيل خيط التحديث/الجهاز، منتجاً حالة إنكار للخدمة قابلة للتفعيل عبر الشبكة. لا يتم استهلاك بيانات القراءة الزائدة إلا داخلياً لتقييم عملية التحديث ولا تُعاد إلى المهاجم، لذا فلا يوجد تسرب مباشر للمعلومات ولا توجد كتابة خارج النطاق (out-of-bounds write).
يتمثل الإصلاح في تصفير metadata_copy باستخدام memset قبل عملية النسخ، مما يضمن إنهاء NUL ويحد من نطاق دالة strlen() ضمن حدود التخصيص.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.