CVE-2026-80840 in Linux
الملخص
بحسب VulDB • 05/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
ipv6: seg6: مسح كتلة التحكم الخاصة بـ IPv4 (IPv4 control block) أثناء فك تجميع IPIP
تقوم عمليات End.DX4 وEnd.DT4 بفك تجميع حزمة IPv4 عبر دالة `decap_and_validate()` وإرسالها مباشرة إلى توجيه IPv4. ونتيجة لذلك، تتجاوز الحزمة الداخلية دالة `ip_rcv_core()`، التي تقوم عادةً بمسح IPCB قبل أن يفسر IPv4 محتوى `skb->cb`.
تحافظ الحزمة (skb) بدلاً من ذلك على بيانات IP6CB القادمة من الحزمة الخارجية. وبما أن IP6CB وIPCB يستخدمان نفس مساحة التخزين في `skb->cb`، فإن `IP6CB(skb)->lastopt` يتداخل مع `IPCB(skb)->opt.optlen` و`srr`، بينما يتداخل `IP6CB(skb)->nhoff` مع `rr` و`ts`.
يمكن للمرسل جعل بايت optlen القديم غير صفري باستخدام سلسلة عناوين امتداد خارجية صالحة. تضع أدوات إعادة الإنتاج (reproducers) رأس خيارات الوجهة (Destination Options) ذي الثمانية بايتات مباشرة بعد رأس IPv6 ذو الأربعين بايتًا وقبل رأس توجيه القطع (Segment Routing Header). تسجل الدالة `ipv6_destopt_rcv()` إزاحة خيارات الوجهة التي يتحكم فيها المرسل في كل من lastopt وnhoff، وتضبطهما على القيمة 40. وعلى نواة x86-64 ذات ترتيب البايتات الصغير (little-endian) حيث تم إعادة إنتاج الثغرة، يرى IPv4 إذنًا أن `optlen = 40` وأن `rr = 40`.
تتخطى كل من الدالتين `tcp_v4_save_options()` و`__ip_options_echo()` نسخ الخيارات عندما تكون optlen تساوي صفرًا. هنا، بما أن optlen تساوي 40، فإن مسار TCP SYN يخصص مساحة لـ 40 بايتًا من بيانات الخيارات ويستدعي دالة `__ip_options_echo()`. يجعل القيمة القديمة لـ rr هذه الدالة تقرأ البايت رقم 41 في الحزمة الداخلية على أنه طول خيار "تسجيل المسار" (Record Route). يضبط أدوات إعادة الإنتاج هذا البايت الذي يتحكم فيه المرسل على القيمة 255، لذا تقوم دالة `__ip_options_echo()` بنسخ 255 بايتًا إلى منطقة بيانات الخيارات ذات الـ 40 بايت.
أنتجت كل من أدوات إعادة الإنتاج المستقلة لعمليات End.DX4 وEnd.DT4 على نواة v7.2-rc5 غير المصححة ما يلي:
BUG: KASAN: slab-out-of-bounds in __ip_options_echo() Write of size 255
مسار الاستدعاء ذي الصلة لعملية End.DX4 هو:
__ip_options_echo tcp_v4_route_req tcp_conn_request tcp_v4_conn_request tcp_rcv_state_process tcp_v4_do_rcv tcp_v4_rcv ip_protocol_deliver_rcu ip_local_deliver_finish ip_local_deliver input_action_end_dx4_finish input_action_end_dx4
مسار الاستدعاء ذي الصلة لعملية End.DT4 هو:
__ip_options_echo tcp_v4_route_req tcp_conn_request tcp_v4_conn_request tcp_rcv_state_process tcp_v4_do_rcv tcp_v4_rcv ip_protocol_deliver_rcu ip_local_deliver_finish ip_local_deliver input_action_end_dt4
تكون الدالة `tcp_v4_save_options()` مضمنة (inlined) داخل مسار `tcp_v4_route_req()`، لذا فهي لا تظهر كإطار استدعاء منفصل.
عندما تتعامل دالة `decap_and_validate()` مع بروتوكول IPPROTO_IPIP، احفظ واجهة الدخول من IP6CB، امسح IPCB، واستعد القيمة المحفوظة. يغطي القيام بذلك في مسار فك التجميع المشترك عمليات End.DX4 وEnd.DT4 والذراع الخاص بـ IPv4 لـ End.DT46.
استخدم `IP6CB(skb)->iif` بدلاً من `skb->skb_iif`. تعمل هذه الإجراءات بعد معالجة l3mdev، والتي يمكن أن تحل محل skb_iif بالواجهة الرئيسية L3؛ بينما يسجل IP6CB iif واجهة الاستلام كما تم ضبطها عند دخول IPv4.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.