Microsoft Windows是美国微软(Microsoft)公司发布的一系列操作系统。 Windows XP及更早版本的WIN32K.SYS中存在特权句柄泄露漏洞,允许非特权用户以内核权限执行任意指令。 如果创建了新进程的话,WIN32K.SYS!GdiProcessCallout会通过ObOpenObjectByPointer以SECTION_ALL_ACCESS权限在新进程中为gpHmgrSharedHandleSection创建句柄。这个句柄用于将共享中的只读部分映射到进程的内存,但没有关闭,因此应用程序可以滥用句柄将这部分重新映射为可写,然后篡改WIN32K.SYS将会使用的数据。 gpHmgrSharedHandleSection是一个10h字节GDI对象句柄项表,格式如下: +00h PTR GDI object data (kernel data) pointer +04h WORD Process ID +06h WORD some flags +08h WORD high word of GDI handle +0Ah BYTE type 01h = DC 0Ah = Font 02h = Surface? 0Ch = Font Chunk? 03h = 3D Surface? 0Eh = Color Transform Object 04h = Region 10h = Brush 05h = Bitmap 15h = Metafile? 06h = Client Object? 16h = EnumFontStyle? 07h = Path 1Ch = Driver Object 08h = Palette 1Eh = Spool Object 09h = Color Space +0Bh BYTE more flags +0Ch PTR user data pointer 恶意用户可以创建一个GDI对象,修改与句柄相关的内核数据指针,然后试图使用对象以使WIN32K.SYS操作恶意数据,导致执行任意指令。
Microsoft Windows是美国微软(Microsoft)公司发布的一系列操作系统。 Windows XP及更早版本的WIN32K.SYS中存在特权句柄泄露漏洞,允许非特权用户以内核权限执行任意指令。 如果创建了新进程的话,WIN32K.SYS!GdiProcessCallout会通过ObOpenObjectByPointer以SECTION_ALL_ACCESS权限在新进程中为gpHmgrSharedHandleSection创建句柄。这个句柄用于将共享中的只读部分映射到进程的内存,但没有关闭,因此应用程序可以滥用句柄将这部分重新映射为可写,然后篡改WIN32K.SYS将会使用的数据。 gpHmgrSharedHandleSection是一个10h字节GDI对象句柄项表,格式如下: +00h PTR GDI object data (kernel data) pointer +04h WORD Process ID +06h WORD some flags +08h WORD high word of GDI handle +0Ah BYTE type 01h = DC 0Ah = Font 02h = Surface? 0Ch = Font Chunk? 03h = 3D Surface? 0Eh = Color Transform Object 04h = Region 10h = Brush 05h = Bitmap 15h = Metafile? 06h = Client Object? 16h = EnumFontStyle? 07h = Path 1Ch = Driver Object 08h = Palette 1Eh = Spool Object 09h = Color Space +0Bh BYTE more flags +0Ch PTR user data pointer 恶意用户可以创建一个GDI对象,修改与句柄相关的内核数据指针,然后试图使用对象以使WIN32K.SYS操作恶意数据,导致执行任意指令。