CVE-2026-80731 in Linux
الملخص
بحسب VulDB • 03/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
net: إزالة عملية تعبئة الأصفار (zero-padding) الخاصة بـ CAP_SYS_RAWIO في دالة dev_validate_header
تقوم الدالة `dev_validate_header()` بقراءة قيمة `dev->hard_header_len` مباشرةً عند تنفيذ التعبئة بالأصفار للعناوين ذات الطبقة الربطية القصيرة المخصصة لحاملي صلاحية `CAP_SYS_RAWIO`:
if (capable(CAP_SYS_RAWIO)) {
memset(ll_header + len, 0, dev->hard_header_len - len); return true; }
تستدعي مسارات إرسال الحزم (`Packet send paths`) دالة `dev_validate_header()` على حزم skbs التي تم تخصيص مساحة الرأس (headroom) الخاصة بها بناءً على قراءة سابقة لقيمة `hard_header_len`. إذا تمت إعادة تكوين الجهاز بحيث تزداد قيمة `dev->hard_header_len` قبل عملية التحقق، فإن استدعاء `memset` سيكتب خارج حدود المخزن المؤقت المحجوز، مما يؤدي إلى كتابة خارج النطاق (out-of-bounds write).
يتم إخفاء هذه الكتابة خارج النطاق في بعض مسارات `SOCK_RAW` حالياً لأن الزيادة المتزامنة نفسها يمكن أن تجعل دالة `skb_push()` تتجاوز مساحة الرأس المحجوزة وتُطلق استثناءً من نوع `skb_under_panic()`. يجب إزالة فرع التعبئة بالأصفار قبل جعل قراءات `hard_header_len` متسقة، حتى لا تؤدي تصحيحات اللقطات (snapshot fixes) إلى تحويل حالة panic واضحة إلى عملية كتابة صامتة وغير مرئية.
لا يمكن الوصول إلى هذا المسار إلا للبروتوكولات ذات الطول المتغير في الطبقة الثانية (L2)، حيث تكون `len < hard_header_len` ولكن `len >= min_header_len`. لا يطبق أي بروتوكول L2 متغير الطول موجود داخل الشجرة الحالية عملية التحقق عبر `header_ops->validate`، ولا تملك عملية تجاوز صلاحية `CAP_SYS_RAWIO` التي تقوم بالتعبئة بالأصفار وقبول العناوين القصيرة قيمة حقيقية تتجاوز السماح باختبار مدخلات معيبة بشكل مقصود.
تم حذف فرع `CAP_SYS_RAWIO`. قراءات `dev->hard_header_len` المتبقية في دالة `dev_validate_header()` هي عمليات مقارنة فقط ولا تؤثر على سلامة الذاكرة (memory safety).
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.