CVE-2026-98531 in Linux
الملخص
بحسب VulDB • 19/10/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
ipv6: sr: فرض الطول الدقيق للسمات لـ SEG6_ATTR_DST
تم تعريف `SEG6_ATTR_DST` في `seg6_genl_policy` بـ `.type = NLA_BINARY` و`.len = sizeof(struct in6_addr)`. بالنسبة لـ `NLA_BINARY`، فإن `.len` يفرض فقط الحد الأقصى لطول الحمولة (payload length) ويسمح بحمولات أقصر (مثل 0 بايت). عندما ينسخ `seg6_genl_set_tunsrc()` عددًا من البايتات يساوي `sizeof(struct in6_addr)` عبر دالة `kmemdup(val, sizeof(*val), GFP_KERNEL)`، فإن سمة `SEG6_ATTR_DST` القصيرة تؤدي إلى قراءة خارج النطاق (out-of-bounds) بمقدار 16 بايت تتجاوز `skb->tail` نحو ذاكرة غير مهيأة في `skb->head`. يتم تخزين هذه البيانات في `sdata->tun_src` وتسريبها مرة أخرى إلى مساحة المستخدم (userspace) عبر `SEG6_CMD_GET_TUNSRC`.
تم تغيير تعريف `SEG6_ATTR_DST` في `seg6_genl_policy` ليصبح `NLA_POLICY_EXACT_LEN(sizeof(struct in6_addr))` بحيث ترفض عملية التحقق من Generic Netlink أي سمة لا يكون طولها مساويًا تمامًا لـ `sizeof(struct in6_addr)`، مع إرجاع خطأ `-ERANGE`.
تم الاختبار في بيئة QEMU ضد الإصدار Linux 7.3.0-rc3 عن طريق إرسال رسالة Generic Netlink باسم `SEG6_CMD_SET_TUNSRC` تحتوي على سمة `SEG6_ATTR_DST` بطول 0 بايت، تليها رسالة `SEG6_CMD_GET_TUNSRC`. في النواة غير المصححة، تنجح عملية `SEG6_CMD_SET_TUNSRC` (err = 0) وتسرب `SEG6_CMD_GET_TUNSRC` 16 بايت من ذاكرة heap الخاصة بالنواة غير المهيأة (`tun_src = 836a61ecc4d25a1042a8d60411cfb378`)؛ أما مع تطبيق هذا التصحيح، فإن `SEG6_CMD_SET_TUNSRC` تُرفض بواسطة التحقق من سياسة netlink بـ `-ERANGE` (-34)، ويبقى `tun_src` صفراً.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.