
CVE-2024-6769 के लिए तकनीकी राइटअप और PoC, जो DLL हाईजैकिंग को एक्टिवेशन कैश पॉइज़निंग के साथ जोड़कर Windows सिस्टम पर मीडियम से हाई इंटीग्रिटी तक विशेषाधिकार बढ़ाता है।
यह ब्लॉग दो श्रृंखलाबद्ध बगों के बारे में है: पहला चरण एक DLL हाइजैकिंग बग है जो ROOT ड्राइव के रीमैपिंग के कारण होता है और दूसरा चरण एक एक्टिवेशन कैश पॉइज़निंग बग है जो CSRSS सर्वर द्वारा प्रबंधित किया जाता है।
पहला चरण विस्तार से Ekoparty 2023 में प्रस्तुत किया गया था जिसका शीर्षक "I'm High" था निकोलस इकोनोमो द्वारा BlueFrost Security से। उन्होंने बताया कि कैसे उस भेद्यता का शोषण किया जाए, जिसे उस समय Microsoft द्वारा अभी तक पैच नहीं किया गया था। इसने MEDIUM INTEGRITY उपयोगकर्ता को सीमित HIGH PRIVILEGES तक बढ़ने की अनुमति दी, लेकिन पूर्ण प्रशासक बनने के लिए पूर्ण पहुंच के बिना।
दूसरा चरण उस सम्मेलन में प्रस्तुत नहीं किया गया था, हालांकि इस पर शोध शुरू करने के लिए कुछ कदम सुझाए गए थे।
शुरू करने के लिए, हम प्रारंभिक संदर्भ प्रदान करने के लिए पहले चरण की समीक्षा करेंगे। वहां से, हम दूसरे चरण पर अपने शोध में गोता लगाएंगे, सीमित HIGH INTEGRITY से पूर्ण प्रशासक तक पूर्ण वृद्धि प्राप्त करने के विवरण में जाएंगे। इसमें Windows के सभी संस्करणों के लिए दोनों चरणों का एक पूर्ण कार्यशील PoC शामिल है, जिसका Windows 10, Windows 11, Windows Server 2022, और Windows Server 2019 पर सभी अपडेट के साथ सफलतापूर्वक परीक्षण किया गया है।

इस चरण के लिए एकमात्र आवश्यकता यह है कि प्रारंभिक प्रक्रिया MEDIUM INTEGRITY LEVEL पर शुरू हो और उपयोगकर्ता प्रशासक समूह का सदस्य हो।
पहले चरण के शोषण को निम्नलिखित चरणों में संक्षेपित किया जा सकता है:
उदाहरण के लिए: डिस्क को रीमैप करना
"C:" से "C:\users\public"
इससे "system32" फ़ोल्डर भी रीमैप हो जाएगा
"C:\windows\system32" से "C:\users\public\windows\system32"
इन प्रभावित प्रोग्रामों में से एक है CTFMON, जो HIGH INTEGRITY LEVEL पर चलता है लेकिन प्रशासक विशेषाधिकारों के बिना।
सामान्यतः, यह वास्तविक system32 फ़ोल्डर से MsCtfMonitor.dll नामक मॉड्यूल को लोड करने का प्रयास करता है, लेकिन चूंकि ROOT ड्राइव रीमैप किया गया था, यह हमारे नकली नियंत्रित system32 में MsCtfMonitor.dll की तलाश करता है, जहाँ हम समान नाम से एक तैयार DLL बना और रख सकते हैं।
इस बिंदु पर, नकली system32 फ़ोल्डर में हमारे संस्करण MsCtfMonitor.dll को रखने से, इसका DoMsCtfMonitor फ़ंक्शन कॉल किया जाता है और HIGH INTEGRITY LEVEL पर हमारा कोड निष्पादित करता है।




उसी समय, हम पुष्टि कर सकते हैं कि प्रक्रिया, HIGH INTEGRITY LEVEL पर होने के बावजूद, प्रशासक विशेषाधिकार नहीं रखती है:


अपनी Ekoparty प्रस्तुति में, निकोलस ने शोषण को पूरा करने के लिए निम्नलिखित कदम सुझाए:


