
استغلال إثبات المفهوم لـ CVE-2024-48990، يُظهر تصعيد الامتيازات المحلية في needrestart عبر التلاعب بـ PYTHONPATH. يتضمن سكريبت تشغيل وثنائي حمولة للاختبار.
Needrestart هي أداة مساعدة مستخدمة على نطاق واسع في أنظمة لينكس (افتراضية في العديد من إصدارات أوبونتو) تتحقق بعد تحديث البرامج مما إذا كانت إحدى الخدمات أو النظام نفسه بحاجة إلى إعادة التشغيل. من خلال تحليل العمليات الجارية، تحدد ما إذا كانت تستخدم مكتبات محدّثة أو إذا كانت بحاجة إلى إعادة التشغيل حتى تدخل التغييرات حيز التنفيذ.
عندما يكتشف needrestart عملية تشغيل مترجم بايثون، فإنه يقرأ متغير البيئة PYTHONPATH المرتبط بتلك العملية من /proc/[pid]/environ ثم يضبطه قبل تشغيل مترجم بايثون الخاص به للتحليل.
إذا كانت العملية الأصلية مملوكة لمهاجم محلي، يمكن للمهاجم التلاعب بـ PYTHONPATH ليشير إلى مكتبة ضارة.
ونتيجة لذلك، عندما يشغّل needrestart مترجم بايثون بصلاحيات الجذر و PYTHONPATH المُتلاعب به، فإنه ينفذ في النهاية كود المهاجم، مما يؤدي إلى رفع الصلاحية إلى الجذر.
تؤثر هذه الثغرة فقط على إصدارات needrestart السابقة للإصدار 3.8. يتضمن الإصدار 3.8 والإصدارات الأحدث إصلاحًا يعمل على تنقية متغيرات البيئة مثل PYTHONPATH بشكل صحيح قبل استدعاء مترجم بايثون، مما يمنع رفع الصلاحية من خلال التلاعب الخبيث بمتغيرات البيئة.
استنساخ المستودع.
في ملف runner.sh، قم بتعديل عنوان IP المستخدم لجلب الملف الثنائي المُجمّع بحيث يشير إلى جهازك الخاص.
على جهاز المهاجم، امنح أذونات التنفيذ وشغّل binary.sh.
قم بإعداد خادم HTTP:
$ python3 -m http.server
