
Windows 10 Diagnostics Hub Standard Collector Service में विशेषाधिकार वृद्धि के लिए PoC
विंडोज 10 Diagnostics Hub Standard Collector Service में विशेषाधिकार वृद्धि के लिए PoC
Diagnostics Hub Packaging लाइब्रेरी, जिसका उपयोग Windows Standard Collector Service द्वारा किया जाता है, को एक मनमानी फ़ाइल को एक मनमाने स्थान पर कॉपी करने के लिए मजबूर किया जा सकता है, क्योंकि DiagnosticsHub.StandardCollector.Runtime.dll में क्लाइंट प्रतिरूपण का अभाव है।
यहाँ एक विस्तृत लेख है कि कैसे यह भेद्यता पाई गई और उसका शोषण किया गया: Windows Standard Collector Service में विशेषाधिकार वृद्धि भेद्यता.
Standard Collector Service डायग्नोस्टिक्स सत्र को कॉन्फ़िगर करते समय कई मान परिभाषित करने की अनुमति देती है, जिसमें स्क्रैच निर्देशिका और सत्र आईडी शामिल हैं। सत्र आईडी कोई भी GUID हो सकती है और स्क्रैच निर्देशिका वह कोई भी स्थान हो सकता है जहाँ उपयोगकर्ता के पास लिखने की अनुमति है। यदि संग्रह सत्र को c13851b2-b1e1-438f-bf73-949df897f1bf आईडी और C:\Users\Bob\AppData\Local\Temp\Microsoft\F12\perftools\visualprofiler\ स्क्रैच पथ के साथ कॉन्फ़िगर किया गया है, तो ICollectionSession ऑब्जेक्ट की GetCurrentResult विधि को कॉल करते समय निम्नलिखित घटनाएँ घटित होती हैं:
C:\Users\Bob\AppData\Local\Temp\Microsoft\F12\perftools\visualprofiler\c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etlC:\Users\Bob\AppData\Local\Temp\Microsoft\F12\perftools\visualprofiler\Report.c13851b2-b1e1-438f-bf73-949df897f1bf.1C:\Users\Bob\AppData\Local\Temp\Microsoft\F12\perftools\visualprofiler\Report.c13851b2-b1e1-438f-bf73-949df897f1bf.1\EAD6A227-31D4-4EA2-94A9-5DF276F69E65ये फ़ोल्डर और ETL फ़ाइलें .diagsession पैकेज के लिए कलेक्टर सेवा द्वारा बनाई जाती हैं जो सामान्यतः तब बनती है जब कोई सत्र समाप्त हो जाता है। ICollectionSession ऑब्जेक्ट पर Stop विधि को कॉल करने से कलेक्टर सेवा Microsoft::DiagnosticsHub::Packaging::DhPackageDirectory::CommitPackage को कॉल करके डायग्नोस्टिक्स पैकेज को प्रतिबद्ध करेगी। CommitPackage फ़ंक्शन मूल {scratch path}\c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl फ़ाइल को यादृच्छिक GUID फ़ोल्डर में कॉपी या स्थानांतरित करेगा: {scratch path}\Report.c13851b2-b1e1-438f-bf73-949df897f1bf.1\EAD6A227-31D4-4EA2-94A9-5DF276F69E65\c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl
DiagnosticsHub.StandardCollector.Runtime.dll में CommitPackagingResult फ़ंक्शन द्वारा ट्रिगर की गई कॉपी/मूव ऑपरेशन, उपयोगकर्ता का प्रतिरूपण किए बिना किया जाता है (प्रारंभिक फ़ाइल/फ़ोल्डर निर्माण के विपरीत), जिससे एक संभावित TOCTOU समस्या उत्पन्न होती है यदि लक्ष्य फ़ोल्डर को एक माउंट पॉइंट से बदल दिया जाता है जो कॉपी को एक मनमाने स्थान पर पुनर्निर्देशित करता है। इस समस्या का उपयोगी तरीके से शोषण करने के लिए, एक हमलावर को ETL फ़ाइल की सामग्री को कॉपी किए जाने से पहले बदलना होगा। यह सेवा द्वारा फ़ाइल हैंडल जारी करने के बाद OpLock के साथ रेस कंडीशन को मात देकर किया जा सकता है।
हालाँकि हम कॉपी की जाने वाली .etl फ़ाइल के नाम को पूरी तरह से नियंत्रित नहीं करते हैं, हम इसे नियंत्रित करने के लिए ऑब्जेक्ट डायरेक्टरी सिमलिंक ट्रिक का उपयोग कर सकते हैं। माउंट पॉइंट+सिमलिंक सेटअप कुछ इस प्रकार होगा:
{scratch path}\Report.c13851b2-b1e1-438f-bf73-949df897f1bf.1\EAD6A227-31D4-4EA2-94A9-5DF276F69E65\ -> \RPC Control\\RPC Control\c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl -> C:\Windows\System32\anything.dllफ़ाइल सामग्री, कॉपी स्थान और फ़ाइल नाम पर नियंत्रण होने से एक हमलावर को कई DLL लोडिंग संभावनाएँ मिलती हैं। हालाँकि, शामिल PoC यह प्रदर्शित करता है कि फ़ाइल नाम के नियंत्रण की आवश्यकता नहीं है, क्योंकि कलेक्टर सेवा किसी भी फ़ाइल नाम के साथ एक DLL को खुशी-खुशी लोड करती है, जब तक वह C:\Windows\System32 या C:\Windows\System32\DiagSvcs निर्देशिका में हो। यह कॉपी किए गए DLL c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl के नाम से मेल खाने वाले असेंबली नाम वाले एजेंट के साथ एक नया कलेक्टर सत्र शुरू करके किया जाता है।
शामिल PoC एक VS समाधान है जिसमें notepad.exe पॉपिंग पेलोड के लिए एक C++ DLL प्रोजेक्ट और सेवा के साथ इंटरैक्ट करने और NtApiDotNet लाइब्रेरी के साथ भेद्यता का शोषण करने के लिए एक C# प्रोजेक्ट शामिल है।
पुनरुत्पादन के चरण:
अपेक्षित परिणाम:
पैकेज कमिट ऑपरेशन उपयोगकर्ता का प्रतिरूपण करता है और फ़ाइल को कॉपी करने का प्रयास करने पर विफल हो जाता है।
देखा गया परिणाम:
फ़ाइल को माउंट पॉइंट लक्ष्य फ़ोल्डर C:\Windows\System32 में कॉपी किया जाता है, फिर कलेक्टर एजेंट के रूप में लोड किया जाता है, और अंत में, notepad.exe को SYSTEM विशेषाधिकारों के रूप में प्रारंभ किया जाता है।