
CVE-2022-0847 के लिए अवधारणा का प्रमाण
CSE 5380: सूचना सुरक्षा पेपर CVE-2022-0847 (Dirty Pipe)
द्वारा
Karan Vasudevamurthy (UTA ID: 1002164438)
CVE क्या है?
सामान्य कमजोरियाँ और एक्सपोज़र (CVE) सार्वजनिक रूप से खुलासा की गई सूचना सुरक्षा कमजोरियों और एक्सपोज़र की एक सूची है। MITRE निगम ने 1999 में सॉफ्टवेयर और फर्मवेयर में कमजोरियों की पहचान और वर्गीकरण करने के लिए CVE शुरू किया। MITRE एक गैर-लाभकारी संगठन है जो संयुक्त राज्य अमेरिका में संघीय रूप से वित्तपोषित अनुसंधान और विकास केंद्र संचालित करता है। CVE का उद्देश्य ज्ञात कमजोरियों के बारे में जानकारी साझा करने की सुविधा प्रदान करना है ताकि साइबर सुरक्षा योजनाओं को नवीनतम सुरक्षा मुद्दों और कमजोरियों को प्रतिबिंबित करने के लिए अपडेट किया जा सके। ऐसा करने के लिए, CVE प्रत्येक कमजोरी या एक्सपोज़र को एक अद्वितीय पहचानकर्ता प्रदान करता है। CVE पहचानकर्ता, जिन्हें CVE नाम या CVE संख्या भी कहा जाता है, के माध्यम से। कॉमन वल्नरेबिलिटी स्कोरिंग सिस्टम (CVSS) खुले मानकों का एक सेट है जो किसी कमजोरी को उसकी गंभीरता का आकलन करने के लिए एक संख्या प्रदान करता है। CVSS स्कोर की सीमा 0.0 से 10.0 तक है। सुरक्षा गंभीरता की मात्रा संख्या बढ़ने पर बढ़ती है। प्रत्येक CVE ID को CVE-YYYY-NNNNN के रूप में स्वरूपित किया जाता है। YYYY भाग वह वर्ष है जिसमें CVE ID नियत किया गया था या वह वर्ष जिसमें कमजोरी को सार्वजनिक किया गया था।
पाइप क्या हैं?
CVE-2022-0847 के संदर्भ में, पाइप बफर से जुड़ी विशेषताओं, विशेष रूप से पाइप बफर से जुड़े गुणों को समझना महत्वपूर्ण है। Linux में पाइप प्रक्रियाओं के बीच डेटा स्थानांतरित करने में मदद करते हैं, जिसमें एक प्रक्रिया का आउटपुट दूसरी प्रक्रिया के लिए इनपुट बन जाता है। यह तंत्र सिस्टम पर चलने वाली विभिन्न प्रक्रियाओं के बीच संचार और समन्वय की सुविधा प्रदान करता है। Linux में पाइप एकदिशिक होते हैं, जिसका अर्थ है कि डेटा केवल एक ही दिशा में बहता है। एक पाइप बफर में आमतौर पर एक निश्चित आकार, प्रथम-इन-फर्स्ट-आउट (FIFO) डेटा संरचना होती है जो प्रक्रियाओं के बीच स्थानांतरित किए जा रहे डेटा को अस्थायी रूप से रखती है। जब कोई प्रक्रिया पाइप में डेटा लिखती है, तो वह बफर में संग्रहीत होता है जब तक कि कोई अन्य प्रक्रिया इसे न पढ़ ले। एक बार डेटा पढ़ लिए जाने के बाद, इसे बफर से हटा दिया जाता है, जिससे नया डेटा लिखा जा सकता है।
कमजोरी
CVE-2022-0847 के लिए, पाइप बफर के भीतर दो कार्यों को समझना महत्वपूर्ण है-
पृष्ठ | 1
Max Kellermann ने पाया कि Linux कर्नेल ने Unix पाइपों को गलत तरीके से संभाला। कमजोरी "copy_page_to_iter_pipe" और "push_pipe" कार्यों के भीतर कुछ विशेषताओं, विशेष रूप से "flags" पैरामीटर के अपर्याप्त आरंभीकरण के कारण उत्पन्न होती है। यह चूक फ्लैग को पुराने या गलत मान निर्दिष्ट होने की संभावना की ओर ले जाती है, जो संभावित रूप से सिस्टम की सुरक्षा और अखंडता से समझौता करती है। एक अविशेषाधिकार प्राप्त स्थानीय उपयोगकर्ता इस दोष का उपयोग केवल-पढ़ने योग्य फ़ाइलों द्वारा समर्थित पेज कैश में पृष्ठों पर लिखने और इस प्रकार सिस्टम पर अपने विशेषाधिकारों को बढ़ाने के लिए कर सकता है।
हमले की पद्धति
यह CVE-2016-5195 "Dirty Cow" के समान है, लेकिन इसका शोषण करना आसान है। CVE-2022-0847 के शोषण के लिए लक्ष्य प्रणाली तक स्थानीय पहुँच की आवश्यकता होती है और यह 5.8 से नए Linux कर्नेल संस्करणों को प्रभावित करता है। हम PIPE_BUF_FLAG_CAN_MERGE फ्लैग के साथ नए पाइप बफर बना सकते हैं जो उचित आरंभीकरण की कमी के कारण गलत तरीके से सेट होता है। यह फ्लैग पाइप बफर में लेखन के समामेलन को नियंत्रित करता है और इस प्रकार पाइप में जुड़े मौजूदा पृष्ठ पर लिखने की अनुमति देता है। यदि कोई फ़ाइल इस जुड़े हुए पृष्ठ की अनुमति देती है, तो संशोधन मेमोरी में फ़ाइल के साझा सिस्टम-व्यापी दृश्य में दिखाई देगा। कोई भी आगे का कैश फ्लश वर्तमान Linux अनुमति सेटिंग्स की उपेक्षा करेगा और परिवर्तित डेटा को डिस्क पर कॉपी करेगा। यह एक अविशेषाधिकार प्राप्त उपयोगकर्ता को फ़ाइल की विशिष्ट सामग्री (डिस्क या मेमोरी में) बदलने में सक्षम बनाएगा, भले ही फ़ाइल केवल-पढ़ने योग्य एक्सेस नियंत्रणों जैसे SELinux, मानक Linux अनुमतियाँ, उन्नत एक्सेस नियंत्रण, और अपरिवर्तनीय फ़ाइलों द्वारा संशोधन से सुरक्षित हो। इसलिए हम मान सकते हैं कि हमलावर Linux सिस्टम का बुनियादी ज्ञान और दुर्भावनापूर्ण कोड निष्पादित करने की क्षमता वाला कोई भी अविशेषाधिकार प्राप्त स्थानीय उपयोगकर्ता होगा। ऐसा व्यक्ति अपने विशेषाधिकारों को बढ़ा सकता है और संभावित रूप से पूरे सिस्टम से समझौता कर सकता है, जो एक महत्वपूर्ण सुरक्षा जोखिम पैदा करता है।
प्रूफ ऑफ कॉन्सेप्ट
नीचे वे चरण दिए गए हैं जिनका मैंने Linux चलाने वाली वर्चुअल मशीन पर CVE-2022-0847 का शोषण करने के लिए पालन किया।
यह जाँचना कि क्या आपका Linux वितरण शोषित किया जा सकता है-
5.8 से नया कोई भी Linux कर्नेल प्रभावित है। हालाँकि, संस्करण 5.16.11, 5.15.25 और 5.10.102 को CVE-2022-0847 के लिए शोषित नहीं किया जा सकता। अपने कर्नेल संस्करण का पता लगाने के लिए, हम बस *uname -r* चला सकते हैं। यदि आप सुनिश्चित नहीं हैं कि लक्ष्य प्रणाली कमजोर है या नहीं, तो आप यह bash script भी चला सकते हैं।
सही Linux कर्नेल डाउनलोड करना-
प्रदर्शन के लिए मैंने Ubuntu 20.04.1 LTS का उपयोग करने का निर्णय लिया। लेकिन, Ubuntu का यह संस्करण वर्तमान में Linux कर्नेल 5.15 पर चलता है और CVE-2022-0847 को कर्नेल के इस संस्करण पर शोषित नहीं किया जा सकता। Linux कर्नेल 5.8 डाउनलोड करने के लिए, हम बस *sudo apt install linux-image-5.8.0-63-generic linux-headers-5.8.0-63-generic चला सकते हैं
शोषण डाउनलोड करें-
शोषण GitHub पर पाया जा सकता है। यह प्रदर्शित करता है कि पेज कैश में किसी भी फ़ाइल सामग्री को कैसे अधिलेखित किया जाए, भले ही फ़ाइल को लिखने की अनुमति न हो, वह अपरिवर्तनीय हो या केवल-पढ़ने योग्य माउंट पर हो। आप टर्मिनल में *git clone[ https://github.com/karanlvm/Infosec.git* ](https://github.com/karanlvm/Infosec.git%60) भी चला सकते हैं।
मूल passwd फ़ाइल कॉपी करें-
हम *cp /etc/passwd /tmp/passwd.bak* चला सकते हैं। इससे शोषण चलाने से पहले और बाद में passwd फ़ाइल में अंतर की पहचान करने में मदद मिलेगी।
शोषण संकलित करना-
शोषण को सफलतापूर्वक संकलित करने के लिए, आपके पास GCC स्थापित होना चाहिए। आप *sudo apt-get install gcc* के साथ GCC स्थापित कर सकते हैं। शोषण को संकलित करने के लिए आप चला सकते हैं
सीमाएँ
इस शोषण की दो प्रमुख सीमाएँ हैं:
वर्तमान स्थिति और उपचार
2024-01-12 तक, अगले 30 दिनों में शोषण गतिविधि की संभावना 7.58% है (शोषण भविष्यवाणी स्कोरिंग सिस्टम (EPSS))। नीचे CVE-2022-0487 के लिए CVSS (कॉमन वल्नरेबिलिटी स्कोरिंग सिस्टम) दिया गया है:
यह कमजोरी 5.8 से नए किसी भी Linux कर्नेल पर शोषित की जा सकती है। हालाँकि, कमजोरी को Linux 5.16.11, 5.15.25 और 5.10.102 में ठीक किया गया है। इसलिए, हम कमजोरी को ठीक करने के लिए Linux वितरण अनुरक्षकों द्वारा प्रदान किए गए पैच या अपडेट को लागू कर सकते हैं। ऐसा करने के लिए, हम बस निम्नलिखित कमांड *sudo apt update* और *sudo apt upgrade* चला सकते हैं।
संदर्भ
*gcc exp.c -o exp*शोषण चलाना-
शोषण चलाने के लिए, प्रदान किए जाने वाले पैरामीटर केवल-पढ़ने योग्य फ़ाइल, ऑफ़सेट और कुछ अक्षर हैं जो डाले जाने वाले हैं। इस मामले में, हम *./exp /etc/passwd 1 ootz:* चलाएँगे। यदि आपको एक आउटपुट मिलता है जो कहता है "It worked !", तो इसका मतलब है कि हमने Dirty Pipe कमजोरी का सफलतापूर्वक शोषण कर लिया है और अब हम पासवर्ड के बिना रूट एक्सेस प्राप्त कर सकते हैं।
रूट एक्सेस पर स्विच करें-
अब हम बस *su rootz* चला सकते हैं और हमारे पास रूट एक्सेस होना चाहिए। पुष्टि करने के लिए हम id कमांड चला सकते हैं।