
CVE-2020-0796 के माध्यम से बफर ओवरफ्लो ट्रिगर करने के लिए PoC
./CVE-2020-0796.py सर्वरनाम
यह स्क्रिप्ट लक्ष्य होस्ट से कनेक्ट होती है, और प्रमाणीकरण अनुरोध को ट्रांसफॉर्मेशन हेडर में सेट किए गए खराब ऑफसेट फील्ड के साथ संपीड़ित करती है, जिससे डीकंप्रेसर बफर ओवरफ्लो हो जाता है और लक्ष्य क्रैश हो जाता है।
इसमें उत्कृष्ट smbprotocol का एक संशोधन शामिल है जिसमें SMB 3.1.1 संपीड़न/डीकंप्रेशन (केवल LZNT1) के लिए समर्थन जोड़ा गया है। अधिकांश परिवर्धन smbprotocol/connection.py में हैं। lznt1 का एक संस्करण शामिल है, जिसे Python 3 का समर्थन करने के लिए संशोधित किया गया है।
संपीड़न ट्रांसफॉर्म हेडर वहाँ SMB2CompressionTransformHeader वर्ग में है। फ़ंक्शन _compress को ट्री अनुरोधों को संपीड़ित करने के लिए बुलाया जाता है। यहीं पर ऑफसेट फील्ड को क्रैश ट्रिगर करने के लिए सभी उच्च सेट किया जाता है।
def _compress(self, b_data, session):
header = SMB2CompressionTransformHeader()
header['original_size'] = len(b_data)
header['offset'] = 4294967295
header['data'] = smbprotocol.lznt1.compress(b_data)
CVE-2020-0796 Windows 10 1903/1909 की नई SMB3 संपीड़न क्षमता में एक बग है। SMB प्रोटोकॉल संस्करण 3.1.1 क्लाइंट या सर्वर को संपीड़न क्षमताओं का विज्ञापन करने और आवश्यकतानुसार SMB3 संदेशों को चुनिंदा रूप से संपीड़ित करने की क्षमता प्रस्तुत करता है। इसे प्राप्त करने के लिए, SMB सत्र पर बातचीत करते समय, क्लाइंट और सर्वर दोनों को MS-SMB2 2.2.3.1.3 में दस्तावेजित SMB2_COMPRESSION_CAPABILITIES शामिल करना होगा।
एक बार इस क्षमता के साथ सत्र पर बातचीत हो जाने के बाद, या तो क्लाइंट या सर्वर कुछ SMB संदेशों को चुनिंदा रूप से संपीड़ित कर सकता है। ऐसा करने के लिए, पूरे SMB पैकेट को संपीड़ित किया जाता है, और MS-SMB2 2.2.42 में दस्तावेजित अनुसार एक ट्रांसफॉर्मेड हेडर प्रीपेंड किया जाता है। यह हेडर एक छोटी (16 बाइट्स) संरचना है जिसमें एक मैजिक मान, असम्पीड़ित डेटा का आकार, उपयोग किया गया संपीड़न एल्गोरिदम और एक ऑफसेट मान होता है।
CVE-2020-0796 उस ऑफसेट आकार में सीमा जांच की कमी के कारण होता है, जो सीधे कई उप-रूटीनों को पास किया जाता है। इसमें एक बड़ा मान पास करने से बफर ओवरफ्लो होगा और कर्नेल क्रैश हो जाएगा। आगे के काम के साथ, इसे RCE शोषण में विकसित किया जा सकता है।