关键信息 Advisory Name: - 多种缓冲区溢出和格式字符串漏洞在Microsoft SQL Server Release Date: - 2001年12月20日 Application: - Microsoft SQL Server 7.0和2000 Platform: - Microsoft Windows NT 4.0, 2000和XP Severity: - 数据库用户可以执行任意代码或导致对服务器的拒绝服务 Author: - Chris Anley [chrisanley@hushmail.com] 和 Chris Wysopal [cwyso@atstake.com] Vendor Status: - 供应商已发布公告和补丁 CVE Candidate: - CAN-2001-0542 Reference: - http://www.atstake.com/research/advisories/2001/a122001-1.txt 概述 此公告描述了Microsoft SQL Server 7.0和2000中的多个漏洞,这些漏洞允许攻击者在SQL Server运行的帐户(通常是管理员)上下文中执行任意代码。 描述 SQL Server提供了基于cstyle格式规范符的内置函数来格式化错误消息。这些内置函数对所有用户都可访问。向这些函数提供恶意制作的输入会导致SQL Server进程中可利用的错误条件。要发起此攻击,攻击者必须具有执行SQL查询的权限,无论是直接执行还是通过利用SQL命令注入漏洞。 raiserror()函数对所有用户都可访问,并允许指定过长的长度规范符。这会导致可利用的溢出。另外,可以使用格式字符串规范符使攻击者能够覆盖内存中的任意地址。这可能导致执行任意代码。 formatmessage()内置函数对所有用户都可访问。通过创建特定制作的消息,任何用户都可以导致相继执行包含在消息中的恶意代码。 xp_sprintf扩展存储过程(默认可访问公共角色)允许指定过长的长度规范符。这会导致可利用的溢出。 建议 应用厂商补丁 不要允许不受信任的用户直接连接到SQL Server。这可以通过以下方法实现: - 使用SQL Server Network Utility删除所有未使用的连接“协议” - 使用防火墙等网络数据包过滤设备 - 配置Windows 2000 IP安全性过滤器仅允许信任的连接