两个漏洞的故事 - 分解 CVE-2023-36884 和感染链
2023-8-31 18:2:39 Author: mp.weixin.qq.com(查看原文) 阅读量:37 收藏

2023 年 7 月 11 日,微软发布了一个补丁,修复了多个被主动利用的 RCE 漏洞,并披露了由名为 Storm-0978 的威胁参与者发起的网络钓鱼活动,该活动针对欧洲和北美的实体。

该活动使用了一个被跟踪为 CVE-2023-36884 的零日漏洞,这是 Windows 搜索文件中的一个远程代码执行漏洞,通过精心设计的 Office 开放可扩展标记语言 (OOXML) 文档利用与乌克兰世界大会 (UWC) 相关的特定地缘政治诱惑。)。

在本博客中,我们将深入研究针对政府实体的针对性攻击中使用的恶意 OOXML 和嵌入式富文本格式 (RTF) 文档漏洞,并可视化攻击序列和漏洞利用链。

介绍

在此攻击活动中,威胁参与者使用了多个带有名称和哈希值的 OOXML 文档:

Overview_of_UWCs_UkraineInNATO_campaign.docx [2400b169ee2c38ac146c67408debc9b4fa4fca5f]

Letter_NATO_Summit_Vilnius_2023_ENG (1).docx [3de83c6298a7dc6312c352d4984be8e1cb698476]

图 1 – 记录活动中使用的诱饵

在通过内部构建的 Office 文件分析引擎快速扫描 OOXML 诱饵时,我们注意到内部嵌入了 RTF 文档,并通过同一扫描引擎进一步分析 RTF,发现了多个可疑指标,如下所示。这引发了我们对用于将 RTF 嵌入 OOXML 的技术进行调查,看看我们是否可以应用相同的方法来重建导致感染链的诱饵。

图 2 - 文件诱饵检测

此活动中使用的两种漏洞的文档结构与 Follina 攻击 (CVE-2023-30190) 中使用的文档结构类似。然而,在 Follina 漏洞利用中,对象链接用于将 OOXML 文档链接到外部托管的 HTML 文件,如我们之前的博客中所述。

在利用 CVE-2023-36884 的 OOXML 中,替代格式块 (AltChunk / aFChunk)在 OOXML 中嵌入 RTF 文件。当容器文档压缩时,AltChunk 类的使用由 document.xml 文件中的w:altChunk元素标记指示,如下所示:

图 3 – 使用 altChunk 嵌入恶意 RTF 的 document.xml

CVE-2023-36884 中使用“替代块”

传统上,Office 利用对象链接和嵌入 (OLE) 将外部内容嵌入到容器应用程序中。在此漏洞利用中,使用了altChunk(代表替代块) ,这是一个 OpenXML 标准,提供了将两个文档合并为一个更大文档的方法。

AltChunk元素指示容器应用程序导入存储在文档替代部分(在本例中为 RTF 文档)中的内容。

altChunk元素指定 OOXML 文档中的位置,用于将指定文件的内容插入到目标文档中

要插入的内容类型和文件位置由关系TypeTarget元素指定,其关系 ID 与上面在/word/_rels目录中的document.xml.rels中使用的相同,如下面的利用所示。 

图 4 – 引用嵌入 RTF 的关系目标

根据规范,关系类型应为“ .../relationships/aFChunk ”,如上所示,TargetMode指定为“Internal”,该属性缺失,但 Office 似乎忽略了该属性并仍然处理文档。

该方法可以导入多种内容类型,包括application/rtf、application/html、application/text、application/xml等,有效地允许OOXML文档作为其他文件格式漏洞利用的载体。

嵌入式RTF分析(afChunk.rtf)

深入研究嵌入的 RTF 文档,它恰好有两个嵌入对象,它们通过重定向链下载额外的恶意软件有效负载。RTF 内嵌入的 OLE 对象之一是由“ objautlink ”RTF 控制字后跟“ objupdate ”指示的链接对象,它强制对象/链接在显示链接对象的内容之前进行更新。 

图 5 – RTF 中的嵌入对象 1

此外,嵌入对象包含外部 IP 的通用命名约定 (UNC) 路径,启动与外部托管 SMB 服务器的连接以下载另一个文件 file001.url (SHA-1 70560aff35f1904f822e49d3316303877819eef8 )。这又是使用 iframe 源嵌入 HTML 内容的 Word 文档,在启动原始文档时呈现。

