CVE-2026-74620 in Linuxالمعلومات

الملخص

بحسب VulDB • 22/08/2026

في نواة لينكس، تم حل الثغرة التالية:

net/sched: act_gact, act_police: التحقق من النطاق الخاص لإجراء التحكم الاحتياطي (fallback control action)

تقوم الدالة `tcf_action_check_ctrlact()` بالتحقق من نطاق إجراء التحكم الأساسي:

if (!opcode) ret = action > TC_ACT_VALUE_MAX ? -EINVAL : 0;

حيث أن `TC_ACT_VALUE_MAX` هو `TC_ACT_TRAP`، وبالتالي لا يمكن تعيين أحكام (verdicts) داخلية للنواة تتجاوز هذا الحد بهذه الطريقة. ومع ذلك، يحمل كل من `act_gact` و `act_police` إجراء تحكم احتياطي ثانٍ ومستقلاً يتم تزويده بواسطة مساحة المستخدم (user space)، ولا يصل هذا الإجراء إلى الدالة المساعدة المذكورة أعلاه - وهما `TCA_GACT_PROB.paction` و `TCA_POLICE_RESULT`. كلاهما يرفض فقط `TC_ACT_GOTO_CHAIN`، لذا فإن أي قيمة أخرى تُخزن كما هي وتُعاد كما هي من قبل الإجراء.

على وجه التحديد، يمكن لمساحة المستخدم تخزين `TC_ACT_CONSUMED`، وهو ما يعادل `TC_ACT_VALUE_MAX + 1` وليس جزءاً مقصوداً من نطاق قيم واجهة برمجة التطبيقات للمستخدم (UAPI). يخبر هذا الحكم كل متّصل بأن الإجراء قد استحوذ على حزمة البيانات (`skb`)، وبالتالي لا يقوم أحد بإفراغها: فتتخطى الدوال `sch_handle_ingress()` و `sch_handle_egress()` و `tcf_qevent_handle()` عملية الإفراج عنها عمداً. النتيجة هي تسرب واحد لـ sk_buff بالإضافة إلى مخزن بياناته لكل حزمة تمر عبر الفلتر، بشكل غير محدود (unbounded)، لجميع حركة المرور في السلسلة بما فيها الحزم المولدة من قبل النواة.

كلاهما قابل للتكرار بسهولة وبشكل حتمي (deterministic). يقوم `act_gact` بتقييد قيمة `tcfg_pval` لتكون أكبر من أو تساوي 1، لذا فإن مع وجود `pval = 1` تعيد الدالة `gact_determ()` الإجراء الاحتياطي لكل حزمة. ولا يوجد حد معدل إلزامي لـ `act_police`، لذا فإن ترك `rate = 0` يترك قيمة `tcfp_mtu` عند ~0 (أقصى قيمة صحيحة)، وتنجح الدالة `tcf_police_mtu_check()` دائماً.

تمت إضافة `TC_ACT_CONSUMED` عبر الالتزام commit 720f22fed81b ("net: sched: refactor reinsert action")، بعد كتابة كل من حواجز "goto-chain": commit 9469f375ab09 ("net/sched: act_gact: disallow 'goto chain' on fallback control action") و commit c08f5ed5d625 ("net/sched: act_police: disallow 'goto chain' on fallback control action"). ولم يتم توسيع أي من الحواجز عند ظهور الحكم الجديد.

تم استخلاج اختبار النطاق الحالي من `tcf_action_check_ctrlact()` كدالة مساعدة تسمى `tcf_action_valid()` وتطبيقه على كلا الإجراءين الاحتياطيين. لا يمكن للدالة المساعدة استدعاء `tcf_action_check_ctrlact()` مباشرةً لأن ذلك يؤدي أيضاً إلى تخصيص `goto_chain`، وهو بالضبط ما يجب ألا تفعله هاتان النقطتان.

تم إعادة إنتاج المشكلة في الإصدار v7.2-rc6: حيث يبلغ kmemleak عن تسرب كائن واحد من نوع skbuff_head_cache بحجم 232 بايت بالإضافة إلى مخزن بياناته البالغ حجمه 704 بايت لكل حزمة. ومع هذا التصحيح، يتم رفض كلا التكوينين بـ -EINVAL ولا يبلغ kmemleak عن أي تسربات.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

مسؤول

Linux

حجز

15/08/2026

إفشاء

22/08/2026

الاعتدال

تمت الموافقة

إدخال

VDB-394385

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Might our Artificial Intelligence support you?

Check our Alexa App!