CVE-2026-43503
net: skbuff: تمرير علامة shared-frag عبر أدوات frag-transfer المساعدة
- تم النشر
- 23/05/2026
- محدث
- 24/08/2026
- تخصيص CNA
- Linux
- الأدلة المرصودة
- 08/08/2026
CVSS الأساسي
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:Hمنخفض · الثلاثين يومًا القادمة
- المئوية
- 27.1%
- تاريخ الموديل
- 21/09/2026
EPSS هو تقدير إحصائي، وليس يقينًا أو مقياسًا للتأثير. ادمجها مع CVSS وحالة KEV والتعرض وبيئتك.
ملخص
في نواة Linux، تم حل الثغرة الأمنية التالية: net: skbuff: propagate shared-frag marker through frag-transfer helpers تفشل دالتا المساعدة في نقل الأجزاء (__pskb_copy_fclone() و skb_shift()) في نشر بِت SKBFL_SHARED_FRAG داخل skb_shinfo()->flags عند نقل الأجزاء (frags) من المصدر إلى الوجهة. تُرجئ __pskb_copy_fclone() بقية بيانات shinfo الوصفية إلى skb_copy_header() بعد نسخ واصفات الأجزاء (frag descriptors)، لكن تلك الدالة المساعدة لا تنقل سوى gso_{size,segs,type} ولا تلمس skb_shinfo()->flags أبدًا؛ بينما تنقل skb_shift() واصفات الأجزاء مباشرةً وتُبقي العلامات (flags) دون تغيير. نتيجةً لذلك، يُبقي skb الوجهة مرجعًا إلى الصفحات نفسها المملوكة خارجيًا أو المدعومة من page cache بينما يُبلغ عن skb_has_shared_frag() كنتيجة خاطئة (false). هذا التناقض ضار في أي كاتب في الموقع (in-place writer) يستخدم skb_has_shared_frag() ليقرر ما إذا كانت الصفحات المشتركة يجب أن تُمرَّر عبر skb_cow_data(). يُعد إدخال ESP أحد هذه الكتّاب (esp4.c, esp6.c)، وتكفي قاعدة nft واحدة 'dup to <local>' — أو أي مستدعٍ آخر لـ nf_dup_ipv4() / xt_TEE — لإيصال skb معالج عبر pskb_copy() إلى esp_input() مع تجريد العلامة (marker)، مما يتيح لمستخدم غير مميّز الكتابة في page cache لملف للقراءة فقط يملكه المستخدم الجذر عبر كتابات شاردة خاصة بـ authencesn-ESN. اضبط SKBFL_SHARED_FRAG على الوجهة كلما كانت واصفات الأجزاء قد نُقلت فعليًا من المصدر. تتقاسم كلٌّ من skb_copy() و skb_copy_expand() دالة skb_copy_header() أيضًا، لكنها تحوّل جميع البيانات المتراصفة (paged data) إلى تخزين رأس مُخصص حديثًا وتخرج بعدد nr_frags == 0، لذا يعيد skb_has_shared_frag() القيمة false من تلقاء نفسه؛ ولا تحتاجان إلى أي تعديل. يوجد الإغفال نفسه في skb_gro_receive() و skb_gro_receive_list(). تنقل الأولى واصفات الأجزاء الخاصة بـ skb الوارد إلى آخر sub-skb في المُجمِّع (accumulator) عبر مسارين (حلقة نقل أجزاء مباشرة ومسار head_frag + memcpy)؛ بينما تُلحق الأخيرة skb الوارد بالكامل إلى frag_list الخاصة بـ p. تقرأ skb_segment() في مرحلة لاحقة skb_shinfo(p)->flags فقط، وتعيد skb_segment_list() استخدام shinfo لكل sub-skb بوصفها nskb — لذا يجب أن يحمل كلٌّ من p وlp العلامة. يوجد الإغفال نفسه أيضًا في tcp_clone_payload()، التي تبني skb لاختبار MTU بنقل واصفات الأجزاء من skbs الموجودة في sk_write_queue إلى nskb مُخصص حديثًا. تنتمي هذه الدالة المساعدة إلى العائلة نفسها وتستحق الإصلاح نفسه من أجل الاتساق؛ لا يُعرف حاليًا أي كاتب في الموقع في جانب إرسال TCP يمكنه الوصول إلى صفحة مستخدم عبر هذه الفجوة، لكن أي مستهلك مستقبلي يعتمد على العلامة سينكسر بصمت. يوجد الإغفال نفسه في skb_segment(): يلتقط دمج العلامات في كل تكرار علامة head_skb فقط، ولا تدمج بنية switch الداخلية التي تعيد ربط frag_skb بـ list_skb عند استنفاد أجزاء head_skb علامة frag_skb الجديدة في nskb. ادمج علامة frag_skb في كلا الموضعين حتى تحمل الأجزاء (segments) التي تستمد frags من عناصر frag_list العلامة.
الاستخدام المسؤول
استخدم معلومات الثغرات الأمنية فقط على الأنظمة التي تمتلكها أو المرخص لها باختبارها. يرتبط Kitploit ببيانات تعريف البحث العامة ولا يخزن أكواد الاستغلال أو الحمولات الضارة.