CVE:CVE-2005-0551
CNNVD:CNNVD-200505-017
Windows内核是操作系统核心部分，提供系统级别服务，如设备和内存管理，分配处理器时间和管理错误处理。
Win32 API在实现命令行和其他基于字符的用户界面时使用控制台窗口。实现上述功能的特定代码位于CSRSS.EXE系统进程中。CSRSS.EXE进程的WINSRV.DLL文件创建并管理控制台窗口。如果用户从控制台窗口的系统菜单中选择了"属性"选项的话，包含有控制台窗口信息的数据结构就被拷贝到了文件映射的对象。该数据结构被称为CONSOLE_STATE_INFO，结构如下：
typedef struct _CONSOLE_STATE_INFO
 {
 /* 0x00 */ DWORD cbSize;
 /* 0x04 */ COORD ScreenBufferSize;
 /* 0x08 */ COORD WindowSize;
 /* 0x0c */ POINT WindowPosition;
 /* 0x14 */ COORD FontSize;
 /* 0x18 */ DWORD FontFamily;
 /* 0x1c */ DWORD FontWeight;
 /* 0x20 */ WCHAR FaceName[32]; /* Buffer Overflow */
 /* 0x60 */ DWORD CursorSize;
 /* 0x64 */ BOOL FullScreen;
 /* 0x68 */ BOOL QuickEdit;
 /* 0x6c */ BOOL DefaultWindowPos;
 /* 0x70 */ BOOL InsertMode;
 /* 0x74 */ WORD ScreenColors;
 /* 0x76 */ WORD PopupColors;
 /* 0x78 */ BOOL HistoryNoDup;
 /* 0x7c */ DWORD HistoryBufferSize;
 /* 0x80 */ DWORD NumberOfHistoryBuffers;
 /* 0x84 */ COLORREF ColorTable[16];
 /* 0xc4 */ DWORD CodePage;
 /* 0xc8 */ DWORD hwnd;
 /* 0xcc */ WCHAR ConsoleTitle[2];
 } CONSOLE_STATE_INFO， *PCONSOLE_STATE_INFO;
该结构中的值被传送到了WINSRV.DLL中的代码，但该代码没有正确的验证数据。攻击者可以发送全部为0的CONSOLE_STATE_INFO就可以导致CSRSS进程终止和系统崩溃(蓝屏)。
CONSOLE_STATE_INFO数据结构中还包含有指定字体名称的字符串FaceName[32]。该字符串通过wcscpy()函数拷贝到了固定大小的栈缓冲区，但没有任何检查，如下所示：
 0x5FFB39DF push [ebp+lpFaceName]
 0x5FFB39E2 lea eax， [ebp-54h]
 0x5FFB39E5 push eax
 0x5FFB39E6 call j_wcscpy
攻击者可以通过提供大于32个字节的字符串触发栈溢出，这样就可以完全控制计算机，执行任意代码。
solution:Upgrade microsoft windows_2000 to a higher version than *; Upgrade microsoft windows_2003_server to a higher version than r2,and avoid the version r2; Upgrade microsoft windows_xp to a higher version than *:sp1,*:sp2,and avoid the version *:sp1,*:sp2