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

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,并在 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 路径。

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

新漏洞

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

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

在将补丁反向转换为绕过漏洞的过程中,我们在 2023 年 7 月注意到了 CrackUrlFile 中增加的新代码,它似乎与我们的绕过漏洞没有关联(图 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)。

如果您想测试自己的机器是否有可能出现此问题,可以下载我们的 概念验证 (PoC),它会导致资源管理器崩溃。(使用之前,请仔细阅读我们的 安全研究报告 以了解该 PoC 的特性及风险。)

 我们创建了一个指向漏洞路径的快捷方式(.lnk 文件)。一旦受害者查看该快捷方式所在的目录,漏洞就会在资源管理器中触发并导致立即崩溃(图 2)。 图 2:执行 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、物联网及移动设备等各种架构方面的低级别安全研究和漏洞研究并拥有丰富的经验。他喜欢了解复杂机制的工作原理,尤其是它们是如何失效的。