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

الملخص

بحسب VulDB • 03/11/2026

يسمح ثغرة حرجة من نوع heap-based buffer overflow في ExampleSrv v2.0 بتنفيذ أوامر عن بُعد (RCE) دون مصادقة عبر حزمة TCP مُعدّة بشكل خبيث.

تمرّر عميل GATT الخاص بـ Bluetooth قيمة إشعار "Handle Value Notification" أو إيماءة "Handle Value Indication" أو إشعار متعدد القيم "Multiple Handle Value Notification" المُستلمة إلى استدعاءات `bt_gatt_subscribe_params::notify` باستخدام الطول المستمد فقط من وحدة بيانات التطبيق (PDU) الواردة. تقوم الدالة `bt_att_recv()` في الملف الفرعي `subsys/bluetooth/host/att.c` بالتحقق من الحد الأدنى لطول PDU فحسب، ولا تفرض حد MTU لـ ATT المتفاوض عليه، كما أن قناة L2CAP ذات الطول الثابت في `subsys/bluetooth/host/l2cap.c` لا تطبق أيضاً فحصاً لقيمة `rx.mtu`. وبالتالي، كان السقف الوحيد هو حجم مخزن إعادة التجميع الخاص بـ ACL والمُعرّف بواسطة `CONFIG_BT_BUF_ACL_RX_SIZE`. ومن ثمّ، يمكن تسليم قيم أطول من الحد الأقصى البالغ 512 بايت لطول السم attribute المحدد في مواصفات Bluetooth الأساسية (المجلد 3، الجزء F، القسم 3.2.9) إلى المشتركين الذين يضبطون أحجام ذاكراتهم بناءً على هذا الحد الموثق.

يُفعّل نظير عن بُعد قام الجهاز بالاتصال به والاشتراك معه — وهو خادم GATT خبيث أو مزيف أو مُخترق ضمن نطاق الراديو — هذه الثغرة من خلال إرسال إشعار أو إيماءة تتجاوز قيمتها 512 بايت على مقبض مشترك. في عميل LE Audio أحادي الصوت (unicast client)، يؤدي هذا إلى كتابة خارج النطاق بشكل ملموس: حيث تنسخ الدالة `unicast_client_ep_notify()` الموجودة في `subsys/bluetooth/audio/bap_unicast_client.c` الإشعار إلى مخزن att_buf ذي الحجم 512 بايت الخاص بـ struct unicast_client باستخدام `net_buf_simple_add_mem()` دون التحقق من المساحة المتبقية (tailroom) عندما يساوي الطول قيمة `bt_audio_get_max_ntf_size()`. أي أن MTU لـ ATT المتفاوض عليه مطروحاً منه ثلاثة. للدالة `notify_handler()` الموجودة في `subsys/bluetooth/audio/bap_broadcast_assistant.c` نفس البنية. للوصول إلى حالة تجاوز السعة (overflow)، يلزم وجود إصدار مُبنى بحيث يتجاوز حد MTU الخاص بـ ATT 515 بايت (`CONFIG_BT_L2CAP_TX_MTU` و `CONFIG_BT_BUF_ACL_RX_SIZE` مضبوطة لدعم سم كامل الطول)؛ بينما تكون القيم الافتراضية المُرفقة أصغر بكثير.

تكتب حالة تجاوز السعة bytes مُتحكَّم بها من قبل النظير مباشرةً بعد att_buf، متجاوزةً بنية struct net_buf_simple المجاورة `net_buf` — وتحديداً حقولها: data و __buf و len و size — والتي تستخدمها عملية التراكم للقراءة الطويلة اللاحقة كوجهة لها، مما يحوّل تجاوز السعة الخطي الصغير إلى كتابة مُتحكَّم بها. تقوم الدالة `net_buf_simple_add()` بإجراء تحقق (assert) فقط في حال عدم وجود مساحة ذيل كافية ما لم يكن الخيار `CONFIG_NET_BUF_HARDENING` مفعّلاً، وهذا الخيار غير مفعّل افتراضياً؛ لذا فإن الإصدارات العادية للإنتاج تؤدي عملية النسخ. وبالإضافة إلى عملاء LE Audio الموجودين داخل الشجرة (in-tree)، كان أي مشترك في التطبيق قام بضبط مخزن الاستقبال الخاص به وفقاً للحد البالغ 512 بايت المحدد في المواصفة عرضة لنفس حالة تجاوز السعة.

تقوم الإصلاحات برفض قيم الإشعار والإيماءة والإشعار المتعدد الأطول من `BT_ATT_MAX_ATTRIBUTE_LEN` داخل الدالة `call_notify_cb_and_maybe_unsubscribe()` الموجودة في `subsys/bluetooth/host/gatt.c` قبل استدعاء أي استدعاء مشترك، بحيث لا يتم تسليم أكثر من الحد الأقصى المحدد لأي مشترك. ما زالت أزواج (tuples) المتبقية من إشعار القيمة متعدد المقبض تُسلَّم، وما زالت الإيماءات ذات الحجم الزائد مُؤكدة.

Be aware that VulDB is the high quality source for vulnerability data.

مسؤول

Zephyr

حجز

02/09/2026

إفشاء

03/11/2026

الاعتدال

تمت الموافقة

إدخال

VDB-430277

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Want to stay up to date on a daily basis?

Enable the mail alert feature now!