
تحليل تقني لـ CVE-2026-43284 (Dirty Frag)، وهو تصعيد محلي للامتيازات في نواة Linux عبر xfrm ESP يتيح الكتابة في ذاكرة التخزين المؤقت للصفحات إلى ملفات للقراءة فقط لاختراق صلاحيات root.
تحليل تقني مفصّل للثغرة CVE-2026-43284 (Dirty Frag) الخاصة بتصعيد الصلاحيات المحلي في نواة Linux.
تُعدّ CVE-2026-43284 (المشار إليها عادةً كجزء من مجموعة ثغرات Dirty Frag) ثغرةً حرجة لتصعيد الصلاحيات المحلي (LPE) في نواة Linux. وهي ناتجة عن خلل منطقي داخل النظام الفرعي لإدخال xfrm ESP (Encapsulating Security Payload). تتيح هذه الثغرة لمهاجم محلي غير متمتّع بالصلاحيات تجاوز حمايات النسخ عند الكتابة (Copy-on-Write, CoW) المعتادة، وتحقيق قدرة كتابة عشوائية في ذاكرة التخزين المؤقت للصفحات (page-cache) داخل ملفات النظام للقراءة فقط (مثل /usr/bin/su)، مما يؤدي في النهاية إلى اختراق كامل بصلاحيات root.
تفصيل الثغرة وناقل الهجوم1.
القيد: يتطلب التفاعل مع إعدادات IPsec في النواة عادةً القدرة CAP_NET_ADMIN، وهي صلاحية محصورة بالمستخدم العادي. التجاوز: يمكن لمستخدم محلي غير متمتّع بالصلاحيات إنشاء User Namespace وNetwork Namespace منفصلين وغير متمتّعين بالصلاحيات (باستخدام أعلام مثل CLONE_NEWUSER | CLONE_NEWNET). وداخل مساحة الحاوية المعزولة غير المتمتّعة بالصلاحيات هذه، يصبح المهاجم عملية "root" لتلك المساحة، مما يمنحه صلاحيات CAP_NET_ADMIN ضمن ذلك السياق المحدود.
بامتلاكه CAP_NET_ADMIN داخل مساحة الشبكة المخصّصة، يقوم المهاجم بإعداد Security Association (SA) وهمية وسياسات IPsec مزيفة.
وباستخدام استدعاءات النظام مثل splice(2) أو vmsplice(2)، يربط المهاجم صفحات تنتمي إلى ملف هدف للقراءة فقط (مثل /usr/bin/su) داخل جزء من مخزن مؤقت للمقبس (skb).
القيد: يجب على المهاجم إجبار النواة على تحليل البيانات عبر روتين esp_input().
الاستراتيجية: ينشئ المهاجم بنية شبكة تغليف ESP-in-UDP ويوجّه الإرسال إلى واجهة loopback الخاصة بالمضيف (127.0.0.1).
عند استقبال الحزمة محليًا عبر قناة loopback، يتعرّف مكدّس الشبكة في النواة على غلاف حزمة UDP، ويفكّ تغليفها، ويسلّم الحمولة الداخلية إلى esp_input() لمعالجتها.
بسبب خلل منطقي في مسارات إلحاق مخططات البيانات IPv4/IPv6، تفشل النواة في وضع علامة SKBFL_SHARED_FRAG بشكل صحيح على أجزاء مخزن المقبس المؤقت الأساسية عند ربط الصفحات في مقابس UDP.
وبالتالي، يفسّر esp_input() الحزمة خطأً على أنها مخزن مؤقت خاص غير مستنسخ، ويسلك مسارًا سريعًا لتحسين الأداء "no-COW".
فبدلًا من نسخ البيانات إلى مخزن مؤقت آمن للمستخدم، ينفّذ esp_input() فك تشفير في المكان مباشرةً فوق صفحات الذاكرة المستعارة من ذاكرة التخزين المؤقت للصفحات في النظام
من خلال الضبط الدقيق لبيانات الحمولة المشفّرة والاستفادة من إعدادات الخوارزمية التشفيرية (مثل Extended Sequence Numbers)، تُعيد عملية فك التشفير كتابة الملف التنفيذي المستهدف في ذاكرة التخزين المؤقت للصفحات بشكل حتمي.
وبمجرد تسميم ذاكرة التخزين المؤقت للصفحات لملف تنفيذي مثل /usr/bin/su في الذاكرة بحمولة المهاجم، يؤدي تنفيذ الملف التنفيذي إلى تشغيل الحمولة بصلاحيات root دون لمس أو تعديل الملف التنفيذي المخزّن على القرص الفعلي.
التأثير: تصعيد صلاحيات محلي حتمي عالي الموثوقية عبر توزيعات Linux المؤسسية الرئيسية دون المخاطرة بحدوث kernel panics.
المعالجة: تحديث نواة Linux إلى إصدارات تتضمّن التصحيح الذي يفرض معالجة SKBFL_SHARED_FRAG لعمليات ربط مخططات البيانات، ويقدّم تراجعًا آمنًا إلى skb_cow_data() داخل منطق معالجة ESP.