
मैंने शैक्षिक उद्देश्यों के लिए आम बोलचाल में Pwnkit कहलाने वाली कमज़ोरी का विश्लेषण किया है और इसके लिए एक PoC लिखा है। इसका उपयोग केवल शैक्षिक उद्देश्यों के लिए ही करें
अस्वीकरण: यह सामग्री केवल शैक्षिक उद्देश्यों के लिए प्रदान की गई है। लक्ष्य सिस्टम के स्वामी की लिखित सहमति के बिना एक्सप्लॉइट का उपयोग अनैतिक है और इस पर कानूनी कार्रवाई की जा सकती है।
chmod +x build.sh।./build.sh।./mls_envp। आपको root एक्सेस प्राप्त हो जाएगा।polkit के भेद्य संस्करण (0.105) में, लेखक डेविड ज़ॉइटन ने मान लिया था कि pkexec को हमेशा कंसोल से ही कॉल किया जाएगा। उन्होंने यह माना था कि argc (आर्ग्युमेंट्स की संख्या) हमेशा 1 से अधिक होगा, क्योंकि argv[0] स्वयं प्रोग्राम का नाम होता है। हालाँकि, pkexec को सिस्टम कॉल execve के माध्यम से खाली आर्ग्युमेंट ऐरे पास करके भी कॉल किया जा सकता है। इसके कारण प्रोग्राम का लॉजिक टूट जाता है।
pkexec के कोड में यह अपेक्षा कठोरता से अंतर्निहित है कि argv में कम से कम एक एलिमेंट होगा। जब argc 0 होता है, तब भी प्रोग्राम argv[1] तक पहुँचने का प्रयास करता है। इससे argv ऐरे की सीमा से बाहर जाना होता है और envp ऐरे (एनवायरनमेंट वेरिएबल्स) का पहला एलिमेंट पढ़ा जाता है। हमारे मामले में वहाँ स्ट्रिंग "exp_exe" मौजूद है।
pkexec फ़ंक्शन g_find_program_in_path की सहायता से exp_exe प्रोग्राम खोजने का प्रयास करता है। खोज के लिए यह PATH वेरिएबल का उपयोग करता है। हम PATH को GCONV_PATH=. से बदल देते हैं। परिणामस्वरूप pkexec हमारे स्थानीय फ़ोल्डर में डमी फ़ाइल exp_exe पाता है और पथ GCONV_PATH=./exp_exe लौटाता है। argc से जुड़े बग के कारण यह पथ वापस envp[0] में लिख दिया जाता है, जिससे GCONV_PATH वेरिएबल "वैध" हो जाता है।
प्रोग्राम चलाने से पहले pkexec एनवायरनमेंट वेरिएबल्स (जिनमें SHELL भी शामिल है) की जाँच करता है। हम एक अनुपस्थित शेल (SHELL=xyz) पास करते हैं ताकि त्रुटि उत्पन्न हो सके। त्रुटि आउटपुट करते समय log_message को कॉल किया जाता है, जो glibc के तंत्र का उपयोग करता है। Glibc CHARSET=bohemcavanna वेरिएबल को देखता है और मानक कन्वर्टर न मिलने पर GCONV_PATH (जिसे हमने अंदर डाला था) वाली डायरेक्टरी तक पहुँचता है। वहाँ यह gconv-modules फ़ाइल पढ़ता है, हमारी लाइब्रेरी exploit.so लोड करता है और उसके अंदर के कोड को root अधिकारों के साथ निष्पादित करता है।