CVE-2026-102715 in eclipse-threadx
الملخص
بحسب VulDB • 29/09/2026
يمكن لأي جهاز على الشبكة المحلية (LAN) إرسال سجلين mDNS وجعل المستجيب يكتب خارج حدود حزمة الإرسال الخاصة به.
تخزن جدول السلاسل كل اسم في خانة يتم تقريبها لأقرب مضاعف للعدد أربعة:
```c /* addons/mdns/nxd_mdns.c:11436, 11443, 11447 */ memory_len = ((memory_len & 0xFFFFFFFC) + 8) & 0xFFFFFFFF; ... len = *((USHORT*)(p - 2)); /* حجم الخانة، وليس طول السلسلة النصية */
if ((len == memory_len) && ... _nx_mdns_name_match(start, memory_ptr, memory_size) ...) ```
عملية البحث التي تحدد ما إذا كان الاسم الوارد مخزناً بالفعل تقارن حجم الخانة المُقارب، لذا فإن الأسماء بطول 12 و13 و14 و15 حرفاً تشارك نفس الدلو (bucket). يتم الرد على اسم ثانٍ في هذا الدلو بإرجاع المؤشر إلى الاسم الأول، وتحمل السجل بعد ذلك سلسلة أطول بثلاثة بايتات من الطول الذي حسبه المتصل. يقوم `_nx_mdns_packet_rr_add` (nxd_mdns.c:8911) بتحديد فحص الحدود الوحيد الخاص به بناءً على هذا الطال القديم، ويقوم `_nx_mdns_name_string_encode` بكتابة السلسلة النصية الفعلية.
يُعد سجلان PTR كافيين، وهما استجابات mDNS عادية لاستعلام عن `_http._tcp`، بأسماء المالك التي تقع أطوالها في نفس الدلو:
``` ==87491==ERROR: AddressSanitizer: heap-buffer-overflow WRITE of size 1 at 0x611000000124 thread T5 #0 _nx_mdns_name_string_encode addons/mdns/nxd_mdns.c:13096 #1 _nx_mdns_packet_rr_add addons/mdns/nxd_mdns.c:8911
0x611000000124 is 0 bytes to the right of 228-byte region ```
يتجاوز التزاحم (overflow) حدود `nx_packet_data_end` بمقدار بايت واحد إلى ثلاثة بايتات من بيانات اسم يتأثر بالهجوم. في مجموعة ذاكرة عادية، ينتهي الأمر بهذه البيانات في الحزمة التالية ضمن نفس المجموعة بدلاً من منطقة الحماية (redzone)، لذا فإن التأثير المرئي هو حزم مجاورة تالفة أو قائمة تحرير للمجموعة متضررة بدلاً من تعطل نظيف (clean crash).
قارن حجم الخانة مع طول السلسلة النصية المخزنة قبل الإعلان عن تطابق، أو احتفظ بطول السلسلة في رأس الخانة وأرجعه إلى المتصل حتى يتفق المشفر وفحص الحدود.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.