需要云计算吗? 即刻开始体验

不断发现漏洞:Outlook Patch Analysis 发现 Windows API 中存在重大漏洞

Ben Barnea

寫於

Ben Barnea

May 10, 2023

Ben Barnea

寫於

Ben Barnea

Ben Barnea is a Security Researcher at Akamai with interest and experience in conducting low-level security research and vulnerability research across various architectures, including Windows, Linux, IoT, and mobile. He enjoys learning how complex mechanisms work and, more important, how they fail.

Akamai 研究人员 Ben Barnea 在 Internet Explorer 组件中发现了一个新的重要漏洞,该漏洞编号为 CVE-2023-29324,CVSS 基本评分为 6.5。

编辑和内容补充: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 中的相关代码流。在加载自定义声音文件的过程中,会调用两个重要的函数:

  1. MapUrlToZone — 返回 URL 的区域;用于确定路径是本地路径、内网路径或受信任的路径(而不是互联网路径)。

  2. 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 进行下载?

答案即将揭晓...

屏幕截图显示,一旦访问该远程 URL,就会发出 DNS 请求 图 1:用 UNC 路径模拟一个 CreateFile 调用,该调用导致发生 DNS 请求

很好!DNS 请求已发送,用以检索 Akamai.com 的 IP(图 1)。我们似乎找到了一个路径,MapUrlToZone 认为该路径是本地路径,但该路径却导致 CreateFile 向互联网发出了请求!

现在,我们来触发原始 Outlook 漏洞,这次绕过了新增的抵御措施。

触发原始 Outlook 漏洞,这次绕过了新增的抵御措施 图 2:触发日历事件,这会导致向远程服务器进行 NTLM 身份验证

正如您在图 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 在处理这个问题上给予的合作和快速响应。



Ben Barnea

寫於

Ben Barnea

May 10, 2023

Ben Barnea

寫於

Ben Barnea

Ben Barnea is a Security Researcher at Akamai with interest and experience in conducting low-level security research and vulnerability research across various architectures, including Windows, Linux, IoT, and mobile. He enjoys learning how complex mechanisms work and, more important, how they fail.