تم اكتشاف ثغرتين أمنيتين في نواة لينكس. تشبه هاتان الثغرتان ثغرة Copy Fail التي تم الكشف عنها قبل أيام، لكنهما تؤثران على نظامين فرعيين مختلفين هما xfrm-ESP وRxRPC. أُطلق على هذه السلسلة من الثغرات اسم Dirty Frag (وتُعرف أيضًا باسم Copy Fail 2). تسمح هذه الثغرات لمستخدم غير مُصرّح له بالحصول على صلاحيات الجذر عن طريق الكتابة فوق بيانات العملية في ذاكرة التخزين المؤقت للصفحات. يتوفر برنامج استغلال يعمل على جميع توزيعات لينكس الحالية. تم الكشف عن الثغرة قبل نشر التحديثات الأمنية، ولكن يوجد حل بديل متاح.
يُغطي برنامج Dirty Frag ثغرتين أمنيتين مختلفتين: الأولى في وحدة xfrm-ESP، المُستخدمة لتسريع عمليات تشفير IPsec باستخدام بروتوكول ESP (حمولة الأمان المُغلفة)، والثانية في برنامج تشغيل RxRPC، الذي يُنفذ عائلة مقابس AF_RXRPC وبروتوكول RPC الذي يحمل الاسم نفسه، ويعمل عبر UDP. تُتيح كل ثغرة، على حدة، الحصول على صلاحيات الجذر. وقد وُجدت ثغرة xfrm-ESP في نواة لينكس منذ يناير 2017، وثغرة RxRPC منذ يونيو 2023. وتنتج كلتا المشكلتين عن تحسينات تسمح بالكتابة المباشرة إلى ذاكرة التخزين المؤقت للصفحات.
لاستغلال ثغرة xfrm-ESP، يجب أن يمتلك المستخدم صلاحية إنشاء مساحات أسماء، ولاستغلال ثغرة RxRPC، يجب تحميل وحدة rxrpc.ko في نواة النظام. على سبيل المثال، في أوبونتو، تمنع قواعد AppArmor المستخدمين غير المصرح لهم من إنشاء مساحات أسماء، ولكن وحدة rxrpc.ko تُحمّل افتراضيًا. تفتقر بعض التوزيعات إلى وحدة rxrpc.ko، لكنها لا تمنع إنشاء مساحات الأسماء. طوّر الباحث الذي اكتشف هذه المشكلة ثغرة استغلال مُدمجة قادرة على مهاجمة النظام عبر كلتا الثغرتين، مما يُتيح استغلالها في جميع التوزيعات الرئيسية. تم التأكد من أن الثغرة الأمنية تعمل على أنظمة Ubuntu 24.04.4 مع النواة 6.17.0-23، وRHEL 10.1 مع النواة 6.12.0-124.49.1، وopenSUSE Tumbleweed مع النواة 7.0.2-1، وCentOS Stream 10 مع النواة 6.12.0-224، وAlmaLinux 10 مع النواة 6.12.0-124.52.3، وFedora 44 مع النواة 6.19.14-300.
كما هو الحال مع ثغرة Copy Fail، فإن المشاكل في xfrm-ESP وRxRPC ناتجة عن فك تشفير البيانات في مكانها باستخدام الدالة splice()، التي تنقل البيانات بين واصفات الملفات والأنابيب دون نسخها، وذلك بتمرير مراجع إلى عناصر في ذاكرة التخزين المؤقت للصفحات. وقد حُسبت إزاحات الكتابة دون إجراء فحوصات مناسبة لمراعاة استخدام المراجع المباشرة إلى عناصر ذاكرة التخزين المؤقت للصفحات، مما يسمح لطلبات مُصممة خصيصًا بالكتابة فوق 4 بايتات عند إزاحة معينة وتعديل محتويات أي ملف في ذاكرة التخزين المؤقت للصفحات.
تسترجع جميع عمليات قراءة الملفات محتوياتها من ذاكرة التخزين المؤقت للصفحات أولاً. إذا تم تعديل البيانات في ذاكرة التخزين المؤقت للصفحات، فستُعيد عمليات قراءة الملفات بيانات مُستبدلة، وليست المعلومات الأصلية المخزنة على القرص. يُمكن استغلال هذه الثغرة الأمنية عن طريق تعديل ذاكرة التخزين المؤقت للصفحات لملف تنفيذي باستخدام علامة suid الجذرية. على سبيل المثال، للحصول على صلاحيات الجذر، يُمكن قراءة الملف التنفيذي /usr/bin/su ووضعه في ذاكرة التخزين المؤقت للصفحات، ثم استبدال محتوى هذا الملف المُحمّل في ذاكرة التخزين المؤقت برمز برمجي خاص. سيؤدي تنفيذ أداة "su" لاحقًا إلى تحميل النسخة المُعدّلة من ذاكرة التخزين المؤقت للصفحات إلى الذاكرة، وليس الملف التنفيذي الأصلي من القرص.
كان من المقرر الكشف عن الثغرة الأمنية وإصدار التحديثات المنسقة في 12 مايو، ولكن بسبب تسريب، كان لا بد من نشر معلومات الثغرة قبل إصدار التحديثات. في أواخر أبريل، نُشرت تحديثات لـ rxrpc وipsec وxfrm على القائمة البريدية العامة لـ netdev دون الإشارة إلى ارتباطها بالثغرة. في 5 مايو، وافق المسؤول عن نظام IPsec الفرعي على تعديل في مستودع netdev Git يتضمن إصلاحًا مقترحًا في وحدة xfrm-esp. كان وصف التعديل مطابقًا إلى حد كبير لوصف المشكلة التي أدت إلى ثغرة Copy Fail في وحدة algif_aead. أبدى باحث أمني اهتمامًا بهذا الإصلاح، وتمكن من إنشاء برنامج استغلال فعال، ونشره، دون أن يعلم بفرض حظر على الكشف عن معلومات حول المشكلة حتى 12 مايو.
لم تُنشر بعدُ تحديثاتٌ لإصلاحات نواة لينكس وحزم النواة في التوزيعات، ولكن تتوفر رقعٌ تصحيحيةٌ لمعالجة المشكلات، وهي xfrm-esp و rxrpc. لم تُخصَّص مُعرِّفات CVE، مما يُعقِّد تتبُّع تحديثات الحزم في التوزيعات. كحلٍّ بديل، يُمكنك منع تحميل وحدات النواة esp4 و esp6 و rxrpc باستخدام الأمر التالي: sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"
المصدر: opennet.ru
