
CVE-2020-27949 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो macOS प्रक्रियाओं में DTrace fasttrap ioctl के माध्यम से बिना ऊंची अनुमतियों के मनमाना मेमोरी रीड/राइट प्रदर्शित करता है।
/dev/fasttrap का उपयोग करके अन्य प्रक्रियाओं की मेमोरी पढ़ना और लिखना/dev/fasttrap उपकरण, जो pid और objc प्रदाताओं के लिए यूज़र-स्पेस प्रक्रियाओं में ट्रैप नोड बनाने के लिए है, की अनुमतियाँ 666 हैं। /dev/dtrace के विपरीत, जो भी 666 है, fasttrap में अनुमति जाँच का अभाव है। यह किसी भी प्रक्रिया को FASTTRAPIOC_MAKEPROBE या FASTTRAPIOC_GETINSTR ioctl जारी करने की अनुमति देता है।
एक हमलावर FASTTRAPIOC_MAKEPROBE का उपयोग करके किसी भी अन्य प्रक्रिया में किसी भी मेमोरी स्थान पर प्रोब बना सकता है। इन प्रोबों के सक्रिय होने पर, निर्दिष्ट मेमोरी स्थान पर मान को ट्रैप निर्देश (x86 पर 0xCC)) से बदल दिया जाता है और मूल मान को एक छाया मेमोरी में रखा जाता है। मूल मान को पुनः प्राप्त करना FASTTRAPIOC_GETINSTR` ioctl से संभव है। यह हमलावर को कई ट्रैप लगाकर किसी अन्य प्रक्रिया की मनमानी मेमोरी पढ़ने की अनुमति देता है।
इस कमजोरी को CVE-2020-27949 के रूप में ट्रैक किया गया है, macOS Big Sur 11.1, Security Update 2020-001 Catalina, Security Update 2020-007 Mojave में ठीक किया गया।
x86 पर 0xCC`)) लिख सकता है। रूट के रूप में चल रही प्रक्रियाओं को भी मेमोरी लिखना संभव है। अन्य निर्देशों या जंप पतों के भाग के रूप में, पीड़ित के नियंत्रण प्रवाह को बदला जा सकता है, जिससे विशेषाधिकारों का उन्नयन संभव हो सकता है।एक उपयोगकर्ता के रूप में, मैं उम्मीद करता हूँ कि DTrace को सक्षम करने से केवल रूट अनुमतियों वाली प्रक्रियाओं को अन्य प्रक्रियाओं को ट्रेस, इंस्ट्रूमेंट या संशोधित करने की अनुमति मिलेगी। DTrace प्रशासनिक कार्यों के लिए एक मूल्यवान उपकरण है जो dtruss, iotop आदि जैसे उपकरण प्रदान करता है।
हमारा पीड़ित (target) एक निष्पादन योग्य है जो रूट के रूप में चल रहा है। हमलावर (memaccess) एक निष्पादन योग्य है जो सामान्य उपयोगकर्ता अनुमतियों के साथ चल रहा है। ट्रेसिंग स्क्रिप्ट libc_monitor.d libsystem_c.dylib शेयर्ड ऑब्जेक्ट में फ़ंक्शनों के कॉल की संख्या रिकॉर्ड करती है (यह मशीन मालिक द्वारा चलाए जाने वाले एक प्रशासनिक स्क्रिप्ट का एक सरल उदाहरण है)।
libc_monitor.d)।FASTTRAPIOC_GETINSTR का उपयोग करता है।चरण 4 पीड़ित प्रक्रिया में मेमोरी को ट्रैप निर्देश मान से बदल देता है। एप्लिकेशन के आधार पर, एक हमलावर इसका उपयोग एक महत्वपूर्ण मेमोरी स्थान पर पहले से ज्ञात मान लिखने के लिए कर सकता है। उदाहरण के लिए, हमलावर RNG के बीज को नियंत्रित कर सकता है या किसी प्रक्रिया में क्रिप्टोग्राफ़िक कुंजियों को बदल सकता है।
नोट: हमलावर को कभी भी उन्नत या रूट अनुमतियों की आवश्यकता नहीं होती है।
नोट 2: स्व-लिखित DTrace स्क्रिप्ट की आवश्यकता नहीं है। उदाहरण के लिए, dapptrace भी किसी भी फ़ंक्शन को ट्रेस करने के लिए pid प्रदाता का उपयोग करता है।
/dev/fasttrap में /dev/dtrace की तरह विशेषाधिकार जाँच लागू करें या विश्व-लेखन योग्य अनुमति हटा दें।
नोट: हमने जारी किए गए सुधार की जाँच नहीं की।
target चलाएँ और स्क्रीन पर दिए गए निर्देशों का पालन करें