## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-SECNIGMA-CVE-2021-3560-POLKIT-PRIVILEGE-ESCLATION
# CVE-2021-3560-Polkit-Privilege-Esclation PoC
## البحث الأصلي بواسطة Kevin Backhouse
هذا مجرد نص برمجي Bash لإثبات المفهوم، يقوم بأتمتة خطوات الاستغلال المذكورة في مدونة Kevin Backhouse. اقرأ منشوره حول هذه الثغرة: https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/
## الاستخدام
root@kitploit:~
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` لتجاوز جميع الفحوصات وإجبار الاستغلال.
## كيف يعمل الاستغلال؟
شرح شامل وإثبات المفهوم لاستغلال هذه الثغرة يدويًا مذكور بالتفصيل في مدونة الباحث.
_الملخص المختصر_ لهذا الاستغلال مذكور أدناه:
* يتطلب هذا الهجوم توقيتًا دقيقًا ويجب تسجيل الدخول عبر SSH (أو جلسة سطر أوامر، حيث لا يمكن فتح التطبيقات الرسومية).
* يمكن للمهاجم استغلال هذه الثغرة عن طريق إرسال رسالة `dbus` إلى `polkit`، ولكن إغلاق الطلب فجأة أثناء معالجة `polkit` له. ثم يمكن للمهاجم إرسال طلب ثانٍ مع معرف الناقل الفريد للطلب السابق، لتنفيذ الطلب بصلاحية UID `0` المعروف بـ `root`.
* توجد هذه الثغرة في `polkit` لأنه يعامل UID الخاص باتصال بمعرف ناقل لم يعد موجودًا، كطلب من UID `0`. وهذا يعني أنه إذا تمكنا من توقيت الهجوم بشكل صحيح وإنهاء طلبنا الأول في اللحظة المناسبة، فيمكننا تقديم الطلب الثاني بصلاحيات UID `0` المعروف بـ `root`.
* يتم حساب التوقيت لإنهاء الاتصال على أنه الوقت المطلوب لإرسال رسالة dbus / 2. مشروح بالتفصيل هنا.
## ما الذي يفعله هذا النص البرمجي بالفعل؟
كما قلت سابقًا، هذا مجرد نص Bash يقوم بأتمتة إثبات المفهوم الخاص بـ Kevin Backhouse. الأوامر الأساسية هي نفسها؛ لقد قمت فقط بأتمتة بعض الخطوات الأولية (مثل الحصول على التوقيت الصحيح، فحص الثغرة، إدخال بيانات الاعتماد المخصصة، طباعة الألوان الجميلة، إلخ).
إذا تم تشغيل هذا النص البرمجي دون أي معاملات، فإن السلوك الافتراضي له هو كما يلي:
* التحقق من نوع التوزيعة. [باستخدام ملف `/etc/os-release`.]
* التحقق من تثبيت `accountservice` و `gnome-control-center`. [في توزيعات `rhel/centos/fedora`، يستخدم `rpm -qa` وفي توزيعات `debian/ubuntu`، يستخدم `dpkg -l`.]
* إذا تم العثور على التثبيتات، يتحقق النص البرمجي من إصدار polkit. [0.113 (أو أحدث) لتوزيعات `rhel.centos,fedora` و `0-105-26` لتوزيعات `Debian/Ubuntu`]
* إذا وجد أن إصدار polkit معرض للخطر، يبدأ النص البرمجي في الاستغلال.
* أولاً، يجد النص البرمجي الوقت المطلوب لإرسال الطلب باستخدام dbus-send عن طريق تنفيذ `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 `