Microsoft SQL Server sp_replwritetovarbin远程堆溢出漏洞

Microsoft SQL Server是一款流行的SQL数据库系统。
 
SQL Server的sp_replwritetovarbin扩展存储过程中存在堆溢出漏洞。如果远程攻击者在参数中提供了未初始化变量的话,就可以触发这个溢出,向可控的位置写入内存,导致以有漏洞SQL Server进程的权限执行任意代码。
 
在默认的配置中,任何用户都可以访问sp_replwritetovarbin过程。通过认证的用户可以通过直接的数据库连接或SQL注入来利用这个漏洞。
 
 
 
 
解决方法
临时解决方法:
 
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
 
* 拒绝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
---------
Microsoft已经为此发布了一个安全公告(MS09-004)以及相应补丁:
MS09-004:Vulnerability in Microsoft SQL Server Could Allow Remote Code Execution (959420)
链接:https://docs.microsoft.com/en-us/security-updates/securitybulletins/2009/ms09-004
posted @ 2019-05-20 09:45  mrhonest  阅读(1779)  评论(0)    收藏  举报