当前位置: 安全纵横 > 安全公告

Microsoft SQL Server sp_replwritetovarbin远程堆溢出漏洞(MS09-004)

受影响系统:
Microsoft SQL Server 2005 SP2
Microsoft SQL Server 2005 SP1
Microsoft SQL Server 2000

描述:

Microsoft SQL Server是一款流行的SQL数据库系统。

SQL Server的sp_replwritetovarbin扩展存储过程中存在堆溢出漏洞。如果远程攻击者在参数中提供了未初始化变量的话,就可以触发这个溢出,向可控的位置写入内存,导致以有漏洞SQL Server进程的权限执行任意代码。

在默认的配置中,任何用户都可以访问sp_replwritetovarbin过程。通过认证的用户可以通过直接的数据库连接或SQL注入来利用这个漏洞。

建议:
--------------------------------------------------------------------------------

拒绝sp_replwritetovarbin扩展存储过程的权限

要拒绝对存储过程的访问,请以sysadmin身份使用osql.exe或sqlcmd.exe,或者通过SQL Server Management Studio连接到SQL Server,并执行以下T-SQL的脚本:

use master
deny execute on sp_replwritetovarbin to public

使用SQL Server管理拒绝对存储过程的访问:

对于SQL Server2000:

1. 以sysadmin身份使用企业管理器连接到SQL服务器
2. 从SQL Server企业管理器窗口中,选择所需的服务器
3. 展开数据库
4. 展开“主服务器”
5. 单击“扩展存储过程”。出现一个存储过程列表。
6. 从存储过程列表中,右键单击sp_replwritetovarbin,然后选择“属性”
7. 在“属性”窗口中,单击“权限”
8. 在用户/数据库角色/公共下,找到“公共”,然后单击EXEC列中的框。该框变为一个红色X。
9. 单击“确定”两次

对于SQL Server 2005:

1. 以sysadmin身份使用SQL Server Management Studio连接到SQL Server
2. 从“对象资源管理器”窗口,选择所需的服务器
3. 展开数据库和系统数据库
4. 展开“主服务器”
5. 展开“编程性”
6. 单击“扩展存储过程”。出现一个存储过程列表。
7. 从存储过程列表中,右键单击sp_replwritetovarbin,然后选择“属性”
8. 在“属性”窗口中,单击“权限”
9. 单击所需用户ID旁边的“拒绝执行”,然后单击“确定”

厂商补丁:

Microsoft已经为此发布了一个安全公告(MS09-004)以及相应补丁:
http://www.microsoft.com/technet/security/Bulletin/MS09-004.mspx?pf=true