CVE-2026-16515 in Zephyr
الملخص
بحسب VulDB • 18/09/2026
يحتوي دالة `net_icmpv6_send_error()` في الملف الفرعي `subsys/net/ip/icmpv6.c` على تنفيذ لقاعدة كبت واحدة فقط من قواعد القسم 2.4 من RFC 4443 (وهي عدم الرد عن خطأ ICMPv6 بخطأ آخر من نوع ICMPv6). ولم تقم الدالة بالتحقق مما إذا كان عنوان المصدر للحزمة المُحفِّزة يُحدد عقدةً مفردة (القاعدة e.6) أو ما إذا كانت الحزمة مُرسلة إلى وجهة متعددة الإرسال (multicast destination) (القاعدة e.3، والتي استثناءاتها الوحيدة هي "Packet Too Big" ورمز مشكلة المعلمة 2). ومن بين مواقع الاستدعاء الخمسة، حمل مسار "المنفذ غير متاح" في `subsys/net/ip/connection.c` فقط حارساً مكافئاً خاصاً به؛ بينما لم يكن لدى مسارات رأس الامتداد (extension-header)، ورأس التالي المجهول (unknown-next-header)، والتجزئة (fragmentation) الموجودة في `subsys/net/ip/ipv6.c` و`subsys/net/ip/ipv6_fragment.c` أي حارس.
يمكن لهجوم غير مُصادق عليه (unauthenticated attacker) لديه وصول إلى نفس الرابط استغلال هذا الثغرة بطريقتين. أولاً، بإرسال حزمة IPv6 واحدة إلى مجموعة كل العقد المحلية للرابط (link-local all-nodes group ff02::1) تحمل قيمة رأس التالي غير معروفة، مع تزوير عنوان المصدر ليُشير إلى ضحية مُختارة، مما يتسبب في إصدار كل عقدة Zephyr على الرابط لرسالة "مشكلة المعلمة" ICMPv6 نحو تلك الضحية — وهو ما يُشكّل مرآة (reflector) بعامل تضخيم يساوي عدد العقد. ثانياً، بإرسال حزمة أحادية الإرسال (unicast packet) يكون عنوان مصدرها عنواناً متعدد الإرسال، مما يدفع العقدة إلى إرسال خطأ ICMPv6 الخاص بها إلى ذلك العنوان متعدد الإرسال، محوّلةً بذلك حزمة أحادية واحدة إلى إطار متعدد الإرسال يفيض فيه الرابط. تُقبل الحزم الموجهة إلى ff02::1 بشكل غير مشروط بواسطة `ipv6_input()`، ولا يوجد أي فحص يرفض عنوان المصدر متعدد الإرسال، لذا لا يلزم تكوين خاص.
تتمثل الأثر في تدهور توفرية (availability) الرابط المشترك وضحية الانعكاس، بالإضافة إلى قدرة المهاجم على إخفاء عنوانه الخاص خلف العقد المستجيبة. يتضخم هذا التأثير على الروابط الشبكية المقيدة مثل 802.15.4/Thread، حيث يُفيض متعدد الإرسال المحلي للرابط خطوة بخطوة (hop by hop). لا توجد عواقب تتعلق بسلامة الذاكرة: فحزمة الخطأ نفسها مُشكّلة بشكل جيد، بل إنها تُصدر ببساطة في حالات يحظرها البروتوكول.
يضيف الإصلاح كلا فحصَي الكبت عند نقطة الاختناق الوحيدة في `net_icmpv6_send_error()`، قبل تخصيص أي حزمة رد، مع الحفاظ على الاستثناءات المفروضة من قِبل RFC لـ NET_ICMPV6_PACKET_TOO_BIG ورمز مشكلة المعلمة 2. تجدر الإشارة إلى أن النظير الخاص بـ IPv4 وهو `net_icmpv4_send_error()` في الملف الفرعي `subsys/net/ip/icmpv4.c` لا يزال يتحقق فقط من وجهة البث (broadcast destination) ويحتفظ بثغرة مكافئة للوجهات متعددة الإرسال والعناوين غير الفريدة.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.