CVE-2025-68813 in Linux
الملخص
بحسب VulDB • 21/06/2026
في نواة لينكس، تم حل الثغرة التالية:
ipvs: إصلاح خطأ إلغاء مرجع المؤشر الفارغ (null-ptr-deref) في مسار أخطاء التوجيه لـ IPv4
تقوم المسار البرمجي الخاص بـ IPv4 داخل الدالة `__ip_vs_get_out_rt()` باستدعاء `dst_link_failure()` دون التأكد من تعيين قيمة `skb->dev`، مما يؤدي إلى إلغاء مرجع لمؤشر فارغ (NULL pointer dereference) في دالة `fib_compute_spec_dst()` عندما تحاول `ipv4_link_failure()` إرسال رسائل "الوجهة غير متاحة" عبر بروتوكول ICMP.
ظهرت هذه المشكلة بعد أن بدأ الالتزام البرمجي ed0de45a1008 ("ipv4: إعادة تجميع خيارات IPv4 في ipv4_link_failure") باستدعاء الدالة `__ip_options_compile()` من داخل `ipv4_link_failure()`. يؤدي هذا المسار البرمجي في النهاية إلى استدعاء `fib_compute_spec_dst()` التي تقوم بإلغاء مرجع لـ `skb->dev`. تم محاولة إصلاح إلغاء المرجع لمؤشر `skb->dev` الفارغ في الالتزام 0113d9c9d1cc ("ipv4: إصلاح إلغاء المرجع للمؤشر الفارغ في ipv4_link_failure")، لكن الإصلاح كان غير كافٍ حيث تعامل فقط مع حالة إلغاء المرجع المباشرة لـ `dev_net(skb->dev)` باستخدام جهاز احتياطي. لم يكن الإصلاح شاملاً لأن دالة `fib_compute_spec_dst()` لاحقاً في سلسلة الاستدعاءات لا تزال تصل إلى `skb->dev` مباشرة، والتي تظل فارغة (NULL) عندما تستدعي IPVS الدالة `dst_link_failure()`.
يحدث الانهيار عند: 1. معالجة IPVS لحزمة بيانات في وضع NAT مع وجهة مضبوطة بشكل غير صحيح. 2. فشل البحث عن التوجيه في دالة `__ip_vs_get_out_rt()` قبل إنشاء مسار توجيه. 3. يقوم مسار الخطأ باستدعاء `dst_link_failure(skb)` بينما تكون قيمة `skb->dev` مساوية لـ NULL. 4. تسلسل الاستدعاءات: `ipv4_link_failure()` → `ipv4_send_dest_unreach()` → `__ip_options_compile()` → `fib_compute_spec_dst()`. 5. تقوم دالة `fib_compute_spec_dst()` بإلغاء مرجع لمؤشر `skb->dev` الفارغ (NULL).
تطبيق نفس الإصلاح المستخدم لـ IPv6 في الالتزام 326bf17ea5d4 ("ipvs: إصلاح انهيار عدم توفر مسار التوجيه الخاص بـ IPv6"): تعيين قيمة `skb->dev` من خلال `skb_dst(skb)->dev` قبل استدعاء `dst_link_failure()`.
KASAN: null-ptr-deref في النطاق [0x0000000000000328-0x000000000000032f]
CPU: 1 PID: 12732 Comm: syz.1.3469 Not tainted 6.6.114 #2 RIP: 0010:__in_dev_get_rcu include/linux/inetdevice.h:233 RIP: 0010:fib_compute_spec_dst+0x17a/0x9f0 net/ipv4/fib_frontend.c:285 Call Trace: <TASK> spec_dst_fill net/ipv4/ip_options.c:232 spec_dst_fill net/ipv4/ip_options.c:229 __ip_options_compile+0x13a1/0x17d0 net/ipv4/ip_options.c:330 ipv4_send_dest_unreach net/ipv4/route.c:1252 ipv4_link_failure+0x702/0xb80 net/ipv4/route.c:1265 dst_link_failure include/net/dst.h:437 __ip_vs_get_out_rt+0x15fd/0x19e0 net/netfilter/ipvs/ip_vs_xmit.c:412 ip_vs_nat_xmit+0x1d8/0xc80 net/netfilter/ipvs/ip_vs_xmit.c:764
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.