CreateRCE — CreateUri 中的又一个漏洞

Akamai Wave Blue

寫於

Ben Barnea

April 12, 2024

Akamai Wave Blue

寫於

Ben Barnea

Ben Barnea 是 Akamai 的安全研究人员,他专注于 Windows、Linux、物联网及移动设备等各种架构方面的低级别安全研究和漏洞研究并拥有丰富的经验。他喜欢了解复杂机制的工作原理,尤其是它们是如何失效的。

Akamai 研究人员 Ben Barnea 在 Microsoft Windows 中发现了一个关键漏洞,该漏洞编号为 CVE-2023-35628。
Akamai 研究人员 Ben Barnea 在 Microsoft Windows 中发现了一个关键漏洞,该漏洞编号为 CVE-2023-35628。

内容提要

  • Akamai 研究人员 Ben Barnea 在 Microsoft Windows 中发现了一个关键漏洞,该漏洞编号为 CVE-2023-35628

  • 互联网上的攻击者无需任何用户交互(零点击),即可在 Outlook 客户端上触发该漏洞

  • 该漏洞出现在 CreateUri 函数对路径的解析之中。目前,我们已经发现有两种方法可以触发此漏洞:(1) 通过向 Outlook 客户端发送特制的电子邮件;或者 (2) 诱使用户在文件资源管理器中导航至包含恶意下载文件的文件夹。

  • 此漏洞已通过负责任的披露流程报告给 Microsoft,Microsoft 已在 2023 年 12 月的 Patch Tuesday 中修复了该漏洞。

  • 安装了 2023 年 12 月软件更新的 Windows 计算机可以有效防范此漏洞。此外,如果 Outlook 客户端使用的是已经用 2023 年 3 月软件更新进行修补的 Exchange 服务器,那么这些 Outlook 客户端也可以防范这个被滥用的功能。

前言

Microsoft 的产品在企业内无处不在,这使其成为攻击者的一个巨大(且易于获利)的目标。有鉴于此,我们对一系列产品和协议进行了广泛研究,不仅发现了多个漏洞,还构建了相应的工具来帮助检测和抵御攻击。

在此次研究中,我们在 WinAPI 函数 CreateUri 中发现一个新的远程代码执行 (RCE) 漏洞,该函数是作为原始漏洞 CVE-2023-23397 补丁的一部分被调用的。以前的 RCE 漏洞需要将两个漏洞串联在一起才能实现零点击 RCE 基元,而此漏洞可独立实现相同的效果。  除了 Outlook 之外,我们还将向您展示如何在文件资源管理器中触发该漏洞。

漏洞事件始末

2023 年 3 月的 Patch Tuesday解决的漏洞当中,有一个 Microsoft 自行发现的关键 Outlook 漏洞(编号为 CVE-2023-23397),被俄罗斯国家资助的名为 Forest Blizzard 的攻击者在野利用。  

在 2023 年 12 月,Microsoft 和波兰网络司令部发布消息称,他们近期发现同一攻击者试图利用该漏洞进行攻击。攻击者利用该漏洞强制 Outlook 客户端连接到他们操控的服务器。在连接过程中,客户端会将 NTLM 凭据发送给攻击者。攻击者随后可以离线破解这些凭据,或者利用它们执行中继攻击。此漏洞可以通过互联网远程利用,无需任何用户交互(零点击)

在针对此漏洞的补丁发布后,我们发现了两个绕过漏洞和一个声音解析漏洞。将绕过漏洞和解析漏洞串联在一起后,会导致在 Outlook 客户端上形成完整的零点击 RCE 基元。

MapUrlToZone

在修复 Outlook 漏洞 CVE-2023-23397 的补丁中,负责处理自定义提醒声音的代码增加了对 MapUrlToZone 的调用。该调用会检查通过扩展 MAPI 属性 PidLidReminderFileParameter 指定的 URL 是否未指向某个互联网资源。

尽管这样可以抵御初始漏洞,但也增加了新的攻击面,也就是函数 MapUrlToZone 本身;我们控制了传递到 MapUrlToZone 的路径。

MapUrlToZone 执行的解析中,它会调用 CreateUriCreateUri 会创建一个表示统一资源标识符 (URI) 的 IUri 对象。为创建该对象,该函数能够解析 URL 和部分 DOS Windows 路径。

