不断发现漏洞:Outlook Patch Analysis 发现 Windows API 中存在重大漏洞
编辑和内容补充:Tricia Howard
执行摘要
Akamai 研究人员 Ben Barnea 在 Internet Explorer 组件中发现了一个新的重要漏洞,该漏洞编号为 CVE-2023-29324 ,CVSS 基本评分为 6.5。
该漏洞导致 Windows API 函数 ( MapUrlToZone ) 错误地将远程路径视为本地路径。
MapUrlToZone 通常用作一种安全措施。尤其是,它用于抵御 Outlook 严重漏洞 CVE-2023-23397 (在 3 月 Patch Tuesday中得到修补)。
互联网上未经身份验证的攻击者可以利用该漏洞强制 Outlook 客户端连接到攻击者控制的服务器。这将导致 NTLM 凭据被盗。这是一个“零点击”漏洞,这意味着,可以在没有用户交互的情况下触发该漏洞。
所有 Windows 版本都受该漏洞的影响。因此,Windows 上的所有 Outlook 客户端版本都可能遭到利用。但是,Microsoft 表示,安装了 3 月更新的 Exchange 服务器去掉了这个易受攻击的功能,从而防止易受攻击的客户端遭到利用。
本着负责任的态度,我们已将该问题披露给 Microsoft,此问题在 2023 年 5 月 Patch Tuesday 中得到了解决。
前言
在 2023 年 3 月 Patch Tuesday 中,修复的漏洞包括一个编号为 CVE-2023-23397的 Outlook 严重漏洞。
该漏洞允许攻击者强制某 Outlook 客户端连接到攻击者的服务器。随后,该客户端会向攻击者的服务器发送 NTLM 凭据,这使攻击者能够离线破解密码,或在中继攻击中利用该密码。此漏洞可以通过互联网进行远程利用,无需任何用户交互(零点击)。
根据 Microsoft 威胁情报部门的评估,一个俄罗斯攻击者在大约一年的时间里,在针对欧洲政府、交通、能源和军事领域的多家企业的定向攻击中利用了这个漏洞。
在我们 对补丁执行的分析中,我们发现了一种方法,可以绕过针对该严重漏洞提供的修复。在这篇博文中,我们将讨论原始漏洞、相应的修补程序以及绕过该修补程序的手段。
原始漏洞
当攻击者发送带自定义通知音的提醒电子邮件时,会触发该 Outlook 漏洞(已在 3 月得到修补)。此自定义声音由攻击者指定为路径,在此过程中使用的是扩展的 MAPI 属性 PidLidReminderFileParameter。攻击者可以指定一个 UNC 路径,该路径会导致客户端从任意 SMB 服务器检索声音文件。在与远程 SMB 服务器的连接中,会在协商消息中发送 Net-NTLMv2 哈希值。
为了解决这个问题,代码现在调用 MapUrlToZone 来确认路径未指向互联网 URL。如果路径指向互联网 URL,则会使用默认的提醒声音,而不是自定义声音。
绕过抵御措施
我们来首先看看 Outlook 中的相关代码流。在加载自定义声音文件的过程中,会调用两个重要的函数:
MapUrlToZone — 返回 URL 的区域;用于确定路径是本地路径、内网路径或受信任的路径(而不是互联网路径)。
CreateFile — 打开声音文件的句柄
注意: SearchPath 也先于 CreateFile 得到调用,但它对路径的处理方式是类似的,因此,为了便于理解,我们在此处只提到 CreateFile。
为了查找存在的绕过,我们需要找到一个符合以下条件的路径:MapUrlToZone 认为该路径是本地路径、内网路径或受信任的区域,同时,CreateFile 也会把它视为互联网域。
为了调用 MapUrlToZone,我们可以使用 以下 PowerShell 脚本 ,该脚本会通过 组件对象模型 (COM) 调用该函数。
为了验证 MapUrlToZone 是一种适当的抵御措施,我们可以对其进行测试,方法是在触发漏洞的相同路径(一个带有互联网域名的绝对 UNC 路径)上调用它。MapUrlToZone 返回 3,表明该路径在互联网区域中,这一结果与预期的相同。
PS C:\Users\research1>[IEZones]::MapUrlToZone('\\Akamai.com\file.wav')
3
我们可以选择聪明的做法,通过使用 本地设备路径来调整我们的 UNC 路径:
PS C:\Users\research1>[IEZones]::MapUrlToZone('\\.\UNC\Akamai.com\file.wav')
3
如上所示,MapUrlToZone 仍然将该路径视为互联网区域,因此该路径仍然会被阻止(符合修复措施的意图)。
但是,通过在“UNC\”后面再添加一个“\”,MapUrlToZone 现在会返回 0,这表示本地路径:
PS C:\Users\research1>[IEZones]::MapUrlToZone('\\.\UNC\\Akamai.com\file.wav')
0
MapUrlToZone 认为这个 URL 是本地路径。现在,重要的问题是:CreateFile 对这个 URL 的判断是什么?它会访问本地文件,还是通过 SMB 进行下载?
答案即将揭晓...
很好!DNS 请求已发送,用以检索 Akamai.com 的 IP(图 1)。我们似乎找到了一个路径,MapUrlToZone 认为该路径是本地路径,但该路径却导致 CreateFile 向互联网发出了请求!
现在,我们来触发原始 Outlook 漏洞,这次绕过了新增的抵御措施。
正如您在图 2 中看到的,一旦提醒弹出,Outlook 就会连接到远程服务器,导致进行 NTLM 身份验证。
Microsoft 表示, 安装了 3 月软件更新的 Exchange 服务器将删除 PidLidReminderFileParameter 属性,从而消除自定义声音文件功能。因此,只有运行 Outlook 客户端(具有未打补丁的 Exchange 服务器)的机器才容易受到此问题的影响。
根本原因
此问题似乎是由 Windows 中对路径的复杂处理方式造成的。
MapUrlToZone 调用函数 CreateUri,该函数错误地将路径“\\.\UNC\\Akamai.com\file.wav”转换为“/.//UNC//Akamai.com/file.wav”。
要了解后一个路径触发的访问,我们可以使用 James Forshaw 的 博文中的 ConvertDosPathToNtPath 脚本。
PS C:\Users\research1> ./DosToRelativeNT.exe /.//UNC//Akamai.com/file.wav
Converting: '/.//UNC//Akamai.com/file.wav'
To: '\??\C:\UNC\Akamai.com\file.wav'
Type: RtlPathTypeRooted
FileName: file.wav
FullPathName: 'C:\UNC\Akamai.com\file.wav'
我们现在可以看到,此路径指向本地 C: 盘上一个名为“UNC”的目录。这显然是一个本地目录,因此 MapUrlToZone 返回 0。
另一方面,CreateFile 首先通过调用 RtlpDosPathNameToRelativeNtPathName,将原始路径从 DOS 路径转换为 NT 路径。同样,通过使用脚本,我们可以观察此转换的输出。
PS C:\Users\research1> ./DosToRelativeNT.exe \\.\UNC\\Akamai.com\file.wav
Converting: '\\.\UNC\\Akamai.com\file.wav'
To: '\??\UNC\Akamai.com\file.wav'
Type: RtlPathTypeLocalDevice
FileName: file.wav
FullPathName: '\\.\UNC\Akamai.com\file.wav'
注意,这次结果并没有指向本地驱动器。那么,为什么会触发 SMB 请求呢?从上面的代码段可以看出,生成的路径是“\??\UNC\Akamai.com\file.wav”。对这个 NT 路径的访问将导致对象管理器将 IO 请求路由到多 UNC 提供程序 (MUP) 驱动程序。(这是因为,“UNC”的全局对象目录条目是指向“\Device\Mup”的符号链接。)由于 RtlpDosPathNameToRelativeNtPathName 移除或折叠了额外的“\”,现在的路径只包含互联网域名。
我们认为,这种混淆有可能导致符合以下条件的其他程序出现漏洞:这些程序在用户控制的路径上使用 MapUrlToZone,然后在同一路径上使用文件操作(比如 CreateFile 或类似的 API)。另外,我们也不能排除掉在调用 CreateUri 的程序中产生的其他问题。
检测和抵御
Microsoft 发布了关于检测和抵御原始 Outlook 漏洞的 全面指南 。根据我们的观察,所有指定的方法都适用于这个新漏洞,因为它们不依赖于 PidLidReminderFileParameter 属性中指定的 URL。
总结
此漏洞是补丁缺陷分析导致出现新漏洞和绕过的另一个示例。具体到这个漏洞,只需添加一个字符就可以实现一次严重的补丁绕过。
我们希望完全移除自定义提醒声音功能,因为它带来的安全风险比它为用户提供的价值更大。这是一个“零点击”媒体解析攻击面,有可能包含严重的内存损坏漏洞。考虑到 Windows 的普及性,消除一个如此成熟的攻击面可能会产生一些非常积极的影响。
在我们为了保护客户和社区而采取的后续举措中,我们将继续分析修补程序和其他系统中存在的漏洞。要了解 Akamai 最新的安全研究, 请在 Twitter 上关注我们。
我们要感谢 Microsoft 在处理这个问题上给予的合作和快速响应。