
pstrip64.sys कर्नेल ड्राइवर एक IOCTL उजागर करता है जो कम-विशेषाधिकार वाले उपयोगकर्ताओं को भौतिक मेमोरी के मनमाने क्षेत्रों को अपने स्वयं के वर्चुअल एड्रेस स्पेस में मैप करने की अनुमति देता है। यह प्रिमिटिव सिस्टम की भौतिक RAM तक पूर्ण रीड/राइट एक्सेस प्रदान करता है, जिससे हमलावर महत्वपूर्ण कर्नेल संरचनाओं को संशोधित कर सकते हैं और विशेषाधिकारों को NT AUTHORITY\SYSTEM तक बढ़ा सकते हैं।
pstrip64.sys कर्नेल ड्राइवर एक IOCTL प्रदान करता है जो निम्न-विशेषाधिकार वाले उपयोगकर्ताओं को भौतिक मेमोरी की मनमानी श्रेणियों को अपने स्वयं के वर्चुअल एड्रेस स्पेस में मैप करने की अनुमति देता है। यह प्रिमिटिव सिस्टम की भौतिक RAM तक पूर्ण रीड/राइट एक्सेस की अनुमति देता है, जिससे हमलावर महत्वपूर्ण कर्नेल संरचनाओं को संशोधित कर सकते हैं और NT AUTHORITY\SYSTEM तक विशेषाधिकार बढ़ा सकते हैं।
ड्राइवर एक डिवाइस ऑब्जेक्ट \Device\PSTRIP64 और एक सिम्बोलिक लिंक \DosDevices\PSTRIP64 बनाता है जो उपयोगकर्ताओं के लिए सुलभ है।
यह भेद्यता DispatchDeviceControl रूटीन में मौजूद है, विशेष रूप से IOCTL 0x80002008 के हैंडलर में। फ़ंक्शन sub_11000 \Device\PhysicalMemory के लिए एक हैंडल खोलता है और ZwMapViewOfSection के माध्यम से इसे सीधे कॉलिंग प्रोसेस के एड्रेस स्पेस में मैप करता है। यह इनपुट बफर से एक भौतिक पता और लंबाई स्वीकार करता है, इसे HalTranslateBusAddress के माध्यम से अनुवादित करता है, और ZwCurrentProcess() का उपयोग करके मैप करता है। एक हमलावर अपनी प्रक्रिया की _EPROCESS संरचना खोजने के लिए भौतिक मेमोरी को स्कैन कर सकता है और सुरक्षा टोकन को System टोकन से अधिलेखित कर सकता है, या कर्नेल कोड को सीधे पैच कर सकता है।
इसी तरह की भेद्यता पहली बार ऐप के पिछले संस्करणों पर pstrip.sys फ़ाइल के लिए CVE-2008-5725 में देखी गई थी, जहां IOCTL 0x800020A8 का उपयोग करने वाला PowerStrip ड्राइवर हमलावर को एक गंतव्य पता (जैसे HalDispatchTable) और उस पते पर लिखे जाने वाले डेटा को पास करने की अनुमति देता है। इस बार नवीनतम संस्करण के साथ मिली भेद्यता स्पष्ट रूप से एक उपयोगकर्ता को अपनी प्रक्रिया में किसी भी भौतिक मेमोरी को मैप करने की अनुमति देती है। हमलावर भौतिक RAM को मैप करता है, अपनी स्वयं की प्रक्रिया संरचना के लिए स्कैन करता है, और Admin विशेषाधिकार प्राप्त करने के लिए मैन्युअल रूप से अपने टोकन को संपादित करता है। सीधे मेमोरी पर कार्य करना।
RtlInitUnicodeString(&DestinationString, L"\\Device\\PhysicalMemory");
// ...
result = ZwOpenSection(&SectionHandle, 0xF001Fu, &ObjectAttributes);
// ...
v8 = ZwMapViewOfSection(..., (HANDLE)0xFFFFFFFFFFFFFFFFLL, ...);
विशेषाधिकार वृद्धि प्रदर्शित करने के लिए एक PoC विकसित किया गया था, हालांकि, दुरुपयोग से बचने के लिए कोई कोड सार्वजनिक रूप से उपलब्ध नहीं कराया जाएगा।

