CVE-2026-64114 in Linux
الملخص
بحسب VulDB • 20/07/2026
في نواة لينكس، تم حل الثغرة التالية:
ipv4: raw: رفض حزم IP_HDRINCL التي تحتوي على ihl < 5
تقوم الدالة `raw_send_hdrinc()` بالتحقق من أن رأس IPv4 الذي يورده المتصل يتسع ضمن طول الرسالة المحدد:
iphlen = iph->ihl * 4; err = -EINVAL; if (iphlen > length) goto error_free;
if (iphlen >= sizeof(*iph)) {
/* تصحيح saddr, tot_len, id, csum, transport_header */ }
ومع ذلك، لا ترفض الدالة القيم التي تكون فيها ihl < 5. بالنسبة لحزمة من هذا النوع، يتم تجاوز فرع "if (iphlen >= sizeof(*iph))"، مما يترك رأس IP المُعدّ خصيصاً (crafted iphdr) دون تغيير، لكن الحزمة تُمرر بعد ذلك إلى `__ip_local_out()` وما يليه. يستهلك downstream الذين يقرؤون قيمة `iph->ihl` افتراضاً أن القيمة معقولة؛ وتحديداً في الملف `net/ipv4/ah4.c:ah_output()`, يتم طرح `sizeof(struct iphdr)` من ناتج `top_iph->ihl * 4`، ثم تمرير النتيجة (التي تكون سالبة كعدد صحيح موقّع، ثم تُحوّل إلى size_t) إلى دالة `memcpy()`، مما ينتج عنه وصول خارج النطاق (OOB access) بطول يقترب من SIZE_MAX وانهيار لنواة المضيف (host kernel panic).
يُعد رأس IPv4 الذي يحتوي على ihl < 5 غير صالح بالتعريف (RFC 791: "طول رأس الإنترنت هو طول رأس الإنترنت بكلمات مكونة من 32 بت ... ملاحظة أن القيمة الدنيا لرأس صحيح هي 5"). لا ينبغي للنواة قبول حقن حزمة من هذا النوع في مسار الإخراج الخاص بها.
رفض القيم التي تكون فيها "iphlen < sizeof(*iph)" جنباً إلى جنب مع التحقق الحالي "iphlen > length". وهذا يتوافق مع المبدأ القائل بأن الحزم المُشكّلة محلياً والتي تعيد الدخول إلى طبقة IP يجب أن تخضع لنفس اختبارات الصحة الأساسية (sanity tests) التي تُفرض على الحزم القادمة من مصادر خارجية.
بمجرد تطبيق هذا التعديل، يصبح الغلاف "if (iphlen >= sizeof(*iph))" حول فرع التصحيح زائداً عن الحاجة؛ وقد تم الإبقاء عليه في مكانه للحفاظ على حجم التصغير (patch) بسيطاً ولتسهيل عملية النقل الخلفي (backport). يمكن لفريق التطوير لاحقاً إزالة هذا الغلاف.
جدير بالذكر أن الالتزام commit 86f4c90a1c5c ("ipv4, ipv6: ensure raw socket message is big enough to hold an IP header") يضمن أن مخزن الرسائل كبير بما يكفي لاستيعاب رأس iphdr، لكنه لا يفرض قيوداً على قيمة ihl المُبلغ عنها ذاتياً (`iph->ihl`).
إمكانية الوصول (Reachability): مصدر الحزمة غير الصالحة هو أي متصل يمتلك capability CAP_NET_RAW، بما في ذلك عملية غير مملوكة للصلاحيات (unprivileged process) ضمن namespace مستخدم+شبكة على نواة تحتوي على CONFIG_USER_NS=y. كما يتطلب إعادة إنتاج انهيار AH وجود سياسة xfrm AH مطابقة في مسار الإخراج؛ ويمكن لحاوية مُمنوحة صلاحية CAP_NET_ADMIN تثبيت هذه الحالة والسياسة داخل netns الخاص بها. يتجاوز حلقة الاتصال (Loopback) دالة `xfrm_output`، لذا يستخدم المحفز جهاز شبكة حقيقياً (real netdev).
تم إعادة الإنتاج على UML + KASAN: خطأ في وضع النواة عند العنوان 0x0 مع استدعاء memcpy_orig في موقع الانهيار. نفس نمط الإعادة يتكرر داخل حاوية Docker بدون صلاحيات الجذر (rootless) باستخدام --cap-add NET_ADMIN على نواة توزيع قياسية.
VulDB is the best source for vulnerability data and more expert information about this specific topic.