
Acronis मनमानी फ़ाइल रीड के लिए PoC - CVE-2022-45451
एक्रोनिस का "ngscan" एंटी-मैलवेयर स्कैन ड्राइवर फ़िल्टर संचार पोर्ट पर रखे गए गलत/अनुचित एक्सेस नियंत्रण से ग्रस्त है। मिनीफ़िल्टर ड्राइवर निम्नलिखित सुविधाओं का समर्थन करता है जिनका शोषण किया जा सकता है:
ngscan.sys ड्राइवर का विश्लेषण Ida Pro के साथ ड्राइवर को डीकंपाइल करके शुरू हुआ। शोधकर्ता ने नोट किया कि जबकि एक डिवाइस ऑब्जेक्ट बनाया गया था, DeviceIoControl का उपयोग करके ड्राइवर के साथ इंटरैक्ट करने के लिए कोई सिमलिंक नहीं बनाया गया था।
इस प्रकार, विश्लेषण फ़िल्टर संचार पोर्ट क्षमताओं का अवलोकन करके जारी रहा।
आरंभीकरण के दौरान, ड्राइवर अन्य प्रक्रियाओं से इंटरैक्शन का समर्थन करने के लिए पाँच (5) संचार पोर्ट बनाता है।

चित्र 1: पाँच (5) तक फ़िल्टर संचार पोर्ट (FCP) बनाने का समर्थन करने वाली रूटीन
यह फ़ंक्शन कॉल किया जाता देखा गया, प्रत्येक 5 FCP को डिफ़ॉल्ट dacl के साथ आरंभ करता है, अंतिम FCP को NULL dacl के साथ बनाया गया।

चित्र 2: डिफ़ॉल्ट/NULL DACL के साथ FCP निर्माण
विश्लेषण फ़िल्टर ड्राइवर द्वारा निर्दिष्ट CreateNotifyCallback और MessageNotifyCallback फ़ंक्शन का अवलोकन करके जारी रहा। ये कॉलबैक फ़ंक्शन तब लागू होते हैं जब कोई प्रक्रिया कनेक्शन खोलती है और संचार पोर्ट पर एक संदेश भेजती है।

MessageNotifyCallback के प्रारंभिक निरीक्षण से पता चला कि आने वाले संदेश के बफ़र को निम्नलिखित आवश्यकताओं को पूरा करना होगा:
एक बार जाँच पास हो जाने के बाद, InputBuffer से एक फ़ंक्शन नंबर पार्स किया जाता है और इसका उपयोग निम्नलिखित switch मामलों में यह चुनने के लिए किया जाता है कि प्रदान किए गए इनपुट के साथ कौन सा फ़ंक्शन निष्पादित किया जाए।

चित्र 3: MessageNotifyCallback द्वारा समर्थित फ़ंक्शन का उपसमुच्चय
समर्थित प्रत्येक फ़ंक्शन का निरीक्षण करने पर संभावित दुरुपयोग के लिए दो रुचिकर फ़ंक्शन दिखाई दिए जो मनमाना फ़ाइल पढ़ने की ओर ले जाते हैं।

चित्र 4: स्कैन संदर्भ बनाने और स्कैन संदर्भ की फ़ाइल हैंडल लौटाने का समर्थन करने वाले फ़ंक्शन (पंक्तियाँ 206, 233)
हालांकि "स्कैन संदर्भ" की सटीक कार्यक्षमता पूरी तरह से ज्ञात नहीं है, विश्लेषण से पता चला है कि उपयोगकर्ता InputBuffer में निर्दिष्ट किसी भी फ़ाइल के लिए एक फ़ाइल स्कैन संदर्भ बनाया जा सकता है। एक बार स्कैन संदर्भ बन जाने के बाद, स्कैन संदर्भ आईडी आउटपुट बफ़र में उपयोगकर्ता को वापस कर दी जाती है।

चित्र 5: स्कैन संदर्भ डेटा उपयोगकर्ता को वापस करने वाली स्कैन संदर्भ बनाने की रूटीन