图 6 – 使用 OLE2LINK 技术链接 RTF 文档的 OLE 对象视图

而另一个OLE对象也是一个链接对象,其objclass为“xmlfile”,oleclsid为“StdOleLink”对象。这实际上意味着 StdOleLink OLE 对象用于将 RTF 链接到外部托管的 XML 文件。

这是广泛采用的技术之一,也被广泛利用的 CVE-2017-1099 中。但是,仍然可以以类似的方式使用此链接功能来利用其他渲染器组件中的逻辑缺陷。

RTF 启动后,将启动与外部 IP 的连接以检索 start.xml,然后由SAX XML Reader 6.0 (msxml6.dll)呈现该文件。检索到的 XML 文件又嵌入了指向同一路径中另一个文件 RFile.asp 的 iframe 源。部分感染链如下图所示。

图 7 – RTF 中的嵌入对象 2

图 8 – 使用 OLE2LINK 技术链接 RTF 文档的 OLE 对象视图

图 9 – RTF 文档启动连接以检索 start.xml

图 10 - 包含 iframe 的 start.xml 内容

如下面的RFile.asp代码所示,它以 30000 秒的超时开始,然后加载另一个 iframe,其中包含从同一攻击者控制的服务器 104.234.239.26 检索 .htm 文件,该服务器具有基于动态生成的文件受害者的 IP 地址和 HTTP 请求路径中的唯一 ID。

图 11 – RFile.asp 的内容

显然,感染链是一系列 iframe 重定向,并通过获取 .htm 文件和随后的 search-ms 文件继续,最终下载最终的有效负载。通过以下信息图可以很好地可视化整个感染链:

图 12 – CVE-2023-36884 感染链的可视化https://twitter.com/r00tbsd/status/1679042071477338114

我们可以使用 URL Moniker 和“AltChunk”来重建漏洞吗?

下面的 C# 示例代码使用DocumentFormat.OopenXML包,并演示了如何使用攻击者在此活动中使用的“altChunk”类来重建嵌入 RTF 的 OOXML 文档。此代码会将Document1.rtf嵌入到Document2.docx中,并创建另一个名为 CVE-2023-36884.docx 的文件。

为了能够将 RTF 文档 altChunk 转换为 OOXML,代码首先初始化一个唯一的 altChunkId 作为关系 id。然后,它使用 altChunkID 创建新的 AlternativeFormatImportPart,并使用 AlternativeFormatImportPartType 作为 RTF 调用 OpenXML API AddAlternativeFormatImportPart 添加到主文档 (CVE-2023-36884.docx) 

如前面部分所述,AlternativeFormatImportPartType是枚举类型,它指定要导入的内容类型。

图 13:AlternativeFormatImportPartType 用于导入多种内容类型

随后,创建新的 AltChunk 后,Document1.rtf 的内容将插入到主文档的末尾 (CVE-2023-36884)。我们相信作者一定使用了相同的技术来构建该漏洞。

图 14:Document1.rtf

图 15:Document2.docx

图 16:使用 AltChunk 将 RTF 插入 DOCX 的代码

图 17:重建的 POC 漏洞利用与启动感染链的 start.xml 连接

结论:
Microsoft Office 仍然是攻击者的首要目标,尤其是在滥用功能以及利用设计和逻辑缺陷方面。随着本机内存损坏缺陷逐渐减少以及武器化的固有挑战,这种功能丰富的应用程序及其更广泛的攻击面为攻击者提供了一条阻力最小的路径。

在我们之前的一篇博客中,我们预测了这种利用趋势,CVE-2023-36884 是对此的又一次验证。我们相信这种趋势将继续下去,应用程序功能中的漏洞及其容易被利用仍然是组织面临的挑战。

因此,端点和网络安全解决方案必须不断发展才能应对这些挑战。通过应用安全的应用程序设计和开发,

妥协指标 (IOC)


文章来源: https://mp.weixin.qq.com/s?__biz=MzA5ODA0NDE2MA==&mid=2649785436&idx=2&sn=3d2f85e224251932c9b6d433fe75b813&chksm=8893b433bfe43d2539407b83b1193ef3a5792107a7643250e04eb16fa0d4e35528e9f1f639c3&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh