
ThrottleStop.sys मनमाना भौतिक मेमोरी R/W
TechPowerUp के ThrottleStop.sys ड्राइवर (CVE-2025-7771) के लिए पूर्ण proof-of-concept।
एक हस्ताक्षरित, अभी भी लोड होने योग्य कर्नेल ड्राइवर दो IOCTLs के माध्यम से बिना सत्यापन के
भौतिक मेमोरी रीड और राइट उजागर करता है। यह रिपॉजिटरी उस प्रिमिटिव को एक कार्यशील
एडमिनिस्ट्रेटर-से-SYSTEM लोकल प्रिविलेज एस्केलेशन में बदल देती है और एक डिवाइस-नेमिंग
विचित्रता का दस्तावेजीकरण करती है जो अधिकांश पाथ- और फ़ाइलनाम-आधारित डिटेक्शन को तोड़ देती है।
समान IOCTLs के लिए एक PoC पहले से मौजूद था (क्रेडिट्स देखें)। यह एक प्रिमिटिव प्रदर्शन के बजाय एक स्वतंत्र, पूर्ण एक्सप्लॉइट चेन है।
| फ़ील्ड | मान |
|---|---|
| SHA256 | 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0 |
| SHA1 | 82ED942A52CDCF120A8919730E00BA37619661A3 |
| MD5 | 6BC8E3505D9F51368DDF323ACB6ABC49 |
| संस्करण | 3.0.0.0 ("निम्न-स्तरीय ड्राइवर", 2004-2020) |
| हस्ताक्षरकर्ता | TechPowerUp LLC, DigiCert EV Code Signing |
| प्रमाणपत्र थंबप्रिंट | 524EDA9C819321C66E22C7BABEB23DAEAFFB2182 |
| प्रमाणपत्र वैधता | 2019-08-10 से 2022-06-15 |
प्रमाणपत्र 2022 में समाप्त हो गया, लेकिन हस्ताक्षर में एक विश्वसनीय काउंटरसिग्नेचर टाइमस्टैम्प है, इसलिए Windows इसे अभी भी लोड करता है। रिवोकेशन तभी मदद करता है जब उसकी तारीख साइनिंग समय से पहले हो, जो इस जैसे पुराने ड्राइवरों के लिए शायद ही कभी होता है।
वर्जन रिसोर्स में कोई CompanyName, OriginalFilename या InternalName नहीं है, इसलिए
फ़ाइल को उसके अपने मेटाडेटा से किसी विक्रेता से नहीं जोड़ा जा सकता।
दो IOCTLs बिना किसी बाउंड या एड्रेस सत्यापन के भौतिक मेमोरी को रीड और राइट करते हैं:
| IOCTL | ऑपरेशन |
|---|---|
0x80006498 | भौतिक मेमोरी रीड |
0x8000649C | भौतिक मेमोरी राइट |
दोनों METHOD_BUFFERED हैं, इसलिए कोई यूज़र-पॉइंटर dereference नहीं है; दोष
कॉलर द्वारा दिए गए भौतिक एड्रेस का सत्यापन न होना है, न कि कोई अनचेक्ड पॉइंटर।
ध्यान देने योग्य बात: राइट हैंडलर 0x8000649C को FILE_READ_ACCESS घोषित किया गया है।
रीड-ओनली खोला गया हैंडल अभी भी भौतिक राइट जारी कर सकता है, इसलिए घोषित एक्सेस मास्क
वास्तव में हैंडलर जो करता है उससे मेल नहीं खाता।
डिवाइस खोलने के लिए एडमिनिस्ट्रेटर अधिकारों की आवश्यकता होती है, इसलिए यह अपने आप में विशेषाधिकार सीमा का उल्लंघन नहीं है। यह एक हमलावर को, जो पहले से एडमिन है, यूज़र मोड से आर्बिट्ररी कर्नेल रीड/राइट देता है, जो उन सुरक्षाओं को पराजित करता है जो एडमिन से ऊपर बनी रहनी चाहिए: HVCI कोड इंटीग्रिटी, PPL, और EDR/AV सेल्फ-प्रोटेक्शन। क्लासिक bring-your-own-vulnerable-driver।
एक ठोस प्रदर्शन के रूप में, PoC SYSTEM टोकन चुराने और SYSTEM शेल स्पॉन करने के लिए R/W प्रिमिटिव का उपयोग करता है।
CVSS 4.0: AV:L/AC:H/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H (8.7, High).
सब कुछ ड्राइवर के भौतिक R/W IOCTLs के विरुद्ध यूज़र मोड से चलता है। कोई पेज-टेबल वॉकिंग नहीं है और कोई CR3 शामिल नहीं है; दोनों प्रोसेस सीधे भौतिक मेमोरी स्कैन करके ढूंढे जाते हैं:
ImageFileName System है और UniqueProcessId 4 है। स्कैन फर्मवेयर की
HARDWARE\RESOURCEMAP\...\Physical Memory रजिस्ट्री कुंजी से पढ़ी गई आबाद RAM रेंज
तक सीमित है, न कि अनुमानित विंडो तक, इसलिए MMIO होल कभी नहीं छूए जाते और इंस्टॉल्ड
RAM से ऊपर कुछ भी नहीं छूटता।Token फ़ील्ड (EPROC_TOKEN) पढ़ें।Token स्लॉट में लिखें। टोकन
एक _EX_FAST_REF है, इसलिए कम रेफरेंस-काउंट बिट्स डिफ़ॉल्ट रूप से मास्क किए जाते हैं
(--mask इस व्यवहार का चयन करता है)।cmd.exe स्पॉन करें; whoami लौटाता है।ऑफसेट (EPROC_TOKEN, EPROC_PID, EPROC_IMG_NAME, आदि) एक विशिष्ट बिल्ड के लिए हैं और
लक्षित Windows संस्करण पर dt nt!_EPROCESS के विरुद्ध पुष्टि की जानी चाहिए।
एक्ज़ीक्यूटेबल नाम मायने रखता है। चरण 3 अपनी प्रोसेस को भौतिक मेमोरी में उसके
ImageFileName का मिलान करके ढूंढता है, और वह फ़ील्ड 15 अक्षरों तक सीमित है जबकि स्कैन
पहले 8 से मिलान करता है। संकलित नाम को छोटा और विशिष्ट रखें; यदि आप बाइनरी का नाम बदलते
हैं, तो उस सीमा के भीतर रहें या सेल्फ-स्कैन प्रोसेस नहीं ढूंढ पाएगा।
ड्राइवर एक निश्चित डिवाइस नाम का उपयोग नहीं करता। यह डिवाइस ऑब्जेक्ट नाम को उस सर्विस
नाम से प्राप्त करता है जिसके अंतर्गत वह पंजीकृत है; डिस्क पर फ़ाइलनाम अप्रासंगिक है।
बाइनरी को सर्विस TRIXX के अंतर्गत पंजीकृत करने से \\.\TRIXX बनता है चाहे फ़ाइल को
डिस्क पर कुछ भी कहा जाए।
इसलिए \Device\ThrottleStop या ThrottleStop.sys पर आधारित कोई भी डिटेक्शन आसानी से
बाइपास हो जाता है। डिटेक्शन को फ़ाइल हैश या साइनिंग प्रमाणपत्र पर आधारित होना चाहिए:
SHA256: 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0
Thumbprint: 524EDA9C819321C66E22C7BABEB23DAEAFFB2182
Subject: CN=TechPowerUp LLC, O=TechPowerUp LLC, L=Spokane, S=Washington, C=US
सोर्स में DEVICE_NAMES सूची केवल ज्ञात प्रोडक्ट इंस्टॉल के लिए एक प्रोब है। अपने द्वारा
स्वयं पंजीकृत किसी सर्विस को लक्षित करने के लिए एक डिवाइस नाम को आर्ग्युमेंट के रूप में
पास करें।
| CVE | ड्राइवर |
|---|---|
| CVE-2019-7245 | GPU-Z.sys |
| CVE-2025-5324 | GPU-Z.sys |
| CVE-2025-7771 | ThrottleStop.sys (यह रिपॉजिटरी) |
बाइनरी यहाँ शिप नहीं की गई है। किसी भी प्रति को उपरोक्त SHA256 के विरुद्ध सत्यापित करें। सैंपल LOLDrivers में सूचीबद्ध है।
cl /nologo /EHsc /W4 /O2 src\ThrottleStop.cpp /Fe:myLittleLpe.exe /link advapi32.lib
केवल लैब उपयोग के लिए। वापस रोल करने के लिए स्नैपशॉट के साथ एक पृथक VM के अंदर चलाएँ।
sc.exe create <name> type= kernel binPath= C:\path\to\ThrottleStop.sys
sc.exe start <name>
myLittleLpe.exe
sc.exe stop <name>
sc.exe delete <name>
बाइनरी कोई आर्ग्युमेंट नहीं लेता। यह भौतिक मेमोरी मैप प्रिंट करता है, SYSTEM और लोकल
EPROCESS को स्कैन करता है, टोकन स्वैप करता है, और NT AUTHORITY\SYSTEM के रूप में चलने
वाला cmd.exe स्पॉन करता है।

उसी ड्राइवर पर अन्य सार्वजनिक कार्य, तुलना के लिए:
डिफेंसिव रिसर्च और डिटेक्शन इंजीनियरिंग के लिए प्रकाशित। यह भेद्यता पहले से ही CVE-2025-7771 के रूप में सार्वजनिक है। यहाँ सब कुछ लेखक के स्वामित्व वाले सिस्टम पर परीक्षण किया गया है। इसे उन सिस्टम पर न चलाएँ जिनके आप मालिक नहीं हैं या जिनका परीक्षण करने के लिए आप अधिकृत नहीं हैं।
NT AUTHORITY\SYSTEM