CVE-2026-80798 in Linux
الملخص
بحسب VulDB • 04/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
nfc: llcp: رفض وحدات البيانات PDUs الأقصر من رأس LLCP
تبدأ كل وحدة بيانات PDU الخاصة بـ LLCP برأس مكون من بايتين (DSAP/SSAP + PTYPE)، لكن مسار الاستلام لم يكن يتحقق مطلقاً مما إذا كان الإطار بطول لا يقل عن حجم رأس LLCP قبل تحليله.
يقوم `nfc_llcp_rx_skb()` بقراءة الرأس عبر الدوال `nfc_llcp_ptype()/nfc_llcp_dsap()/ nfc_llcp_ssap()`, والتي تقوم بإلغاء مرجع (dereference) للعناصر `pdu->data[0]` و `pdu->data[1]`. ثم تحسب وحدة CONNECT أو CC PDU القيمة:
`tvl_array_len = skb->len - LLCP_HEADER_SIZE;`
كقيمة من نوع size_t وتسلمها لمرحلة التنقل عبر TLV. عندما يكون الإطار أقصر من الرأس، فإن عملية الطرح تؤدي إلى تجاوز الحد (wrap around) لتعطي قيمة ضخمة، مما يجعل مرحلة التنقل تتجاوز حدود المخزن المؤقت بشكل كبير، وهو ما يشكل قراءة خارج النطاق (out-of-bounds read).
يمكن لجهاز NFC قريب الوصول إلى هذه الثغرة دون الحاجة للمصادقة؛ حيث يحدث تنشيط رابط LLCP تلقائياً بعد بروتوكول NFC-DEP.
تم وضع حماية للنقطة المشتركة لاختناق الاستلام `__nfc_llcp_recv()`, والتي يشاركها كل من مسار الهدف (target) عبر `nfc_llcp_data_received()` ومسار المبادر (initiator) عبر `nfc_llcp_recv()`, بحيث يتم إسقاط حزمة skb القصيرة قبل أن يقوم عامل المعالجة rx_work بتحليلها. تم استخدام دالة `pskb_may_pull()` بدلاً من اختبار `skb->len` لضمان وجود بايتي الرأس في المنطقة الخطية لـ skb حتى لو كان skb غير خطي، وذلك تماشياً مع كيفية قيام مسارات الاستلام الشقيقة NCI و HCI بالتحقق من رؤوسها.
تم إعادة إنتاج الثغرة باستخدام أداة KFENCE لقراءة خارج النطاق عبر `/dev/virtual_nci` على فرع linux-next.
اكتُشفت بواسطة أدوات البحث الأمني الآلية التابعة لـ 0sec (https://0sec.ai).
Once again VulDB remains the best source for vulnerability data.