Windows7RC7100GDI驱动win32k.sys内核这里漏洞

Windows7RC7100GDI驱动win32k.sys内核这里漏洞
点评:谢谢你,Iceboy发现了这个问题并提供转储
漏洞供应商和产品:微软Windows 7 RC 7100090421
有一种脆弱的组件:Win32k.sys中时间戳:49ee8dc8
一个漏洞函数存在:ntusergetdc / ntusergetdcex
漏洞描述:Win32k.sys中是Windows GDI的驱动程序,其中包含大量复杂的图形界面处理,由于大量的代。
谢谢你,Iceboy发现了这个问题并提供转储
漏洞供应商和产品:微软Windows 7 RC 7100090421
有一种脆弱的组件:Win32k.sys中时间戳:49ee8dc8
一个漏洞函数存在:ntusergetdc / ntusergetdcex

漏洞描述:Win32k.sys中是Windows的GDI驱动程序,里面包含了很多复杂的图形界面处理,因为大量的代码修改win3.1,所以它已经成为一种常见的Windows漏洞发生。

这个漏洞主要是由于共同的关键锁定在其ntusergetdc / ntusergetdcex函数不正确的使用(也许不只是这两个函数)在Windows 7中,以便在任何权限GDI任何程序可以触发进行DoS攻击的内核蓝屏
脆弱性分析:
在Windows Vista中,这两个功能进入之前,他们会打电话给userenterusercirtsec进入临界区,同时设置gpticurrent到当前线程的win32thread。

对userenterusercritsec实施如下:
pwin32thread userenterusercritsec()
{

pwin32thread pwin32thread;

pwin32thread = exenterpriorityregionandacquireresourceexclusive(gpresuser);
gpticurrent = pwin32thread;
gbvalidatehandleforil = 1;
返回pwin32thread;
}

exenterpriorityregionandacquireresourceshared是部分出口资源共享锁功能提供Win32K。此功能将锁gpresuser资源整合在一起,并返回当前线程的win32thread,那是kegetcurrentthread -> win32thread。

同时,核函数exenterpriorityregionandacquireresourceexclusive相似。
(XP)后调用keentercriticalregion,与exacquireresourceexclusivelite gpresuser锁,然后用psgetcurrentthread -> psgetthreadwin32thread获取当前线程win32kthread,并存储到gpticurrent。

在Windows 7中,两个功能进入之前,打电话给userentersharedcrit进入共享临界区

userentrysharedcirt的实现是非常简单的
pwin32thread entersharedcrit()
{
返回exenterpriorityregionandacquireresourceshared(gpresuser);
}

可以看到,gpticurrent不在这里设置。事实上,ntusergetdc / ntusergetdcex将保存这个功能寄存器使用存储在currentwin32thread数据。

从临界临界共享临界,毫无疑问,这样的修改将提高ntusergetdc / ntusergetdcex效率和降低锁竞争的可能性,但这是错误的纠正。

因为在共享临界,没有修改的gpticurrent,很可能遇到gpticurrent非法状态,如遇到一个线程,不让psconverttoguithread,造成gpticurrent是空的。

win32k中内部有大量的例程(通常从ZZZ,XXX),他们都认为gpticurrent之前调用本身的有效状态。这包括xxxdestorywindow

的蓝屏的一个例子是:ntusergetdc ->区域-> getdcex -> spbcheckdce -> -> -> freespb spbcheckrect2 spbcheckrect

当打电话给FreeSpb,一个SPB对象发布在这里

然后就要
hmassigmentunlock freespb -> -> -> -> hmunlockobject hmunlockobjectinternal hmdestroyunlockedobject,表中的函数以最后的电话,因为这是GetWindowDc,所以叫xxxdestroywindow,xxxdestroywindow第一句代码没有检查参考gpticurrent指针数据本质上直接导致蓝屏

解决方案:
等待微软更新官方补丁。

微软可能的更新手段:
牺牲效率与关键锁取代ntusergetdc等人的错误共享锁,或删除在ntusergetdc功能和其他功能,不是指gpticurrent所有功能全部gpticurrent参考。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部