Windows XP 和 Server 2003 帮助与支持中心漏洞深度解析

本文详细分析了MS10-042安全公告中CVE-2010-1885漏洞的技术细节,包括Help and Support Center中的脚本注入、Jet数据库验证绕过机制,以及不同Windows版本的风险差异和缓解措施。

MS10-042: 帮助与支持中心漏洞分析

今天,我们发布了MS10-042安全更新,以解决CVE-2010-1885,这是一个影响Windows XP的严重安全漏洞。Windows Server 2003也包含易受攻击的代码,但我们尚未发现攻击者利用它的方法。更高版本的Windows不包含帮助与支持中心,因此不受影响。

帮助与支持中心漏洞背景

帮助与支持中心漏洞(包括CVE-2010-1885)通常涉及本地内容允许将脚本注入到帮助与支持中心环境中。在CVE-2010-1885的情况下,目标本地内容是一个文件“sysinfomain.htm”。该内容引用了一个辅助库“commonFunc.js”,其中包含基于DOM的XSS。具体来说,commonFunc.js允许将不受信任的查询字符串参数注入到页面中,从而执行攻击者控制的命令。

根据设计,帮助与支持中心允许Windows XP和Windows Server 2003上受信任的帮助内容执行特权命令,以启用与帮助相关的功能。由于存在注入问题,强大的帮助与支持中心环境可以执行任意代码。

关于潜在缓解措施的说明

此漏洞的攻击场景涉及导航到hcp://协议URL。包括Internet Explorer 8在内的浏览器最近开始在对不常见的URL方案进行导航之前实施警告提示。

CVE-2010-1885的一个示例概念验证利用演示了使用Windows Media Player 9导航到hcp://协议并避免IE8提示。较新版本的Windows Media Player在加载任意HTML内容之前会提示,因此不支持此攻击场景。

尽管如此,我们认为浏览器中新引入的协议提示行为最多是深度防御。我们不相信这些提示在所有情况下都能为已识别的帮助与支持中心漏洞提供足够的缓解措施。因此,在MS10-042中未将其称为缓解措施。

排除URL解码作为主要问题

我们对漏洞的分析是,这是由于帮助中心执行的URL验证中的错误,而不是帮助与支持中心内URL解码功能中的错误。

正如原始漏洞报告中所识别的,格式错误的URL可能导致帮助与支持中心URL解码例程失败。这本身是预期的,但帮助与支持中心随后忽略了相关的失败条件,因此生成的解码URL处于可以说是无效的状态。该报告还断言URL解码可能对帮助与支持中心整体URL验证的安全性负责。然而,可以构造一个有效编码的URL,该URL将解码为与无效解码的概念验证URL相同的内存表示。因此,修复URL解码失败的处理不会解决底层漏洞。

深入挖掘

在作为漏洞报告一部分识别的场景中,帮助与支持中心使用包含本地安装的帮助内容索引的Jet数据库验证URL。该数据库位于%windir%\PCHealth\Database\HCdata.EDB。针对数据库发出查询以查找特定的帮助内容。如果此内容在数据库中编入索引,则本地文件被授权在帮助与支持中心内加载。在报告的漏洞情况下,攻击者可能绕过验证并触发导航到sysinfomain.htm,使用恶意构造的URL。

CVE-2010-1885利用了针对Jet数据库的查询不是真正的字符串比较这一事实。实际上,它是由LCMapString API生成的键的比较。因此,攻击者提供的输入映射到一个字符串,该字符串不正确地匹配Jet数据库中包含的内容。当针对数据库发出查询时,数据库代码识别格式错误的文件名存在(多次!),即使它不存在。

Windows Server 2003上的最小风险

事实证明,HCdata.EDB数据库文件在Windows XP和Windows Server 2003之间存在显著差异。在Windows Server 2003上,数据库文件不包含匹配HCP://协议内容的数据库查询所需的基本URL。由于易受攻击的帮助与支持中心代码存在于Windows Server 2003上,我们能够从Windows XP交换EDB文件并观察利用功能。然而,我们无法构造一个使用标准Windows Server 2003 EDB文件的攻击。尽管如此,我们将此问题作为Windows Server 2003上的低严重性漏洞进行处理。

  • MSRC 工程团队博主
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计