Microsoft SQL Server 2000 Resolution服务远程堆缓冲区溢出漏洞(MS02-039)
发布日期:2002-07-25
更新日期:2002-07-30
受影响系统:Microsoft SQL Server 2000 SP2
Microsoft SQL Server 2000 SP1
Microsoft SQL Server 2000 Desktop Engine
Microsoft SQL Server 2000
- Microsoft Windows NT 4.0 SP6a
- Microsoft Windows NT 4.0 SP6
- Microsoft Windows NT 4.0 SP5
- Microsoft Windows NT 4.0
- Microsoft Windows 2000 SP3
- Microsoft Windows 2000 Server SP2
- Microsoft Windows 2000 Server SP1
描述:
BUGTRAQ ID:
5310
CVE ID:
CVE-2002-0649
Microsoft SQL Server 2000是一款由Microsoft公司开发的商业性质大型数据库系统。
Microsoft SQL Server 2000的Resolution服务对用户提交的UDP包缺少正确的处理,远程攻击者可以利用这个漏洞进行基于堆的缓冲区溢出攻击。
Microsoft SQL Server 2000支持在单个物理主机上伺服多个SQL服务器的实例,每个实例操作需要通过单独的服务,不过多个实例不能全部使用标准SQL服务会话会话端口(TCP 1433),所以SQL Server Resolution服务操作监听在UDP 1434端口,提供一种使客户端查询适当的网络末端用于特殊的SQL服务实例的途径。
当SQL Server Resolution服务在UDP 1434端口接收到第一个字节设置为0x08,接着为超长字符串,再追加":"符号和数字的UDP包时,会出现基于堆的缓冲区溢出,攻击者可以通过破坏堆结构而以自己提供的地址覆盖内存中的任意位置,可导致控制进程的执行,精心提交字符串数据可导致以SQL Server进程的权限在系统中执行任意指令。
如果没有提供":"号和数字,SQL进程就会在堆破坏前出现访问冲突,比如代码中有调用strtok()的C函数,strtok()函数查询字符串中是否有":"号,如果找到就返回指向它的指针,如果没有":"号就没有任何指针返回,这就是如果没有":"号会出现SQL进程出现访问冲突的原因之一,代码在传递给其他参数调用如atoi()前没有检查是否有合法的指针返回:
char *ptr=NULL;
int num=0;
..
ptr = strtok(string,":");
num = atoi(ptr); // ptr is used without being validated
以上没有对返回值进行检查,就导致出现异常而产生简单的拒绝服务攻击。
<*来源:NGSSoftware Insight Security Research
链接:
http://archives.neohapsis.com/archives/bugtraq/2002-07/0291.html
http://www.microsoft.com/technet/security/bulletin/MS02-039.asp
http://www.ngssoftware.com/advisories/mssql-udp.txt
*>
建议:
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
* 在边界防火墙、网关设备或者SQL Server主机上限制对UDP/1434端口的访问。由于UDP报文的源地址很容易伪造,所以不能简单地限制只允许可信IP访问。
厂商补丁:
Microsoft
---------
Microsoft已经为此发布了一个安全公告(MS02-039)以及相应补丁:
MS02-039:Buffer Overruns in SQL Server 2000 Resolution Service Could Enable Code Execution (Q323875)
链接:
http://www.microsoft.com/technet/security/bulletin/MS02-039.asp
补丁下载:
* Microsoft SQL Server 2000:
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=40602浏览次数:4669
严重程度:0(网友投票)