
CVE-2017-0037 का तकनीकी विश्लेषण, एक माइक्रोसॉफ्ट ब्राउज़र मेमोरी भ्रष्टाचार भेद्यता जो CSS/JS हैंडलिंग में टाइप कन्फ्यूज़न के माध्यम से रिमोट कोड निष्पादन को सक्षम बनाती है, जिसमें PoC शोषण विवरण और शमन रणनीतियाँ शामिल हैं।
CVE-2017-0037 (माइक्रोसॉफ्ट ब्राउज़र मेमोरी भ्रष्टाचार भेद्यता)
यह दस्तावेज़ CVE-2017-0037- माइक्रोसॉफ्ट ब्राउज़र मेमोरी भ्रष्टाचार भेद्यता के बारे में है। इसमें पहले रिमोट कोड निष्पादन (RCE) क्या है, इसका परिचय दिया जाएगा और फिर कुछ तकनीकी विवरणों पर चर्चा की जाएगी।
रिमोट कोड निष्पादन क्या है?
एक साइबर-हमला जिसमें हमलावर किसी दूसरे कंप्यूटर पर दूरस्थ रूप से कमांड निष्पादित कर सकता है, उसे रिमोट कोड निष्पादन (RCE) कहा जाता है। रिमोट कोड निष्पादन (RCE) अक्सर होस्ट द्वारा डाउनलोड किए गए हानिकारक सॉफ़्टवेयर के कारण होते हैं और सिस्टम के स्थान से स्वतंत्र रूप से हो सकते हैं।
RCE प्राप्त करने के लिए, निम्नलिखित तरीकों का उपयोग किया जा सकता है-
इंजेक्शन हमले: यहाँ, हमलावर गलत इनपुट प्रदान करता है ताकि उसका एक हिस्सा कमांड के भाग के रूप में संसाधित हो।
डिसीरियलाइज़ेशन हमले: डिसीरियलाइज़ेशन प्रोग्राम सीरियलाइज़्ड डेटा के अंदर सावधानीपूर्वक तैयार किए गए उपयोगकर्ता इनपुट को निष्पादन योग्य कोड के रूप में पढ़ सकता है।
सीमा-बाहर लेखन: यदि मेमोरी आवंटन खराब तरीके से किया जाता है, तो हमलावर एक इनपुट बना सकता है जो आवंटित बफर से आगे चला जाता है। चूंकि निष्पादन योग्य कोड भी मेमोरी में रखा जाता है, प्रोग्राम उपयोगकर्ता द्वारा प्रदान किए गए डेटा को चला सकता है यदि वह सही स्थान पर लिखा गया हो।
टाइप कन्फ्यूज़न हमला: टाइप कन्फ्यूज़न का खतरा तब होता है जब स्रोत कोड उसे प्रदान की गई इकाई की प्रामाणिकता को सत्यापित करने के लिए कोई कार्रवाई नहीं करता। क्योंकि टाइप कन्फ्यूज़न एक हैकर को कोड तस्करी करने की अनुमति देता है जो केवल ऑब्जेक्ट प्रकारों में विसंगति पैदा करके यादृच्छिक निर्देश चला सकता है, यह जोखिमपूर्ण है।
RCE हमले का निष्पादन
RCE हमले का क्रम निष्पादित करना सरल है। पहले, खतरा अभिनेता इंटरनेट पर सामान्य कमजोरियों की खोज करता है जिनका एक प्रभावी हमले में शोषण किया जा सकता है। एक विशेष भेद्यता की पहचान करने के बाद, हैकर एक्सप्लॉइट का उपयोग करके पहुँच प्राप्त करता है। अब जब उन्होंने पहुँच प्राप्त कर ली है, तो वे अपने उद्देश्यों को पूरा करने के लिए दुर्भावनापूर्ण स्क्रिप्ट का उपयोग कर सकते हैं, जिसमें डेटा चोरी, मनी लॉन्ड्रिंग, व्यापक निगरानी और सेवा व्यवधान शामिल हैं।
लक्षित एप्लिकेशन की भाषा का उपयोग अक्सर कोड इंजेक्ट करने के लिए किया जाता है। फिर भाषा को सर्वर-साइड प्रोसेसर द्वारा निष्पादित किया जाता है। Python, Java, Perl, Ruby और PHP सामान्य प्रोग्रामिंग भाषाएँ हैं। कोड इंजेक्शन उन प्लेटफ़ॉर्म पर आम है जो तुरंत असत्यापित इनपुट का विश्लेषण करते हैं। सार्वजनिक ऑनलाइन ऐप्स, वास्तव में, हैकर्स के लिए एक बड़ा फोकस हैं।
दुर्भावनापूर्ण स्क्रिप्ट आमतौर पर bash स्क्रिप्ट द्वारा निष्पादित की जाती है। bash स्क्रिप्ट एक टेक्स्ट दस्तावेज़ है जिसमें वे कमांड शामिल होते हैं जो सामान्यतः कमांड प्रॉम्प्ट में टाइप किए जाते हैं। bash स्क्रिप्ट शामिल कमांड को सही ढंग से काम करने में सक्षम बनाती है। उनके साथ ".sh" जोड़ना प्रथागत है, हालाँकि इसकी आवश्यकता नहीं है। पैकेजिंग के बाद, हैकर कोड को एक संवेदनशील ऐप में डालता है, जो फिर इसे चलाता है। एप्लिकेशन कर्नेल को इसे चलाने का निर्णय भी दे सकता है।
हमले के मीट्रिक
निम्नलिखित छवि CVE-2017-0037 के आधार स्कोर मीट्रिक पर केंद्रित है।

