安全公告
Microsoft 安全公告 MS02-038 - 中等
SQL Server 2000 实用工具中的未检查缓冲区可以允许执行代码(Q316333)
发布时间: 2002 年 7 月 24 日 |更新时间:2002 年 7 月 29 日
版本: 1.1
最初发布: 2002 年 7 月 24 日
总结
谁应阅读此公告: 使用 Microsoft® SQL Server™ 2000 和 Microsoft 桌面引擎 2000 的系统管理员。
漏洞的影响: 两个漏洞都可能导致攻击者在服务器上运行代码。
最大严重性分级: 中等
建议: 系统管理员应考虑安装修补程序。
受影响的软件:
- Microsoft SQL Server 2000。
- Microsoft 桌面引擎 (MSDE) 2000
常规信息
技术详细信息
技术说明:
此修补程序消除了影响 SQL Server 2000 和 MSDE 2000 的两个新发现的漏洞:
- 作为 SQL Server 2000 的一部分提供的多个数据库一致性检查器(DBC)中发生的缓冲区溢出漏洞。 DBC 是命令控制台实用工具,允许在 SQL Server 上执行维护和其他操作。 虽然其中许多只是 sysadmin 可执行的,但其中一些也可以由db_owner和db_ddladmin角色的成员执行。 在最严重的情况下,利用此漏洞,攻击者可以在 SQL Server 服务的上下文中运行代码,从而使攻击者能够完全控制服务器上的所有数据库。
- 在数据库副本 (replica)使用的两个存储过程中发生的 SQL 注入漏洞。 其中一项只能由已分配db_owner角色的用户运行;另一个,由于权限错误,可由任何可以以交互方式登录服务器的用户运行。 利用此漏洞,攻击者可以在服务器上运行操作系统命令,但受以下所述的重大缓解因素的影响。
缓解因素:
数据库一致性检查器中的缓冲区溢出漏洞:
- db_owner和db_ddladmin角色都具有重要的特权,并且只应授予受信任的用户。
- 成功利用漏洞将使攻击者能够获取 SQL Server 帐户的权限。 但是,默认情况下,此帐户在服务器上只有域用户权限。
复制存储过程中的 SQL 注入漏洞:
- 利用漏洞至少需要攻击者能够以交互方式登录到服务器。 但是,最佳做法强烈反对向不受信任的用户授予此类权限。
- 只要能够运行受影响的存储过程,就不会让攻击者利用漏洞。 如常见问题解答中所述,仅当管理员以前启用了 SQL Server 代理 代理帐户时,才能利用漏洞。 默认情况下,此帐户处于禁用状态。
- 即使启用,SQL Server 代理代理帐户默认仅具有与域用户关联的权限。 如果管理员遵循最佳做法,则任何利用漏洞的用户可能已经拥有此级别的特权。
严重性分级:
数据库一致性检查器中的缓冲区溢出漏洞:
Internet 服务器 | Intranet 服务器 | 客户端系统 | |
---|---|---|---|
SQL Server 2000 | 适中 | 适中 | 无 |
复制存储过程中的 SQL 注入漏洞:
Internet 服务器 | Intranet 服务器 | 客户端系统 | |
---|---|---|---|
SQL Server 2000 | 低 | 低 | 无 |
上述 评估 基于受漏洞影响的系统类型、其典型部署模式以及利用漏洞对它们的影响。 数据库一致性检查器中的缓冲区溢出漏洞已被评为中等风险漏洞,因为它只能被已在系统上具有重要特权的用户利用。 副本 (replica)存储过程中的 SQL 注入漏洞已被评为低风险漏洞,因为它无法在默认条件下被利用。
漏洞标识符:
- 数据库一致性检查器中的缓冲区溢出漏洞: CAN-2002-0644
- 副本 (replica)存储过程中的 SQL 注入漏洞:CAN-2002-0645
测试的版本:
Microsoft 测试了 SQL 7.0 和 2000(及其关联的 MSDE 版本),以评估它们是否受这些漏洞的影响。 以前的版本不再 受支持,可能会或不受这些漏洞的影响。
常见问题解答
此修补程序消除了哪些漏洞?
此修补程序消除了影响 SQL Server 2000 的两个新报告的安全漏洞:
- 影响控制台命令集合(称为数据库一致性检查器)的漏洞,这可能导致已拥有特权的用户获得其他权限。
- 在非默认条件下,攻击者可以在非默认条件下的漏洞在 SQL Server 上执行操作系统命令。
此修补程序是否累积?
此修补程序确实取代了以前发布的所有涉及 SQL Server 2000 数据库引擎的安全修补程序。 但是,应用此修补程序本身不足以完全保护 SQL Server 2000 服务器:
- Microsoft 安全公告 MS02-035 中讨论的 SQL Server 2000 安全修补程序需要通过工具而不是修补程序进行修正。 该工具只需运行一次,因此以前运行过该工具的客户无需执行其他操作。 但是,安装此修补程序不会导致该工具运行。
- 此修补程序不包括任何涉及 SQL Server 的 Microsoft 数据访问组件(MDAC)或联机分析处理(OLAP)技术安全漏洞的修补程序。 这些问题的修补程序(在下面的“注意事项”部分列出)必须单独应用。
“受影响的版本”部分表示,Microsoft 桌面引擎(MSDE)也受这些漏洞的影响。 什么是 MSDE?
Microsoft 桌面引擎(MSDE)是一个数据库引擎,它基于 SQL Server 2000 技术构建和构建,并作为多个 Microsoft 产品的一部分提供,包括 Microsoft Visual Studio 和 Microsoft 办公室 Developer Edition。 MSDE 版本与 SQL Server 版本之间存在直接连接。 MSDE 2000 基于 SQL Server 2000。
数据库一致性检查器中的缓冲区溢出漏洞(CVE-2002-0644):
此漏洞的范围是什么?
作为 SQL Server 2000 的一部分提供的多个实用工具包含 缓冲区溢出 漏洞。 在所有情况下,漏洞的范围都是相同的,并且可能使攻击者能够完全控制数据库。
这些漏洞共享几个重要的缓解因素。 首先,为了利用任何漏洞,攻击者需要已经拥有对数据库的重要特权。 其次,在大多数情况下,攻击者无法使用漏洞来获取系统本身的特权,而只能利用 SQL Server 获得特权。
导致漏洞的原因是什么?
由于 SQL Server 2000 中提供的多个数据库一致性检查器(DBCC)实用工具包含处理用户输入的代码部分中未检查缓冲区,因此漏洞会导致漏洞。
什么是 DBC?
DBC 是 SQL Server 2000 的一部分提供的实用工具程序。 他们的目的是为数据库管理员提供一种简单的方法来执行常见的管家任务。 例如,DBC 可用于对数据库进行碎片整理、修复次要错误、显示使用情况统计信息等。 SQL Server 2000 联机帮助工具中包含 SQL Server 2000 中提供的 DBC 的完整列表。
谁可以执行 DBC?
当然,数据库管理员可以执行 DBC,因为它们完全控制服务器。 此外,分配有db_owners或db_ddladmin 固定服务器角色 的用户可以执行一个或多个 DBC。
什么是固定服务器角色?
SQL Server 中的固定服务器角色类似于 Windows 中的用户组。 特权是根据固定服务器角色分配的,管理员通过向特定用户添加或删除角色来规范用户可以对 SQL 数据库执行的操作。
db_owner角色完全控制数据库,但对 SQL Server 本身没有管理控制权。 db_ddladmin角色(虽然也是管理角色)的特权比db_owner角色要少。 Dl_ddladmin成员可以在数据库上执行和管理 数据定义语言 语句,从而允许他们创建表和视图,但它们在数据库或服务器上没有任何更广泛的权限。
SQL Server 2000 附带的 DBC 有什么问题?
在使用这些参数之前,多个 DBC 无法正确检查输入参数。 如果用户使用特殊格式的参数执行了受影响的 DBC 之一,则有可能在 DBCC 中溢出缓冲区。
此漏洞使攻击者能够执行哪些操作?
能够运行 DBCC 的攻击者可以使用这两个目的之一的漏洞。
- 通过用随机数据溢出缓冲区,攻击者可能会导致 SQL Server 服务失败。
- 通过用精心选择的数据将其溢出,攻击者可以修改 DBCC,以在帐户 SQL Server 的上下文中执行攻击者选择和执行代码的操作。
谁可以利用此漏洞?
只有能够运行 DBC 的用户才能利用漏洞。 如上所述,只有被授予db_owner或db_ddladmin角色的系统管理员和用户才能执行此操作。 当然,管理员管理员已经完全控制了 SQL Server,因此漏洞不会向他们提供任何新的特权。 但是,该漏洞将为db_owner或db_ddladmin提供一种方法来获得其他特权。
我认为db_owner和db_ddladmin角色已经拥有管理权限。 为什么这表示安全漏洞?
db_owner和db_ddladmin角色确实具有特权。 但是,在这两种情况下,它们仅授予对单个数据库的权限。 如果服务器上托管了多个数据库,则对一个数据库具有db_owner或db_ddladmin权限的用户不一定对服务器上的另一个数据库具有特权。
相比之下,SQL Server 服务帐户对服务器上托管的所有数据库具有特权。 缓冲区溢出是安全漏洞,因为通过它们,db_owner或db_ddladmin可以获得 SQL Server 本身的权限,从而完全控制服务器上托管的所有数据库。
漏洞是否使攻击者能够控制整个计算机?
不在默认条件下。 默认情况下,SQL Server 服务仅配置有 Windows 域用户权限。 在大多数情况下,db_owner或db_ddladmin已有域用户权限,因此漏洞不会提供获取操作系统权限的方法。 当然,如果系统管理员将 SQL Server 服务配置为使用更高的权限运行,则漏洞将带来同样更高的风险。
如果攻击者使用漏洞导致 SQL Server 服务失败,则需要什么才能还原正常操作?
SQL Server 管理员可以通过重启 SQL Server 服务来还原正常操作。
此漏洞是否会影响 SQL Server 7.0?
否。 尽管 SQL Server 7.0 确实包含 DBC,但其中没有一个受漏洞影响。
修补程序的作用是什么?
该修补程序通过在受影响的 DBC 中设置适当的缓冲区检查来消除漏洞。
复制存储过程中的 SQL 注入漏洞(CVE-2002-0645):
此漏洞的范围是什么?
作为 SQL Server 2000 的一部分提供的多个存储过程包含一个漏洞,如果攻击之前管理员创建了特定的用户帐户,攻击者就可以在数据库服务器上执行操作系统命令。
该漏洞受两个重要约束的约束:
- 如果遵循最佳做法,则不受漏洞影响的存储过程都不应可供非特权用户访问。 其中一个程序只能由已在系统上具有重大管理权限的用户运行;另一个只能由能够以交互方式登录到 SQL Server 的用户运行。
- 只需运行包含该漏洞的两个存储过程之一就不足以允许攻击者利用它。 管理员需要启用 SQL Server 代理代理帐户。 默认情况下,帐户处于禁用状态。
导致漏洞的原因是什么?
此漏洞会导致漏洞,因为 SQL Server 2000 中与副本 (replica)关联的两个存储过程容易受到 SQL 注入攻击。
什么是存储过程?
SQL Server 中的存储过程类似于其他上下文中的脚本或宏。 它们由可以作为单元执行的命令集合组成。 SQL Server 附带各种存储过程;在这种情况下,SQL Server 2000 附带的两个副本 (replica)存储过程易受攻击
什么是副本 (replica)?
复制是一组技术,可用于在多个站点上保留相同数据的副本。 例如,地理位置分散的公司可能需要将人员数据库的副本托管在位于各个分支机构的服务器上,以确保高可用性和性能。 但是,确保一个办公室所做的任何更改也反映在其他办事处数据库中,这一点非常重要。 复制是发生这种情况的过程。 MSDN 托管 SQL Server 中副本 (replica)工作原理的详细说明。
SQL Server 2000 中的复制存储过程有什么问题?
与 副本 (replica)tion 关联的 SQL Server 2000 中的两个存储过程包含 SQL 注入漏洞。
什么是 SQL 注入漏洞?
解释 SQL 注入的最简单方法是通过方案。 假设网站创建了一个应用程序,以便允许访问者访问该网站搜索联机数据库以查找特定字词。 此外,假设应用程序只需获取用户提供的任何输入,将其插入数据库查询并运行查询,即可运行该应用程序。 在某些情况下,攻击者可能提供 SQL 语句而不是文本,结果为 Web 应用程序运行查询时,也会执行攻击者的命令。 此类漏洞称为 SQL 注入漏洞。
当程序在使用 SQL 注入漏洞之前未正确验证其输入时,通常会发生 SQL 注入漏洞。 这正是此处的两个存储过程的情况 - 它们不会检查输入值中存在 SQL 命令,而是盲目插入它们提供的任何输入。
谁可以执行包含缺陷的两个存储过程?
其中一个存储过程只能由数据库管理员或db_owner固定数据库角色的成员的用户执行。 另一个权限应要求相同的权限级别,但由于权限中的错误,实际上可由能够以交互方式登录到服务器的任何用户执行。
但是,请记住一个重要的附加因素。 无法执行其中一个存储过程。 为了实际利用漏洞,管理员需要以前启用SQL Server 代理代理帐户。
SQL Server 代理代理帐户是什么,它的作用是什么?
SQL Server 代理代理帐户是 SQL Server 代理使用的特殊用途用户帐户,在为非 sysadmin 角色成员的用户执行作业或命令时xp_cmdshell。 帐户默认处于禁用状态,只能由管理员启用。 即使启用,它也仅使用管理员配置的权限运行。 当然,如果遵循了最佳做法,这些做法应是低特权。
此漏洞会使攻击者能够执行哪些操作?
如果SQL Server 代理代理帐户处于默认状态(已禁用),则无法利用该漏洞。 如果帐户已启用,该漏洞可能会使攻击者能够执行这两个存储过程之一来执行 SQL 注入攻击,并在服务器上运行 SQL 或操作系统命令。
此漏洞是否会影响 SQL 7.0?
否。 SQL 7.0 中不存在包含漏洞的存储过程。
修补程序如何消除漏洞?
修补程序通过两种方法消除漏洞。 首先,它将代码添加到存储过程,以确保在使用这些输入之前正确验证输入。 其次,它会设置受影响 SP 的正确权限,以便默认情况下它们对经过身份验证的用户不可用。
修补程序可用性
下载此修补程序的位置
SQL Server 2000:
有关此修补程序的其他信息
安装平台:
此修补程序只能安装在运行 SQL Server 2000 Service Pack 2 的系统上。
包含在将来的 Service Pack 中:
此问题的修补程序将包含在 SQL Server 2000 Service Pack 3 中。
需要重新启动: 否。 应用修补程序后,仅需要重启 SQL Server 和 SQL 代理服务
可以卸载修补程序: 是的。 描述安装说明的readme.txt还包含有关删除修补程序的说明。
取代的修补程序: 此修补程序取代了 Microsoft 安全公告 MS02-034 中提供的修补程序,该修补程序本身是累积修补程序。
验证修补程序安装:
- 若要确保正确安装修补程序,请通过咨询 Microsoft 知识库文章 </https:>https 中文件清单中列出的文件的日期/时间戳来验证各个文件:
注意:
- 此修补程序不包括 Microsoft 安全公告 MS02-035 中提供的 Killpwd 工具的功能。
- 该修补程序不会取代 SQL Server 2000 下 MDAC 或 OLAP 之前发布的任何修补程序。 在撰写本文时,这些修补程序包括以下文章中讨论的修补程序:
- 安装修补程序的过程因服务器的特定配置而异。 系统管理员应确保他们读取修补程序包中的Readme.txt文件,以确保正确安装修补程序。
本地化:
此修补程序的本地化版本在“修补程序可用性”中讨论的位置可用。
获取其他安全修补程序:
可从以下位置获取其他安全问题的修补程序:
- 安全修补程序可从 Microsoft 下载中心获取,可通过执行关键字 (keyword)搜索“security_patch”来轻松找到。
- WindowsUpdate 网站提供了使用者平台的修补程序
其他信息:
确认
Microsoft 感谢Cesar Cerrudo 向我们报告此问题,并与我们合作保护客户。
支持:
- Microsoft 知识库文章Q316333讨论此问题,此公告发布后大约 24 小时可用。 可以在 Microsoft Online 支持网站上找到知识库文章。
- Microsoft 产品支持服务提供技术支持。 与安全修补程序关联的支持调用不收取任何费用。
安全资源:Microsoft TechNet 安全网站提供有关 Microsoft 产品安全性的其他信息。
免责声明:
Microsoft 知识库中提供的信息“按原样”提供,不提供任何形式的担保。 Microsoft 不明确或暗示所有保证,包括适销性和针对特定用途的适用性和适用性的保证。 在任何情况下,Microsoft Corporation 或其供应商都应对任何损害负责,包括直接、间接、附带、后果性、业务利润损失或特殊损害,即使 Microsoft Corporation 或其供应商被告知存在此类损害的可能性。 某些州不允许排除或限制后果性或附带性损害的责任,因此上述限制可能不适用。
修改:
- V1.0(2002 年 7 月 24 日):公告已创建。
- V1.1(2002 年 7 月 29 日):警告部分更新为删除 MS02-020 未取代的错误语句。
构建于 2014-04-18T13:49:36Z-07:00</https:>