الخلل موجود في وحدة RDS داخل نواة لينكس. هذه الوحدة عبارة عن بروتوكول شبكي يستخدم غالباً في البيئات عالية الأداء مثل عناقيد الحوسبة أو أنظمة InfiniBand.
يظهر الخطأ تحديداً في مسار RDS zerocopy send، وهي آلية مصممة لإرسال البيانات مباشرة من ذاكرة المستخدم إلى الشبكة دون نسخ إضافي داخل النواة. هذه التقنية تحسن الأداء لكنها تجعل إدارة الذاكرة أكثر تعقيداً.
أثناء التنفيذ، تقوم الدالة:
rds_message_zcopy_from_user()
بتثبيت صفحات الذاكرة الخاصة بالمستخدم (pinning pages) صفحةً تلو الأخرى تمهيداً لإرسالها. لكن إذا حدث page fault لاحقاً أثناء العملية، فإن مسار معالجة الخطأ يحاول تحرير الصفحات المثبتة مسبقاً بطريقة غير صحيحة، ما يؤدي إلى double‑free أو فساد في عداد المراجع (reference count).
هذا الخطأ في إدارة الذاكرة هو الأساس الذي يسمح ببناء استغلال تصعيد الصلاحيات.
أظهر الباحثون أن هذا الخلل يمكن ربطه بميزات حديثة في لينكس لتحويل خطأ إدارة الذاكرة إلى وسيلة موثوقة للحصول على صلاحيات الجذر.
يبدأ المهاجم بالوصول إلى المسار الضعيف في RDS. إذا حدث page fault أثناء تثبيت الصفحات، يقوم النظام بتحرير صفحات لا يزال يفترض أن لها مراجع نشطة، مما يترك النواة في حالة ذاكرة غير متسقة.
بعد تحرير الصفحات بشكل خاطئ، يستخدم المهاجم ميزة io_uring fixed buffers.
هذه الميزة تسمح للتطبيقات بتسجيل مناطق ذاكرة ثابتة لعمليات الإدخال والإخراج غير المتزامنة عالية الأداء. من خلال التلاعب بهذه المخازن، يمكن للمهاجم إعادة تخصيص الصفحات الفيزيائية المحررة بطريقة يمكن التحكم بها.
في بعض الحالات، قد تتوافق هذه الصفحات مع ذاكرة page cache، وهي الذاكرة التي تحتفظ فيها النواة بنسخ من بيانات الملفات لتسريع الوصول إليها.
بذلك يصبح لدى المهاجم القدرة على تعديل البيانات الموجودة في page cache دون تغيير الملف الفعلي على القرص.
يستهدف الاستغلال عادةً محتوى ملف تنفيذي يحمل علم SUID ويعمل بصلاحيات root.
عند تعديل النسخة المخزنة في page cache، يقوم النظام لاحقاً بتشغيل الكود المعدل عند تنفيذ الملف، بينما يحتفظ الملف بصلاحيات الجذر. النتيجة: تشغيل كود المهاجم مع صلاحيات root كاملة.
وجود الثغرة يعتمد على إصدار النواة وإعدادات النظام.
أشارت تقارير أمنية إلى أن Arch Linux كان من أول الأنظمة التي ظهر عليها نموذج الاستغلال العملي، ما جعله محور الاختبارات الأولية.
أي توزيعة لينكس قد تكون عرضة نظرياً إذا توفرت الشروط التالية:
التقارير تشير إلى أن الإعدادات الافتراضية لبعض التوزيعات مثل Ubuntu وDebian وRHEL وAlmaLinux قد تكون أقل تعرضاً لأن وحدة RDS غالباً ليست مفعلة افتراضياً. ومع ذلك يجب التحقق من إعدادات النظام الفعلية بدلاً من الاعتماد على الافتراضات.
ذكرت شركة CloudLinux أنها اختبرت نموذج الاستغلال على منصاتها المختلفة وأكدت أن أنظمتها غير متأثرة بهذه الثغرة.
حتى ينجح الاستغلال عادةً يجب توفر عدة عوامل:
غياب أحد هذه العناصر قد يجعل الاستغلال صعباً جداً أو غير ممكن.
يمكن لمسؤولي الأنظمة تقليل المخاطر عبر عدة خطوات عملية.
أصدر مطورو لينكس تصحيحاً لمعالجة الخلل في مسار RDS. تثبيت آخر تحديث للنواة من مزود التوزيعة هو أهم إجراء أمني.
بعد التحديث يجب إعادة تشغيل النظام حتى تعمل النواة الجديدة.
إذا لم تكن البنية التحتية تحتاج إلى بروتوكول RDS، يمكن تقليل مساحة الهجوم عبر:
rdsبما أن سلسلة الاستغلال تعتمد على io_uring fixed buffers، فإن تقييد استخدام io_uring قد يقلل من خطر الاستغلال في بعض البيئات.
المرحلة الأخيرة من الهجوم تعتمد على ملفات SUID، لذلك من الأفضل:
الأنظمة متعددة المستخدمين مثل:
يجب إعطاؤها أولوية في التحديث لأنها تسمح غالباً بتشغيل كود من مستخدمين متعددين.
توضح ثغرة PinTheft أن استغلالات النواة الحديثة غالباً لا تعتمد على خطأ واحد فقط، بل على سلسلة من المكونات المتقدمة داخل النظام. في هذه الحالة تم الجمع بين:
لتحويل خلل بسيط في إدارة الذاكرة إلى تصعيد صلاحيات كامل للنظام. لذلك يبقى تحديث النواة وتقليل الوحدات غير الضرورية من أهم أساليب الحماية في بيئات لينكس.
Comments
0 comments