यहाँ CVSS रेटिंग स्कोर 8.1 (उच्च) है।
हमला वेक्टर- यहाँ कमजोर घटक नेटवर्क स्टैक से जुड़ा है, और संभावित हैकर्स की सीमा में अन्य विकल्पों से लेकर पूरे इंटरनेट तक सब कुछ शामिल है।
इस भेद्यता की हमला जटिलता उच्च है, अर्थात हमले की सफलता हमलावर के अधिकार क्षेत्र से बाहर की परिस्थितियों पर निर्भर करती है। इसलिए, हमला इच्छानुसार पूरा नहीं किया जा सकता, बल्कि हमलावर को प्रभावी होने की उम्मीद करने से पहले संवेदनशील तत्व के खिलाफ योजना या कार्यान्वयन में एक सार्थक स्तर का प्रयास करने की आवश्यकता होती है।
गोपनीयता मान यहाँ उच्च है जिसका अर्थ है गोपनीयता का पूर्ण नुकसान, जिसके परिणामस्वरूप हमलावर को क्षतिग्रस्त घटक के अंदर सभी संसाधनों तक पहुँच प्राप्त होती है।
अखंडता उच्च है जिसका अर्थ है अखंडता और सुरक्षा का गंभीर नुकसान।
उपलब्धता उच्च है जिसका अर्थ है उपलब्धता का पूर्ण नुकसान, जो हमलावर को प्रभावित घटक के संसाधनों तक पहुँच को पूरी तरह से प्रतिबंधित करने की अनुमति देता है।
हमले का विवरण
CVE-2017-0037 भेद्यता एक टाइप-कन्फ्यूज़न दोष था जो Microsoft Edge और Internet Explorer 10 और 11 में मौजूद था। इसने हमलावरों को लक्षित मशीन पर दूरस्थ रूप से कोड निष्पादित करने की अनुमति दी जब उपयोगकर्ता एक दुर्भावनापूर्ण वेबसाइट पर गया।
दोष को Google शोधकर्ता Ivan Frantic ने इंगित किया था और भेद्यता के विवरण Google द्वारा जारी किए गए थे क्योंकि Microsoft अपनी 90-दिवसीय प्रकटीकरण अवधि के भीतर इसे ठीक करने में असमर्थ था।

शोधकर्ता द्वारा प्रकाशित प्रूफ-ऑफ-कॉन्सेप्ट (PoC) एक्सप्लॉइट से पता चलता है कि यह Edge और IE को क्रैश कर सकता है, जिससे हमलावर दूरस्थ रूप से कोड निष्पादित कर सकता है और समझौता किए गए सिस्टम के प्रशासक विशेषाधिकार प्राप्त कर सकता है। उन्होंने यह भी पुष्टि की कि हमला Windows Server 2012 R2 पर Internet Explorer के 64-बिट संस्करण पर काम करता था और इसने 32-बिट IE 11 के साथ-साथ Microsoft Edge को भी प्रभावित किया।
टाइप कन्फ्यूज़न mshtml.dll में
Layout::MultiColumnBoxBuilder::HandleColumnBreakOnColumnSpanningElemnt फ़ंक्शन में है। दूरस्थ रूप से मनमाना कोड निष्पादित करके, कैस्केडिंग स्टाइल शीट्स (CSS) टोकन अनुक्रम और तैयार किए गए जावास्क्रिप्ट कोड के माध्यम से जो TH तत्व पर काम करते हैं, हमला हो सकता है।
Google Project Zero के Ivan Fratric द्वारा PoC

जैसा कि शोधकर्ता Ivan Frantic ने कहा, PoC MSHTML!Layout::MultiColumnBoxBuilder::HandleColumnBreakOnColumnSpanningElement में क्रैश होता है जब पता 0000007800000070 से पढ़ता है।


क्रैश के बिंदु के आसपास कोड का विश्लेषण करके, यह देखा जा सकता है कि मेमोरी पते 00007ffe`8f330a51 पर, रजिस्टर rbp से सामग्री रजिस्टर rcx में पढ़ी जाती है। फिर
MSHTML!Layout::Patchable<Layout::PatchableArrayData<Layout::MultiColumnBox::SMultiColumnBoxItem> >::Readable का कॉल rax को मान प्रदान करता है (यह फ़ंक्शन से वापसी मान संग्रहीत करने के लिए एक निर्दिष्ट रजिस्टर है)।
हालाँकि rcx को एक अन्य ऑब्जेक्ट प्रकार की ओर इंगित करना चाहिए, लेकिन ऊपर दिखाए गए PoC में, यह Array<Math::SLayoutMeasure>::Create में आवंटित 32-बिट पूर्णांकों की एक सरणी की ओर इंगित करता है। तालिका स्तंभों के ऑफ़सेट उस सरणी में संग्रहीत होते हैं और एक हमलावर इस पर नियंत्रण ले सकता है। क्रैश 00007ffe`8f330a59 पर होता है क्योंकि rax अप्रारंभीकृत मेमोरी की ओर इंगित करता है। rax फ़ंक्शन
MSHTML!Layout::Patchable<Layout::PatchableArrayData<Layout::MultiColumnBox::SMultiColumnBoxItem> >::Readable का वापसी मान संग्रहीत करता है जो एक अप्रारंभीकृत मेमोरी पता है। हमलावर rax को कुछ मेमोरी स्थान पर इंगित कर सकता है जिसे वे नियंत्रित कर सकते हैं। हमलावर rax पर नियंत्रण प्राप्त करने के लिए तालिका गुणों जैसे बॉर्डर-स्पेसिंग और पहले TH तत्व की चौड़ाई को संशोधित कर सकता है।

यदि हमलावर पंक्ति 00007ffe`8f330a59 पर rax पर नियंत्रण प्राप्त करने में सक्षम है, तो फ़ंक्शन