نقاط الضعف في مرسل الشبكة التي تسمح بالوصول إلى الجذر

حدد باحثون أمنيون من Microsoft ثغرتين أمنيتين (CVE-2022-29799 وCVE-2022-29800) في خدمة مرسل الشبكة، التي تحمل الاسم الرمزي Nimbuspwn، والتي تسمح لمستخدم لا يتمتع بأي امتيازات بتنفيذ أوامر عشوائية بامتيازات الجذر. تم إصلاح المشكلة في إصدار Networkd-dispatcher 2.2. لا توجد معلومات حول نشر التحديثات حسب التوزيعات حتى الآن (Debian، RHEL، Fedora، SUSE، Ubuntu، Arch Linux).

يتم استخدام Networkd-dispatcher في العديد من توزيعات Linux، بما في ذلك Ubuntu، التي تستخدم عملية الخلفية systemd-networkd لتكوين معلمات الشبكة، وتؤدي وظائف مشابهة لـ NetworkManager-dispatcher، أي. يشارك في إطلاق البرامج النصية عندما تتغير حالة اتصال الشبكة، على سبيل المثال، يتم استخدامه لتشغيل VPN بعد إنشاء اتصال الشبكة الرئيسي.

تعمل عملية الخلفية المرتبطة بمرسل الشبكة كجذر وتستقبل إشارات الأحداث عبر D-Bus. يتم إرسال المعلومات حول الأحداث المتعلقة بالتغيرات في حالة اتصالات الشبكة بواسطة خدمة systemd-networkd. تكمن المشكلة في أنه يمكن للمستخدمين غير المميزين إنشاء حدث حالة غير موجود وتشغيل البرنامج النصي الخاص بهم ليتم تنفيذه كجذر.

تم تصميم Systemd-networkd لتشغيل البرامج النصية لمعالج النظام الموجودة في الدليل /etc/networkd-dispatcher فقط ولا يمكن الوصول إليها لاستبدال المستخدم، ولكن بسبب وجود ثغرة أمنية (CVE-2022-29799) في كود معالجة مسار الملف، كان هناك خطأ إمكانية وجود دليل أساسي خارج الحدود وإطلاق نصوص برمجية عشوائية. على وجه الخصوص، عند تشكيل مسار الملف إلى البرنامج النصي، تم استخدام قيم OperationalState وadministratorState المرسلة عبر D-Bus، والتي لم يتم مسح الأحرف الخاصة فيها. يمكن للمهاجم إنشاء حالته الخاصة، والتي يحتوي اسمها على الأحرف "../" وإعادة توجيه استدعاء مرسل الشبكة إلى دليل آخر.

الثغرة الثانية (CVE-2022-29800) تتعلق بحالة سباق - بين التحقق من معلمات البرنامج النصي (التي تنتمي إلى الجذر) وتشغيله، كانت هناك فترة زمنية قصيرة كافية لاستبدال الملف وتجاوز التحقق مما إذا كان الملف قد تم تثبيته أم لا. البرنامج النصي ينتمي إلى المستخدم الجذر. بالإضافة إلى ذلك، لم يتحقق مرسل الشبكة من الروابط الرمزية، بما في ذلك عند تشغيل البرامج النصية من خلال العملية الفرعية. استدعاء مفتوح، مما أدى إلى تبسيط تنظيم الهجوم بشكل كبير.

تقنية التشغيل:

  • يتم إنشاء دليل "/tmp/nimbuspwn" ورابط رمزي "/tmp/nimbuspwn/poc.d" للإشارة إلى الدليل "/sbin"، والذي يستخدم للتحقق من الملفات القابلة للتنفيذ المملوكة للجذر.
  • بالنسبة للملفات القابلة للتنفيذ من "/sbin"، يتم إنشاء ملفات بنفس الاسم في الدليل "/tmp/nimbuspwn"، على سبيل المثال، بالنسبة للملف "/sbin/vgs"، يكون الملف القابل للتنفيذ "/tmp/nimbuspwn/vgs" هو تم إنشاؤها، مملوكة لمستخدم لا يتمتع بأي امتيازات، حيث يتم وضع الكود الذي يريد المهاجم تشغيله.
  • يتم إرسال إشارة عبر D-Bus إلى عملية مرسل الشبكة تشير إلى القيمة "../../../tmp/nimbuspwn/poc" في OperationalState. لإرسال إشارة في مساحة الاسم "org.freedesktop.network1"، تم استخدام القدرة على توصيل معالجاتها بـ systemd-networkd، على سبيل المثال، من خلال التلاعب بـ gpgv أو epmd، أو يمكنك الاستفادة من حقيقة أن systemd-networkd لا يعمل بشكل افتراضي (على سبيل المثال، في Linux Mint).
  • بعد تلقي الإشارة، يقوم Networkd-dispatcher بإنشاء قائمة بالملفات القابلة للتنفيذ المملوكة للمستخدم الجذر والمتاحة في الدليل "/etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d"، والذي يرتبط فعليًا بـ "/sbin".
  • في اللحظة التي يتم فيها استلام قائمة الملفات، ولكن لم يتم تشغيل البرنامج النصي بعد، تتم إعادة توجيه الرابط الرمزي من "/tmp/nimbuspwn/poc.d" إلى "/tmp/nimbuspwn" وسيقوم مرسل الشبكة بتشغيل البرنامج النصي الذي يستضيفه المهاجم مع حقوق الجذر.

نقاط الضعف في مرسل الشبكة التي تسمح بالوصول إلى الجذر


المصدر: opennet.ru

إضافة تعليق