चित्र 6: संरक्षित SAM रजिस्ट्री फ़ाइल (\??\C:\Windows\System32\config\SAM) तक पहुंच का अनुरोध करने वाले मिनीफ़िल्टर ड्राइवर को भेजा गया डेटा

चित्र 7: मिनीफ़िल्टर ड्राइवर से प्रतिक्रिया जिसमें स्कैन संदर्भ आईडी (0x3aaf) शामिल है
एक बार स्कैन संदर्भ बन जाने और आईडी प्राप्त कर लेने के बाद, जिस फ़ाइल के लिए स्कैन संदर्भ बनाया गया था, उसका एक हैंडल संचार पोर्ट पर फिर से एक संदेश भेजकर अनुरोध करने वाले एप्लिकेशन में खोला जा सकता है।

चित्र 8: बनाए गए स्कैन संदर्भ की फ़ाइल हैंडल पुनर्प्राप्ति
CreateFileReturnHandle0 नामित फ़ंक्शन केवल तभी कॉल किया गया जब पिछले फ़ंक्शन SearchScanContextsByID ने एक मान्य स्कैन संदर्भ लौटाया।
उदा. केवल तभी जब अनुरोध करने वाली प्रक्रिया ने एक मान्य संदर्भ आईडी प्रदान की हो जो पहले उल्लिखित स्कैन निर्माण फ़ंक्शन को कॉल करके बनाई गई थी।
अनुरोध करने वाले प्रोग्राम ने चित्र 8 (चित्र 4, पंक्ति 233) में निर्दिष्ट फ़ंक्शन को स्कैन संदर्भ आईडी प्रदान करके विशेषाधिकार प्राप्त फ़ाइल का एक हैंडल सफलतापूर्वक खोला।

चित्र 9: SAM फ़ाइल के लिए फ़ाइल हैंडल की सफल पुनर्प्राप्ति
processhacker का उपयोग करके, अनुरोध करने वाली प्रक्रिया के हैंडल को देखकर फ़ाइल हैंडल तक पहुंच की पुष्टि की गई:

चित्र 10: SAM फ़ाइल का हैंडल रखने वाली प्रक्रिया

चित्र 11: प्राप्त हैंडल को पढ़ने की पहुंच प्रदान की गई
समर्थित फ़ंक्शन की आगे की खोज से तीन रजिस्ट्री कुंजियों का नियंत्रण दिखाई दिया जिनका उपयोग कोड निष्पादन प्राप्त करने के लिए किया जा सकता है।

चित्र 12: रजिस्ट्री कुंजियों के हैंडल खोलने का समर्थन करने वाले फ़ंक्शन

चित्र 13: किसी प्रक्रिया में इंजेक्ट करने के लिए हुक मॉनिटर dll निर्दिष्ट करने वाली रजिस्ट्री कुंजियाँ खोलना

चित्र 14: उपयोगकर्ता-नियंत्रित डेटा के साथ रजिस्ट्री कुंजी को संशोधित करने की क्षमता प्रदर्शित करने वाला OpenKey फ़ंक्शन
Acronis सूट द्वारा हुकिंग के लिए dll इंजेक्शन की परिस्थितियाँ निर्धारित नहीं की गईं, हालांकि यदि हुक मॉनिटरिंग सक्षम है तो यह माना जाता है कि x64HookLib और x86HookLib रजिस्ट्री कुंजियों द्वारा निर्दिष्ट dll को एक निर्दिष्ट प्रक्रिया में इंजेक्ट किया जाएगा।

चित्र 15: हुकिंग dll C:\ProgramData\Acronis\NGMP\shared\acr_protect.x64.dll निर्दिष्ट करने वाली x64HookLibKey
मनमाना फ़ाइल पढ़ने के लिए विश्लेषण में स्कैन संदर्भ खोलने की प्रक्रिया को छोड़ दिया गया है।
एक प्रक्रिया, स्कैन संदर्भ बनाने के बजाय, बार-बार GetScanContextByID फ़ंक्शन को अनुरोध जारी करके, ContextID मानों पर लूप करके जब तक एक या अधिक मान्य स्कैन संदर्भ नहीं मिल जाते, तब तक स्कैन संदर्भ आईडी को ब्रूट-फोर्स कर सकती है।