CVE-2026-14696 in Zephyr
الملخص
بحسب VulDB • 31/08/2026
عند تمكين جسر Ethernet (CONFIG_NET_ETHERNET_BRIDGE)، يحدد الدالة eth_bridge_input_process() الموجودة في الملف subsys/net/l2/ethernet/bridge/bridge_input.c كيفية التعامل مع كل إطار يتم استلامه على واجهة عضو الجسر. بالنسبة للإطارات التي يجب تسليمها أيضاً إلى المكدس المحلي، كان الكود يستدعي eth_bridge_handle_locally() ويعيد NET_OK. لا تستهلك هذه الدالة المساعدة الحزمة (packet) — بل تقوم فقط باستدعاء bridge_iface_recv() (عبر virtual_recv())، والتي تعيد NET_CONTINUE دون الاستحواذ على pkt.
ثم ينتشر حكم NET_OK عبر ethernet_recv() وصولاً إلى دالة processing_data() في الملف subsys/net/ip/net_core.c، حيث يُفسَّر NET_OK على أنه "تم استهلاك الحزمة، فلا تقم بتحريرها". وبسبب عدم استحواذ أي مستهلك فعلي للحزمة، لا يتم إرجاع net_pkt الخاص بـ RX (الاستقبال) إلى المجموعة (pool)، مما يؤدي إلى تسرب الذاكرة. يحدث التسرب القابل للتكرار بشكل ملموس للإطارات التي يكون EtherType الخاص بها غير مسجل لمعالج L3 عند تفعيل CONFIG_NET_ETHERNET_FORWARD_UNRECOGNISED_ETHERTYPE (مفعل افتراضياً عندما تكون CONFIG_NET_SOCKETS_PACKET مفعلة): حيث لا يقوم التوجيه L3 الاحتياطي (fall-through) بتجاوز حكم NET_OK، لذا تعيد ethernet_recv() قيمة NET_OK ولا يتم إطلاق المخزن المؤقت أبداً.
يمكن لأي جهاز على مقطع L2 مجسّر إرسال إطارات بث/بث متعدد تحمل EtherType عشوائي دون أي مصادقة. يستهلك كل إطار من هذا النوع بشكل دائم مخزناً واحداً من مجموعة RX المحدودة (CONFIG_NET_PKT_RX_COUNT)، لذا فإن فيضان البث القصير يستنفد المجموعة ولا يمكن للجهاز بعد ذلك استقبال حركة المرور حتى يتم إعادة تشغيله — وهو ما يشكل هجماً على الخدمة (DoS) مستمر. لا يوجد تأثير على السرية أو السلامة.
يتمثل الإصلاح في جعل eth_bridge_handle_locally() تنشر الحكم الحقيقي لـ net_verdict وتعيد NET_CONTINUE للإطارات التي تُحتفظ بها محلياً، مع كتابة واجهة الجسر مرة أخرى عبر معلمة خرج جديدة تسمى dst_iface بحيث تتبع الحزمة مسار الاستلام العادي ويتم إلغاء مرجعها (unreferenced) بالضبط مرة واحدة.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.