CVE-2026-76787 in Zephyrالمعلومات

الملخص

بحسب VulDB • 19/10/2026

يحلل عميل التحديث عبر الهواء (firmware-over-the-air) الخاص بـ UpdateHub استجابة فحص CoAP باستخدام مكتبة JSON الخاصة بنظام Zephyr في الدالة `z_impl_updatehub_probe()` (الملف: subsys/mgmt/updatehub/updatehub.c). يعامل المُفسِّر كل حقل من حقول الوصف بأنه اختياري — حيث تُرجع دالة `json_obj_parse()` قناع بتات (bitmask) للحقول التي قام بقرائتها فعلياً ولا تفشل أبداً عند وجود حقل مفقود — لذا فإن الاستجابة التي تتجاهل سلسلة "sha256sum" تترك المؤشر من نوع `const char *` المقابل في البنية المُهيَّأة صفرياً `resp_probe_any_boards` / `struct resp_probe_some_boards` كقيمة NULL. تقوم كلتا فرعَي البيانات الوصفية (metadata) بعد ذلك بحساب `sha256size = strlen(...objects.sha256sum) + 1` قبل أي تحقق، مما يؤدي إلى فك مرجع هذا المؤشر الفارغ؛ واختبار `SHA256_HEX_DIGEST_SIZE` الذي يليه يعمل على قيمة أنتجها بالفعل القراءة غير الصحيحة ولا يمكنه منع ذلك.

تُقدَّم البيانات الوصفية بالكامل من خلال نظير الشبكة: تقبل الدالة `probe_cb()` الرزمة (datagram)، وتشغل `coap_packet_parse()` وتنسخ الحمولة دون مطابقة رموز (tokens) أو أي تحقق تشفيري. وبما أن خيار التكوين `CONFIG_UPDATEHUB_DTLS` غير مُضَبَّط — وهو الإعداد الافتراضي — فإن دالة `start_coap_client()` تستخدم CoAP عاديًا عبر UDP على المنفذ 5683 دون مصادقة نظير، وتحل اسم الخادم عبر DNS غير مصدق. وبالتالي، يمكن لمهاجم في المسار (on-path)، أو من يشوّه DNS، أو مهاجم خارج المسار يفوز بالسباق باستخدام عنوان مصدر مزيف، بتوصيل البيانات الوصفية المعيبة. وتكفي استجابة فحص بسيطة مثل `"objects":[[{}],[{}]]`، ولا يتطلب الأمر أي تفاعل مستخدم لأن `updatehub_autohandler()` تقوم بالاستطلاع بناءً على `CONFIG_UPDATEHUB_POLL_INTERVAL`. وعندما يكون `CONFIG_UPDATEHUB_DTLS=y`، يتقلص نطاق المحفز ليشمل خادم تحديث خبيث أو مُخترق.

الآلية الأساسية (primitive) هي قراءة عند العنوان صفر، وليست كتابة، لذا فإن الأثر يقتصر على التوفرية فقط. وعلى الأجهزة التي يكون فيها النطاق المنخفض للعناوين غير مخصص أو محمي — مثل المعماريات القائمة على MMU، والإصدارات المبنية مع `CONFIG_NULL_POINTER_EXCEPTION_DETECTION_DWT/_MPU/_PMP`، وصور TrustZone غير الآمنة (non-secure)، وأشباه الموصلات في الرقعة الواحدة (SoCs) مثل nRF54L التي يكون فيها النطاق 0x0–0x400 غير مخصص — فإن عملية التحميل تتسبب في خطأ (fault) وتوقف النظام بواسطة المعالج القاتل الافتراضي لـ Zephyr، مما يمنح هجماً على التوفرية يمكن إعادة تشغيله عن بُعد مع كل استطلاع. وعلى أجهزة Cortex-M الكلاسيكية حيث تكون جدول المتجهات قابلاً للقراءة عند العنوان صفر، عادةً ما ينتهي التجول فوراً ويتم رفض الطلب بواسطة فحص الطول، لذا فإن النتيجة تعتمد على التكوين وـ SoC المعين. لا توجد كتابة في الذاكرة، والبايتات المنسوخة تُقارن فقط مع تجويز الصورة المحسوب محلياً، لذا فلا يوجد قناة لكشف المعلومات.

يضيف الإصلاح اختبارًا صريحًا لـ `sha256sum == NULL` يُرجع قيمة `UPDATEHUB_METADATA_ERROR` قبل استدعاء `strlen()` في كلا فرعَي البيانات الوصفية. لا تزال الإصدارات التصحيحية (Debug builds) (`CONFIG_UPDATEHUB_LOG_LEVEL=4`) تُشكّل نفس المؤشرات باستخدام `%s` داخل حلقة `LOG_DBG()` التي تعمل قبل الاختبارات الجديدة، لذا تظل هذه الحالة موجودة فقط في التكوينات المخصصة للتصحيح.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

مسؤول

Zephyr

حجز

19/08/2026

إفشاء

19/10/2026

الاعتدال

تمت الموافقة

إدخال

VDB-422537

EPSS

0.00000

KEV

لا

النشاطات

منخفض

المصادر

Want to know what is going to be exploited?

We predict KEV entries!