CVE-2026-68326 in Linux
الملخص
بحسب VulDB • 10/08/2026
في نواة لينكس، تم حل الثغرة التالية:
واي فاي: mwifiex: تقييد عناصر التكوين (IEs) لحدث ارتباط uAP بحدود مخزن الحدث
تعالج الدالة `mwifiex_process_uap_event()` حدث `EVENT_UAP_STA_ASSOC` من خلال كشف عناصر طلب إعادة الارتباط ((re)association request IEs التي ينسخها البرنامج الثابت إلى الحدث:
```c sinfo->assoc_req_ies = &event->data[len];
len = (u8 *)sinfo->assoc_req_ies - (u8 *)&event->frame_control; sinfo->assoc_req_ies_len = le16_to_cpu(event->len) - (u16)len; ```
يتم توفير قيمة `event->len` بواسطة البرنامج الثابت للجهاز ولا يتم التحقق من صحتها أبداً، وطرح القيمتين غير خاضع للرقابة. يشير متغير `assoc_req_ies` إلى موقع داخل مصفوفة ذات حجم ثابت `adapter->event_body[MAX_EVENT_SIZE]` المضمنة في بنية البيانات `mwifiex_adapter` التي تم تخصيصها باستخدام `kmalloc()`.
في مسار التنفيذ الخاص بـ `ap_11n_enabled`، تقوم الدالة `mwifiex_set_sta_ht_cap()` بتصفح هذه العناصر (IEs) باستخدام دالة `cfg80211_find_ie()`، حيث يقوم حلقة التكرار `for_each_element()` بإلغاء مرجع كل رأس عنصر. إذا كانت قيمة `event->len` التي يبلغها البرنامج الثابت أكبر من عدد البايتات المستلمة فعلياً، فإن `assoc_req_ies_len` تصف عناصر (IEs) تمتد خارج نطاق `event_body`، مما يؤدي إلى قراءة بيانات خارج حدود كائن شريحة الذاكرة (slab object) الخاص بالمحول، وهو ما يُعرف بقراءة خارج النطاق في الشرائح (slab-out-of-bounds read)، كما يظهر في سجل KASAN: "slab-out-of-bounds in cfg80211_find_ie". أما إذا كانت قيمة `event->len` أصغر من حجم الرأس، فإن عملية الطرح الصحيحة تصبح سالبة، مما يؤدي إلى تجاوز الحد العلوي للقيمة (wrap around) لتصبح عدد صحيح كبير جداً عند تخزينها في `assoc_req_ies_len`. يتم تمرير نفس طول البيانات هذا إلى الدالة `cfg80211_new_sta()`، لذا يمكن لادعاء زائد متواضع أيضاً نسخ بايتات قديمة من `event_body` إلى إشعار `NL80211_CMD_NEW_STATION`.
يمكن لجهاز mwifiex خبيث أو معطل (عبر واجهات USB/SDIO/PCIe) تسليم حدث كهذا بينما تكون الواجهة في وضع AP/uAP.
يجب التحقق من صحة قيمة `event->len` قبل استخدامها: رفض الطول الذي يسبب تجاوزاً سفلياً للرأس، أو الذي يضع عناصر التكوين (IEs) خارج حدود مخزن الحدث `event_body[]` الذي تم نسخ الحدث إليه هنا. تمثل قيمة `event->len` هذه حقل الحمولة الداخلية لـ `struct mwifiex_assoc_event.len` وليست طول إطار النقل، لذا يتم التحقق من صحتها في هذا المعالج بدلاً من مسار استقبال الأحداث العام `MWIFIEX_TYPE_EVENT`، والذي يرى فقط سبب الحدث وطول إطار النقل. تم تحديد الحد الأقصى بناءً على حجم `event_body[MAX_EVENT_SIZE]` وليس الطول المستلم فعلياً لأن وسائط النقل تخزن الحدث بشكل مختلف (حيث تترك USB وSDIO رأس الحدث المكون من 4 بايتات في `event_skb`، بينما تقوم PCIe بإزالته عبر دالة `skb_pull`)، whereas event_body هو المخزن الثابت الوحيد الذي تنسخ جميعها إليه الحدث. وهذا يمثل نظير مسار الأحداث لفحوصات الحدود التي أُضيفت لمسار الاستقبال في الالتزام (commit) 119585281617 ("wifi: mwifiex: Fix OOB and integer underflow when rx packets").
If you want to get the best quality for vulnerability data then you always have to consider VulDB.