
RPC लाइब्रेरी में रिमोट कोड एक्जीक्यूशन शोषण
CVE-2022-26809 - विंडोज के एक मुख्य घटक (RPC) में कमजोरी ने CVSS स्कोर 9.8 अर्जित किया है, यह बिना कारण नहीं है, क्योंकि हमले के लिए प्रमाणीकरण की आवश्यकता नहीं है और इसे नेटवर्क पर दूरस्थ रूप से निष्पादित किया जा सकता है, और इसका परिणाम RPC सेवा के विशेषाधिकारों के साथ दूरस्थ कोड निष्पादन (RCE) हो सकता है, जो RPC रनटाइम होस्ट करने वाली प्रक्रिया पर निर्भर करता है। यह गंभीर बग, थोड़ी किस्मत से, SMB चलाने वाले अप्रकाशित विंडोज होस्ट तक पहुंच प्राप्त करने की अनुमति देता है। इस भेद्यता का शोषण नेटवर्क के बाहर से उसमें सेंध लगाने के लिए और साथ ही नेटवर्क में मशीनों के बीच भी किया जा सकता है।
CVE में कहा गया है कि भेद्यताएं Windows RPC रनटाइम के भीतर हैं, जो rpcrt4.dll नामक लाइब्रेरी में कार्यान्वित है। यह रनटाइम लाइब्रेरी RPC प्रोटोकॉल का उपयोग करने वाले क्लाइंट और सर्वर दोनों प्रक्रियाओं में लोड होती है। हमने संस्करण 10.0.22000.434 (मार्च) और 10.0.22000.613 (पैच किया हुआ) की तुलना की और परिवर्तनों की सूची तैयार की।
फंक्शन OSF_SCALL::ProcessResponse और OSF_CCALL::ProcessReceivedPDU प्रकृति में समान हैं; दोनों RPC पैकेट प्रोसेस करते हैं, लेकिन एक सर्वर साइड पर चलता है और दूसरा क्लाइंट साइड पर (SCALL और CCALL)। OSF_SCALL::ProcessReceivedPDU का डिफ करने पर हमने देखा कि नए संस्करण में दो कोड ब्लॉक जोड़े गए थे।


पैच किए गए कोड को देखने पर, हमने देखा कि QUEUE::PutOnQueue के बाद एक नया फंक्शन कॉल किया गया था। नए फंक्शन की जांच करने और उसके कोड में गहराई से जाने पर, हमने पाया कि यह इंटीजर ओवरफ्लो की जांच करता है। दूसरे शब्दों में, पैच में नया फंक्शन यह सत्यापित करने के लिए जोड़ा गया था कि एक इंटीजर वेरिएबल अपेक्षित मान सीमा के भीतर रहे।

OSF_SCALL:GetCoalescedBuffer में कमजोर कोड में गहराई से जाने पर, हमने देखा कि इंटीजर ओवरफ्लो बग हीप बफर ओवरफ्लो का कारण बन सकता है, जहां डेटा को एक बफर पर कॉपी किया जाता है जो उसे भरने के लिए बहुत छोटा होता है। यह बदले में डेटा को बफर की सीमा से बाहर, हीप पर लिखने की अनुमति देता है। जब इसका शोषण किया जाता है, तो यह प्रिमिटिव हमें दूरस्थ कोड निष्पादन की ओर ले जाता है!
इंटीजर ओवरफ्लो की जांच करने के लिए एक ही कॉल अन्य फंक्शन में भी जोड़ा गया था:
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
इंटीजर ओवरफ्लो भेद्यता और इसे रोकने वाला फंक्शन क्लाइंट-साइड और सर्वर-साइड दोनों एक्जीक्यूशन फ्लो में मौजूद हैं।
अभी भी विकासाधीन, कोई ETA नहीं।