हालांकि यह सरल लगता है, इसके लिए रिवर्सिंग और डिबगिंग में बहुत समय लगता है।
इस अटैक वेक्टर कहानी में थोड़ा गहराई से जाने पर, यह स्पष्ट हो गया कि एक्टिवेशन कॉन्टेक्स्ट कैश के पॉइज़निंग का उपयोग कुछ एक्सप्लॉइट्स में किया गया है। परिणामस्वरूप, पहले से कैसे शोषण किया गया है, यह सीखना अतिरिक्त संदर्भ और अंतर्दृष्टि प्रदान करने के लिए सार्थक है। इस शोषण के बारे में विवरण Zero Day Initiative के राइटअप, Activation Context Cache Poisoning: Exploiting CSRSS for Privilege Escalation के माध्यम से उपलब्ध हैं।
एक्टिवेशन कैश का उपयोग तब होता है जब कोई प्रोग्राम एक विशिष्ट संस्करण की आवश्यकता वाली लाइब्रेरी लोड करने वाला होता है।
उदाहरण के लिए, यदि कोई एप्लिकेशन C:\Windows\System32\comctl32.dll लोड करने वाला है, तो इस बात की कोई गारंटी नहीं है कि उस स्थान पर comctl32.dll वह संस्करण है जिसकी एप्लिकेशन को आवश्यकता है। यह एक्टिवेशन कॉन्टेक्स्ट्स कैश का एक बुनियादी उपयोग मामला है। प्रोग्राम CSRSS सर्वर को कैश में एक नई एक्टिवेशन कॉन्टेक्स्ट एंट्री जोड़ने के लिए अनुरोध भेज सकता है, ताकि यह प्रोग्राम आवश्यक विशिष्ट लाइब्रेरी संस्करण लोड कर सके।
इस उद्देश्य के लिए तथाकथित मेनिफेस्ट का उपयोग किया जाता है, जो XML प्रारूप में होता है। यह आमतौर पर EXE या DLL फ़ाइल में एक संसाधन के रूप में एम्बेडेड होता है। वैकल्पिक रूप से, Windows प्रोग्राम के एक्सीक्यूटेबल के समान फ़ोल्डर में मेनिफेस्ट फ़ाइल की खोज करेगा।
ऊपर उल्लिखित URL में पुराने एक्सप्लॉइट्स द्वारा उपयोग किए गए मेनिफेस्ट फ़ाइलों के कुछ उदाहरण हैं, जैसे कि सिस्टम को PATH TRAVERSAL तकनीक के माध्यम से हमलावर द्वारा नियंत्रित निर्देशिका से लाइब्रेरी advapi32.dll लोड करने के लिए धोखा देना।

बेशक, कुछ उपयोग किए गए अटैक वेक्टर पैच किए गए थे, और कुछ नई तकनीकों की खोज की गई थी। इसके अतिरिक्त, अक्टूबर 2022 के Windows 11 22H2 के पैच में, एक नया चेक जोड़ा गया था।
इस पैच को लागू करने के बाद, जब एक्टिवेशन कॉन्टेक्स्ट (ACTX) पंजीकृत होता है, तो चेक केवल तभी बायपास किया जा सकता है जब कैश में नई एंट्री जोड़ने वाली प्रक्रिया का RID उस प्रक्रिया के समान या उससे अधिक हो जो इसका उपयोग करेगी।
winnt.h में हम RID मान देख सकते हैं:

इस चेक को बायपास करने का प्रस्ताव CTFMON प्रक्रिया से एक एक्टिवेशन कॉन्टेक्स्ट के साथ अनुरोध बनाना है जहाँ तैयार DLL चलता है। इस तैयार DLL का RID=0x3000 है और एंट्री को कैश में जोड़ने के बाद, TCMSETUP जिसका RID=0x3000 है, tapi32.dll लोड करेगा।
कदमों का पालन करने के अपने प्रयास के दौरान, मैंने CreateActCtx का उपयोग करके ACTX को पंजीकृत करने के लिए सभी संभव संयोजन बनाए। यह असंभव साबित हुआ क्योंकि हमेशा एक चेक था जो इसे टालता था।