ثغرات أمنية في الأداة المساعدة needrestart التي تسمح بالوصول إلى الجذر في خادم Ubuntu

حددت Qualys ثلاث نقاط ضعف في الأداة المساعدة needrestart، المصممة لإعادة تشغيل العمليات في الخلفية بعد تحديث المكتبات المستخدمة بواسطة هذه العمليات. بدءًا من Ubuntu 21.04، يتم تضمين الأداة المساعدة needrestart في بيئة Ubuntu Server الأساسية، حيث يتم تشغيلها كجذر في نهاية كل معاملة لمدير حزم APT، وتفحص العمليات قيد التشغيل وتعيد تشغيل تلك المرتبطة بالملفات التي تغيرت منذ تحديثات الحزمة. تسمح الثغرات الأمنية التي تم تحديدها لمستخدم محلي لا يتمتع بأي امتيازات بالحصول على امتيازات الجذر على خادم Ubuntu في التكوين الافتراضي.

كانت الثغرات الأمنية موجودة في needrestart منذ الإصدار 0.8 (2014) وتم إصلاحها في needrestart 3.8. وقد تم بالفعل إصلاح هذه المشكلات في توزيعات Debian وUbuntu. كحل مؤقت لمنع استغلال الثغرة الأمنية، يمكن تعطيل فحص المترجم عن طريق تحديد المعلمة "$nrconf{interpscan} = 0" في ملف التكوين /etc/needrestart/needrestart.conf.

توجد ثغرات أمنية في الكود مع تنفيذ الوضع لتحديد تحديث البرامج النصية التي يتم تشغيلها باستخدام المترجمين الفوريين. القضايا التي تم تحديدها:

  • CVE-2024-48990 – يمكن للمستخدم المحلي تنفيذ التعليمات البرمجية باستخدام حقوق الجذر عن طريق تهيئة الظروف لتشغيل مترجم Python باستخدام متغير البيئة PYTHONPATH الذي تم تعيينه بواسطة مهاجم. بالإضافة إلى استخدام Python، يمكن أيضًا تنفيذ هجوم (CVE-2024-48992) من خلال تشغيل مترجم Ruby باستخدام متغير البيئة RUBYLIB.

    تنتج الثغرات الأمنية عن حقيقة أنه أثناء عملية إعادة تشغيل البرنامج النصي المعدل، تقوم أداة needrestart بتعيين متغير البيئة PYTHONPATH استنادًا إلى محتويات ملف /proc/pid/environ، والذي تستخدمه بعد ذلك لتشغيل كود Python الخاص بها. وبناءً على ذلك، يمكن للمهاجم انتظار نشاط مرتبط بمدير حزمة APT، ومحاكاة تغيير في البرنامج النصي الخاص به، وتعيين متغير البيئة PYTHONPATH له، والذي سيتم تطبيقه أيضًا عند تشغيل كود Python المضمن في needrestart ("import sys\n print(sys.path)")، والذي تم تنفيذه باستخدام امتيازات الجذر.

    على سبيل المثال، لاستغلال الثغرة الأمنية، يمكن للمرء تشغيل عملية Python معلقة بشكل دائم في الذاكرة، وتعيين متغير البيئة "PYTHONPATH=/home/test" لها، ووضع مكتبة مشتركة "/home/test/importlib/__init__.so"، والتي سيتم تنفيذها عند تنفيذ كود Python المميز في needrestart.

  • CVE-2024-48991 - يمكن للمستخدم المحلي تحقيق تنفيذ التعليمات البرمجية باستخدام امتيازات الجذر من خلال بدء حالة سباق تتسبب في قيام needrestart بتشغيل مترجم Python مزيف تم استبداله بواسطة المهاجم بدلاً من مترجم Python الخاص بالنظام. تتشابه هذه الثغرة في طبيعتها مع المشكلة المذكورة أعلاه، والفرق الوحيد هو أن needrestart يحدد اسم عملية Python (على سبيل المثال /usr/bin/python3) عن طريق قراءة "/proc/pid/exe".

    لاستغلال الثغرة الأمنية، يمكنك إنشاء عملية /home/test/race، والتي، باستخدام آلية inotify، ستنتظر حتى يبدأ needrestart في قراءة محتويات /proc/pid/exe، ثم تقوم على الفور بتشغيل مفسر Python للنظام عبر وظيفة execve. نظرًا لأن needrestart لا يتحقق مما إذا كان Python حقيقيًا أم لا، فسوف يفترض أن /home/test/race هو مُفسِّر Python ويقوم بتشغيله لكوده.

  • CVE-2024-11003 يمكن لمستخدم محلي تنفيذ أوامر Shell عشوائية كجذر عن طريق تكييف الحاجة إلى إعادة التشغيل لمعالجة أسماء الملفات بتنسيق "command|"، سيؤدي تمريرها إلى وظيفة Perl open() إلى تنفيذ الأمر. في الواقع، تظهر الثغرة الأمنية في وحدة Perl ScanDeps (CVE-2024-10224)، ولكن سببها هو تمرير معلمات خارجية إلى هذه الوحدة دون التحقق المناسب.

    يمكن تنفيذ الهجوم عن طريق تشغيل برنامج Perl النصي بالرمز "|". في الاسم، على سبيل المثال، "/home/test/Perl|". أثناء تنفيذ وظيفة scan_deps() في حالة الحاجة إلى إعادة التشغيل، سيتم فتح هذا الملف من خلال وظيفة open()، والتي ستقوم بمعالجة الحرف "|". كعلامة لتشغيل البرنامج "/home/test/Perl" واستخدام دفق الإخراج المستلم من هذا البرنامج.

المصدر: opennet.ru

إضافة تعليق