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

الملخص

بحسب VulDB • 04/09/2026

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

netfilter: nf_tables: عدم جدولة إشعارات كائن مسار الحزمة (packet path object)

جميع إشارات الملف:سطر أدناه تشير إلى الإصدار v7.2-rc4 (ac5b0e5651b1). تم التقاط تتبع الأخطاء (trace) على الإصدار 7.2.0-rc6-kasan72rc6 (075b74841bd0)، حيث تنطبق نفس الأسطر.

دالة `nft_obj_notify()` مُصدَّرة ويُصل إليها من مسار الحزمة. المتصل الوحيد داخل الشجرة هو `nft_quota_obj_eval()` (في net/netfilter/nft_quota.c:68)، الذي يرسل إشعاراً باستخدام GFP_ATOMIC أثناء تقييم قاعدة لحزمة عابرة، دون الاحتفاظ بقفل mutex.

بما أن الالتزام 67cc570edaa0 ("netfilter: nf_tables: دمج عدة إشعارات في حزمة skbuff واحدة") لم يعد يُرسل هذا الإشعار على الفور. تقوم الدالة `__nft_obj_notify()` بجدولته في قائمة `notify_list` التابعة لـ `nft_net` عبر `nft_notify_enqueue()` (في net/netfilter/nf_tables_api.c:1211)، وهي مجرد استدعاء لـ `list_add_tail()`. لا تملك القائمة `notify_list` قفلاً خاصاً بها (include/net/netfilter/nf_tables.h:1951)، بل يتم تسلسلها بواسطة `commit_mutex`: فمواقع الإضافة الستة الأخرى تعمل جميعها داخل معاملة netlink، وعملية التفريغ في `nft_commit_notify()` (في net/netfilter/nf_tables_api.c:10746) تقوم بـ `list_del()` و `kfree_skb()` من دالة `nf_tables_commit()` بينما يكون قفل `commit_mutex` محتفظاً به.

وبالتالي، فإن إرسال الحزم عبر سلسلة تشير إلى كائن حصة مستنفد يؤدي إلى حدوث حالة سباق (race condition) بين عملية إضافة غير مقفلة (`list_add_tail()`) وعملية حذف وتحرير (`list_del()` + `kfree_skb()`) على معالج آخر. ثم تقوم دالة `WRITE_ONCE(prev->next, new)` في `__list_add()` بالكتابة عبر كائن sk_buff تم تحريره بالفعل:

BUG: KASAN: slab-use-after-free in __nft_obj_notify+0x2c5/0x2d0 Write of size 8 at addr ff110001047183c0 by task poc/76 CPU: 0 UID: 1000 PID: 76 Comm: poc Tainted: G W 7.2.0-rc6-kasan72rc6 #4 Call Trace: <IRQ> __nft_obj_notify (include/linux/list.h:164 include/linux/list.h:191 net/netfilter/nf_tables_api.c:1211 net/netfilter/nf_tables_api.c:8743) nft_quota_obj_eval (net/netfilter/nft_quota.c:68) nft_do_chain_inet nf_hook_slow __ip_local_out ip_push_pending_frames udp_send_skb udp_sendmsg __x64_sys_sendto

Allocated by task 77: __alloc_skb (net/core/skbuff.c:704) __nft_obj_notify (include/net/netlink.h:1055 net/netfilter/nf_tables_api.c:8731) nft_quota_obj_eval (net/netfilter/nft_quota.c:68) nft_do_chain

Freed by task 79: nf_tables_commit (include/linux/skbuff.h:1332 net/netfilter/nf_tables_api.c:10759 net/netfilter/nf_tables_api.c:11185) nfnetlink_rcv_batch (net/netfilter/nfnetlink.c:574) netlink_unicast netlink_sendmsg

العنوان الخاطئ ينتمي إلى ذاكرة التخزين المؤقت skbuff_head_cache بحجم 232.

إن الجدولة من مسار الحزمة خاطئة حتى لو تجاهلنا حالة السباق (race): فقائمة الإشعارات (`notify_list`) يتم تفريغها فقط بواسطة `nft_commit_notify()` من دالة `nf_tables_commit()` (:11185)، لذا فإن إشجاراً يُضاف إلى القائمة خارج معاملة لن يُرسل إلا بعد أن تلتزم بعض دفعات netlink اللاحقة، إذا حدث ذلك أبداً.

معامل gfp الذي لا تزال تأخذه الدالة `nft_obj_notify()` هو بقايا للسلوك السابق لـ 67cc570edaa0، حيث كانت هذه المسارة تستدعي `nfnetlink_send()` مباشرة. استعد هذا السلوك: افصل بناء الرسالة إلى دالة `nft_obj_notify_alloc()` واترك كل متصل يقرر ما يفعله مع كائن sk_buff. الدالة `nft_obj_notify()` (المُصدَّرة والتي يُصل إليها من مسار الحزمة) ترسلها على الفور؛ بينما الدالة `nf_tables_obj_notify()`، التي تعمل تحت قفل `commit_mutex`، تحافظ على جدولتها، لذا تظل إشعارات المعاملة مجمعة.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

مسؤول

Linux

حجز

26/08/2026

إفشاء

04/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-398974

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!