
CVE-2021-4034 के लिए प्रूफ ऑफ कॉन्सेप्ट (प्रायोगिक ट्रेसलेस शोषण के साथ)
pkwned: CVE-2021-4034 के लिए प्रूफ ऑफ कॉन्सेप्ट
यह PoC glibc पर चल रहे pkexec के एक कमजोर संस्करण से रूट विशेषाधिकारों के साथ PAYLOAD_PATH (जैसा कि constants.h में परिभाषित है) को चलाएगा। निर्देशिका "GCONV_PATH=." में gconv मॉड्यूल वाली निर्देशिका के नाम पर एक निष्पादन योग्य फ़ाइल होनी चाहिए।
जैसा कि Qualys सलाहकार [1] में उल्लिखित है, यह एक syslog संदेश उत्पन्न करेगा। मुझे अब तक इसे रोकने के लिए दो दृष्टिकोण मिले हैं:
641 if (access (path, F_OK) != 0) 642 { 643 g_printerr ("Error accessing %s: %s\n", path, g_strerror (errno)); 644 goto out; 645 }
इस रिपॉजिटरी में gconv-fuse उपयोगिता शामिल है जो "GCONV_PATH=." पर एक FUSE फाइलसिस्टम माउंट करती है, जो access("gconv", X_OK) के एक कॉल के बाद खाली दिखाई देती है। यह केवल तभी काम करता है जब FUSE user_allow_other कॉन्फ़िगरेशन विकल्प सक्षम हो।
356 if (!g_file_get_contents ("/etc/shells", 357 &contents, 358 NULL, /* gsize *length */ 359 &error)) 360 { 361 g_printerr ("Error getting contents of /etc/shells: %s\n", error->message); 362 g_error_free (error); 363 goto out; 364 }
माउंट नेमस्पेस का उपयोग इसके ऊपर एक अपठनीय फ़ाइल माउंट करने के लिए किया जा सकता है, लेकिन इसके लिए एक यूज़र नेमस्पेस की भी आवश्यकता होती है, जो एक अनविशेषाधिकार प्राप्त उपयोगकर्ता को रूट में मैप करता है और pkexec के setuid बिट को अप्रभावी बना देता है (जैसे "unshare -r -u -m")।
ध्यान दें कि GLib ने g_find_program_in_path के लिए एक फिक्स मर्ज किया है (संभवतः v2.70.3 और v2.71.0 के बाद के अगले स्थिर संस्करणों के लिए) जो हमेशा वास्तविक पूर्ण पथ लौटाकर इस एक्सप्लॉइट को अव्यवहार्य बना देगा। [2]
[1] https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt [2] https://gitlab.gnome.org/GNOME/glib/-/commit/13ee46538f901a8eca8e7a4c167a8838ed0858d4