
Xlight SFTP सर्वर में पूर्व-प्रमाणीकरण हीप ओवरफ्लो <= 3.9.4.2
Xlight 32 और 64-बिट संस्करण <= 3.9.4.2
Xlight SFTP तक पहुंच रखने वाला एक अप्रमाणित हमलावर कोड निष्पादन प्राप्त कर सकता है या सेवा से वंचित कर सकता है।
SFTP प्रोटोकॉल में वायर पर भेजे गए स्ट्रिंग्स चार बाइट लंबाई के साथ उपसर्गित होते हैं। Xlight द्वारा नेटवर्क पैकेट से इन स्ट्रिंग्स को पढ़ने के लिए उपयोग किया जाने वाला फंक्शन लंबाई को मान्य करते समय और आवश्यक मेमोरी आवंटित करते समय एक पूर्णांक ओवरफ्लो रखता है। किसी स्ट्रिंग के लिए चार बाइट लंबाई तैयार करके हम हमलावर-नियंत्रित बफर से हीप पर एक बड़ा memmove (~4GB) आउट-ऑफ-बाउंड्स ट्रिगर कर सकते हैं।
यह कमजोर फंक्शन SSH हैंडशेक के दौरान स्ट्रिंग्स प्राप्त करने के लिए उपयोग किया जाता है, जिसमें प्री-ऑथेंटिकेशन भी शामिल है जब क्लाइंट से समर्थित एल्गोरिदम, सिफर सूट और उपयोगकर्ता नाम और पासवर्ड प्राप्त किए जाते हैं। हम एक्सप्लॉइट को ट्रिगर करने के लिए तैयार लंबाई के साथ इनमें से किसी भी स्ट्रिंग को लक्षित कर सकते हैं।
इसे ट्रिगर करना आसान है लेकिन शोषण की सरलता Xlight बाइनरी की बिटनेस पर निर्भर करती है।
32-बिट पर कॉपी हीप के अंत से बाहर चली जाएगी, प्रक्रिया में सब कुछ नष्ट कर देगी, क्रैश होने से पहले। यह संभव है कि हीप पर एक आसन्न संरचना को दूषित किया जा सके और इस सर्वर के मल्टी-थ्रेडेड स्वभाव का उपयोग करके दूषित डेटा तक पहुंच प्राप्त की जा सके, इससे पहले कि जंगली कॉपी प्रक्रिया को क्रैश कर दे।
64-बिट पर हम OOB राइट प्राप्त नहीं कर सकते, क्योंकि मेमोरी आवंटन कॉल का size argument size_t है (अर्थात 64-बिट के लिए संकलित होने पर 64-बिट चौड़ा), जिसका अर्थ है कि हम दो 32-बिट पूर्णांकों के जोड़ से इस मान को ओवरफ्लो नहीं कर सकते, और इसके बजाय हम एक बड़ा ~4GB बफर आवंटित करते हैं। इस बग के परिणामस्वरूप इसके बजाय OOB रीड होता है, जो प्रक्रिया को क्रैश कर देता है।