
LPE exploit for a UAF in Windows (CVE-2021-40449).
CVE-2021-40449 के लिए मेरा exploit, जो win32kfull!GreResetDCInternal में UAF के माध्यम से एक Windows LPE है।
UAF भेद्यता के साथ-साथ इस exploit को संभव बनाने के लिए अन्य प्रिमिटिव का उपयोग किया जा रहा है:
SystemHandleInformation पैरामीटर के साथ NtQuerySystemInformation() फ़ंक्शन के माध्यम से ring0 में exploit के access token एड्रेस को लीक करना।access_token.privileges को 0xFFs से ओवरराइट करने के लिए गैजेट के रूप में rtlSetAllBits() का उपयोग करना।EnumDeviceDrivers() फ़ंक्शन के माध्यम से ntoskrnl.exe मॉड्यूल का बेस एड्रेस लीक करके ring0 पर rtlSetAllBits() का एड्रेस लीक करना।BitMapHeader को इस तरह से तैयार करना जो हमें exploit के access_token.privileges को ओवरराइट करने की अनुमति देगा।NtSetInformationThread() प्रिमिटिव के माध्यम से तैयार किए गए BitMapHeader को आवंटित करना और SystemBigPoolInformation पैरामीटर के साथ NtQuerySystemInformation() फ़ंक्शन के माध्यम से बड़े पूल में आवंटन एड्रेस को लीक करना।EnumPrinters() के माध्यम से सिस्टम पर प्रिंटरों को गिनते हैं, उनमें से एक ड्राइवर को लोड करते हैं, फिर यूजरमोड कॉलबैक फ़ंक्शन DrvEnablePDEV() के कॉल को हुक करते हैं।DrvEnablePDEV() फ़ंक्शन पर प्रॉक्सी करते हैं, exploit का काम करते हैं, फिर प्रॉक्सी किए गए कॉल से GDI को जो लौटाया जाता है उसे लौटाते हैं।DrvEnablePDEV() में ResetDC() के दूसरे कॉल के माध्यम से UAF को ट्रिगर करना।CreatePalette() प्रिमिटिव का उपयोग करके समान आकार की एक तैयार वस्तु को स्प्रे करके मुक्त किए गए PDC ऑब्जेक्ट को पुनः प्राप्त करना।winlogon.exe प्रक्रिया में शेलकोड इंजेक्ट करके NT AUTHORITY\SYSTEM प्राप्त करने के लिए नए प्राप्त SeDebugPrivilege विशेषाधिकार का दुरुपयोग करना।अधिक जानकारी कैस्पर्सकी के इस लेख में पाई जा सकती है।
Win10 Redstone (बिल्ड 14393) पर परीक्षण किया गया।