CVE-2026-52943
net: skbuff: إصلاح مرجع zerocopy المفقود في مساعدات pskb_carve
- تم النشر
- 24/06/2026
- محدث
- 08/09/2026
- تخصيص CNA
- Linux
- الأدلة المرصودة
- 17/08/2026
CVSS الأساسي
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hمنخفض · الثلاثين يومًا القادمة
- المئوية
- 15.1%
- تاريخ الموديل
- 21/09/2026
EPSS هو تقدير إحصائي، وليس يقينًا أو مقياسًا للتأثير. ادمجها مع CVSS وحالة KEV والتعرض وبيئتك.
ملخص
في نواة لينكس، تم حل الثغرة الأمنية التالية: net: skbuff: إصلاح مرجع zerocopy المفقود في دوال pskb_carve المساعدة تقوم كل من `pskb_carve_inside_header()` و`pskb_carve_inside_nonlinear()` بنسخ رأس `skb_shared_info` القديم إلى مخزن مؤقت جديد عبر `memcpy()`، والذي يتضمن مؤشر `destructor_arg` (uarg) لـ skbs الخاصة بـ MSG_ZEROCOPY. لا تستدعي أي من الدالتين `net_zcopy_get()` لـ shinfo الجديد، مما يُنشئ حاملًا غير محسوب: كل `skb_shared_info` مع تعيين `destructor_arg` سيستدعي `skb_zcopy_clear()` مرة واحدة عند التحرير، ولكن `net_zcopy_get()` المقابلة لم تُستدعَ أبدًا للنسخة الجديدة. تؤدي الاستدعاءات المتكررة إلى خفض `uarg->refcnt` إلى الصفر قبل الأوان، مما يحرر `ubuf_info_msgzc` بينما لا تزال skbs الخاصة بـ TX تحمل مؤشرات `destructor_arg` حية. يبلغ KASAN عن use-after-free على `ubuf_info_msgzc` مُحرَّر: BUG: KASAN: slab-use-after-free in skb_release_data+0x77b/0x810 Read of size 8 at addr ffff88801574d3e8 by task poc/220 Call Trace: skb_release_data+0x77b/0x810 kfree_skb_list_reason+0x13e/0x610 skb_release_data+0x4cd/0x810 sk_skb_reason_drop+0xf3/0x340 skb_queue_purge_reason+0x282/0x440 rds_tcp_inc_free+0x1e/0x30 rds_recvmsg+0x354/0x1780 __sys_recvmsg+0xdf/0x180 Allocated by task 219: msg_zerocopy_realloc+0x157/0x7b0 tcp_sendmsg_locked+0x2892/0x3ba0 Freed by task 219: ip_recv_error+0x74a/0xb10 tcp_recvmsg+0x475/0x530 لا يزال skb الذي يستهلك الوصول المتأخر يشير إلى نفس uarg عبر `shinfo->destructor_arg` المنسوخ بواسطة `pskb_carve_inside_nonlinear()` دون زيادة في عدد المراجع. تم التحقق من أن هذه الثغرة قابلة للاستغلال بشكل موثوق: إثبات مفهوم عملي يحقق تصعيدًا كاملًا للصلاحيات إلى الجذر من مستخدم محلي غير مميز على تكوين نواة افتراضي. يتبع الإصلاح نمط `pskb_expand_head()` الذي يمتلك بنية memcpy/مستنسخة مماثلة. بالنسبة لـ `pskb_carve_inside_header()`، يتم وضع `net_zcopy_get()` بعد نجاح `skb_orphan_frags()`، بحيث لا يحتاج مسار خطأ اليتيم إلى تنظيف. بالنسبة لـ `pskb_carve_inside_nonlinear()`، يتم وضع `net_zcopy_get()` بعد جميع نقاط الفشل وقبل `skb_release_data()` مباشرة، بحيث لا يحتاج أي مسار خطأ إلى تنظيف على الإطلاق — مما يطابق `pskb_expand_head()` بشكل أوثق ويتجنب الحاجة إلى `net_zcopy_put()` موازنة.
المصادر
1الاستخدام المسؤول
استخدم معلومات الثغرات الأمنية فقط على الأنظمة التي تمتلكها أو المرخص لها باختبارها. يرتبط Kitploit ببيانات تعريف البحث العامة ولا يخزن أكواد الاستغلال أو الحمولات الضارة.