
CVE-2026-29923 के लिए प्रूफ-ऑफ-कॉन्सेप्ट, जो pstrip64.sys कर्नेल ड्राइवर में एक स्थानीय विशेषाधिकार वृद्धि है। IOCTL के माध्यम से भौतिक मेमोरी रीड/राइट प्रिमिटिव का प्रदर्शन करता है, जिससे Windows पर एक गैर-विशेषाधिकार प्राप्त उपयोगकर्ता से NT AUTHORITY\SYSTEM तक विशेषाधिकार वृद्धि की जाती है।
CVE-2026-29923 के लिए एक न्यूनतम प्रूफ-ऑफ-कॉन्सेप्ट, pstrip64.sys कर्नेल ड्राइवर (एनटेक ताइवान पावरस्ट्रिप ≤ 3.90.736) में एक कमजोरी जो एक अविशेषित उपयोक्ता-मोड प्रक्रिया को NT AUTHORITY\SYSTEM तक बढ़ाने की अनुमति देती है।
pstrip64.sys एक IOCTL (0x80002008) को उजागर करता है जो उपयोगकर्ता द्वारा प्रदान किए गए भौतिक पते को स्वीकार करता है और \Device\PhysicalMemory खोलकर और वर्तमान प्रक्रिया हैंडल के साथ ZwMapViewOfSection को कॉल करके इसे सीधे कॉलिंग प्रक्रिया के वर्चुअल पता स्थान में मैप करता है। HalTranslateBusAddress द्वारा लागू किए गए के अलावा कोई विशेषाधिकार जांच, कोई पता सत्यापन नहीं है, और प्रतीकात्मक लिंक \\.\PSTRIP64 पर कोई पहुंच नियंत्रण नहीं है।
परिणाम एक अविशेषित प्रक्रिया से एक अप्रतिबंधित भौतिक मेमोरी पढ़ने/लिखने का प्रिमिटिव है।
मनमाने भौतिक पढ़ने/लिखने के उपलब्ध होने पर, शोषण चार चरणों का पालन करता है।
1. EPROCESS संरचनाओं के लिए स्कैन करें
भौतिक RAM को 2 MB के टुकड़ों में चला जाता है। प्रत्येक टुकड़े को कर्नेल पूल टैग Proc (0x636F7250) के लिए स्कैन किया जाता है, जो उस पूल आवंटन को चिह्नित करता है जिसमें एक प्रक्रिया की _EPROCESS संरचना होती है। उम्मीदवार हिट को PID पर भरोसा करने से पहले तीन हल्के ह्यूरिस्टिक्स के साथ मान्य किया जाता है:
PriorityClass == 0x2 — सभी जीवित प्रक्रियाएं सामान्य प्राथमिकता पर चलती हैंProcessLock == 0x0 — एक स्थिर प्रक्रिया पर लॉक फ़ील्ड साफ हैImageFileName[0] प्रिंट करने योग्य ASCII है — कबाड़ मेमोरी शायद ही इसे संतुष्ट करती है2. दोनों टोकन पॉइंटर्स का पता लगाएं
दो लक्ष्यों की आवश्यकता है:
_EPROCESS के अंदर Token फ़ील्ड का भौतिक पताPID 4) _EPROCESS में संग्रहीत टोकन मान3. हमारे टोकन को अधिलेखित करें
हमारे Token फ़ील्ड वाला 4 KB पेज मैप किया जाता है और फ़ील्ड को सिस्टम टोकन मान से अधिलेखित कर दिया जाता है। इस बिंदु से विंडोज कर्नेल हमारी प्रक्रिया को NT AUTHORITY\SYSTEM के रूप में मानता है।
4. एक शेल स्पॉन करें
cmd.exe को CreateProcessA के माध्यम से लॉन्च किया जाता है। क्योंकि चाइल्ड प्रक्रियाएं पैरेंट के टोकन को इनहेरिट करती हैं, परिणामी शेल SYSTEM के रूप में चलता है।
3 GB – 4 GB भौतिक पता विंडो x86 सिस्टम पर MMIO के लिए आरक्षित है। इस श्रेणी में पेजों को मैप करने का प्रयास करने पर ड्राइवर त्रुटि 74 (HalTranslateBusAddress विफलता) लौटाता है। स्कैन इस विंडो को छोड़ देता है और 0x100000000 पर फिर से शुरू होता है ताकि विंडोज द्वारा 4 GB के निशान से ऊपर रखी जाने वाली कर्नेल संरचनाओं को पकड़ सके।
ड्राइवर का मैप हैंडलर लौटाए गए वर्चुअल पते को एक DWORD फ़ील्ड (LowPart) में लिखता है, 64-बिट VA को 32 बिट्स में ट्रंकेट करता है। 64-बिट बिल्ड को एक दूषित पॉइंटर मिलता है और तुरंत क्रैश हो जाता है। x86 के रूप में संकलित करें।
| सॉफ्टवेयर | संस्करण |
|---|---|
| EnTech Taiwan PowerStrip | ≤ 3.90.736 |
ड्राइवर हैश (SHA-256):
ab01485bb7c8bc1a9c86096eeea6d31d8fad557bf4d44072b46373d2203faa6e
हार्डकोडेड ऑफसेट Windows 10 22H2 x64 को लक्षित करते हैं। अन्य बिल्डों को अद्यतन मानों की आवश्यकता होती है — पुष्टि करने के लिए WinDbg में dt nt!_EPROCESS का उपयोग करें।
एक विजुअल स्टूडियो x86 डेवलपर कमांड प्रॉम्प्ट खोलें और चलाएं:
cl /EHsc /O2 exploit.c /Fe:poc.exe
या विजुअल स्टूडियो में प्लेटफ़ॉर्म लक्ष्य को x86 पर सेट करें और रिलीज़ मोड में बनाएँ। बाइनरी को विंडोज SDK के अलावा किसी बाहरी निर्भरता की आवश्यकता नहीं है।
पहले pstrip64.sys लोड करें (ड्राइवर लोड करने के लिए व्यवस्थापक की आवश्यकता है, एक बार लोड होने के बाद शोषण चलाने के लिए नहीं), फिर:
poc.exe
एक नई cmd.exe विंडो NT AUTHORITY\SYSTEM के रूप में चलने वाली खुलेगी।
ड्राइवर को लोड होने से रोकें (पसंदीदा)
चल रहे शोषण का पता लगाएं
SYSTEM-स्तरीय बच्चों को जन्म देने की निगरानी करेंNT AUTHORITY\SYSTEM में बदलता हैयह कोड केवल शैक्षिक और रक्षात्मक अनुसंधान उद्देश्यों के लिए प्रकाशित किया गया है। इसका उपयोग केवल उन सिस्टमों पर करें जिनके आप मालिक हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति है। लेखक किसी भी दुरुपयोग के लिए जिम्मेदार नहीं है।
| फ़ील्ड | ऑफसेट |
|---|
PriorityClass | 0x5B7 |
ProcessLock | 0x438 |
UniqueProcessId | 0x440 |
ImageFileName | 0x5A8 |
Token | 0x4B8 |