当使用文件路径(例如,使用 file:// scheme,或指向某个文件/目录的 Windows 路径)调用 CreateUri 时,将调用函数 CrackUrlFile。该函数也包含上一篇博文中所述的绕过漏洞。

新漏洞

CrackUrlFile 函数开始执行时,如果它接收的是 URL 而不是 Windows 路径,则会创建输入的副本,然后使用 PathCreateFromUrlW 将 URL 副本转换为 Windows 路径。工作缓冲将被标记为动态分配,从而确定稍后要将其释放。如果该函数接收到 Windows 路径,则会直接使用输入的路径,因而不需要释放缓冲区指针。

在工作缓冲解析期间,可以将缓冲区前移,例如,对于本地设备路径(以“\\.\”或“\\?\”开头),该函数会将指针前移 4 个字符。如果设备名称是“UNC\”,则会再多前移 4 个字符。如果有多个反斜杠,该函数还会将缓冲区前移至超过重复的反斜杠。

在逆向分析修复那些绕过漏洞的补丁时,我们注意到 CrackUrlFile 在 2023 年 7 月增加了新代码,而这些代码似乎与我们的绕过漏洞无关(图 1)。

在将补丁反向转换为绕过漏洞的过程中,我们在 2023 年 7 月注意到了 CrackUrlFile 中增加的新代码,它似乎与我们的绕过漏洞没有关联(图 1)。 图 1:新增代码的反编译结果

在对路径进行解析时,该函数会检查路径组件是不是一个驱动器路径或根路径。如果是这样,则会将该路径标记为本地路径。如果该路径是一个驱动器路径,新代码会将原来的缓冲区指针覆盖为指向该路径组件的指针(前移的缓冲区)。

这就是错误的由来:保存的是已前移的指针。随后,若原始缓冲区指针(图 1 中的 PPWorkingBuffer)已被动态分配,则会将其恢复并释放。由于它已被前移后的指针覆盖,调用 free() 函数时使用的将不是由 malloc 函数返回的指针。这将为攻击者提供一个基元,用于向内存分配器植入恶意块的元数据

为了触发这一漏洞,我们首先需要指定一个文件方案 URL,其中包含一个 UNC 路径。然后,我们需要将该路径标记为驱动器路径,所以必须使用一个共享位置 (C:)。用于触发该漏洞的完整路径看上去类似于下图:

  file://./UNC/C:/Akamai.com/file.wav

现在,修复后的代码将使用 RtlMoveMemory 复制路径组件的字节,而不是保存指针。

通过资源管理器触发

尽管寻找此类位置并不在我们的研究范围之内,但我们还是快速尝试了一下:通过 Windows 资源管理器来触发该漏洞。

为执行此操作,我们创建了一个指向漏洞路径的快捷方式 (.lnk file)。一旦受害者打开该快捷方式所在的目录,漏洞就会在资源管理器中触发并导致立即崩溃(图 2)。

图 2:执行 PoC 导致资源管理器崩溃

要检测机器是否受此问题影响,欢迎下载概念验证 (PoC),它将导致资源管理器崩溃。 (使用前,请仔细阅读我们安全研究资料库中有关 PoC 的具体说明及风险。)  

总结

这是我们关于 CVE-2023-23397 潜在影响研究的最后一篇博文。

我们在 2023 年 5 月发现第一个绕过漏洞时,就已建议移除这一被滥用的功能,因为使用 MapUrlToZone 增加了新攻击面。我们还曾提到过,如果以零点击的方式将声音解析攻击面暴露在远程攻击者面前,并且不使用任何沙盒,给用户造成的危险就会大于创造的价值。

在我们的后续研究中,我们发现了两个绕过漏洞、一个声音解析漏洞,最终还发现一个 Windows 路径解析内存损坏漏洞,这些都印证了我们的观点。

通过这些博文,我们希望您学到了一些关于 Windows 路径、声音编解码器和不同漏洞的新知识。我们鼓励其他研究人员也能关注这些补丁,想想如何能够绕过它们。我们不能排除存在更多 MapUrlToZone 绕过漏洞的可能。

还想了解更多相关信息?



Akamai Wave Blue

寫於

Ben Barnea

April 12, 2024

Akamai Wave Blue

寫於

Ben Barnea

Ben Barnea 是 Akamai 的安全研究人员,他专注于 Windows、Linux、物联网及移动设备等各种架构方面的低级别安全研究和漏洞研究并拥有丰富的经验。他喜欢了解复杂机制的工作原理,尤其是它们是如何失效的。