GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

admin 2024年4月10日10:13:31评论3 views字数 5930阅读19分46秒阅读模式

GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

TL;DR:我们分析了 GOG Galaxy 2.0(CD Projekt Red 旗下的游戏平台,CD Projekt Red 是《赛博朋克 2077》和《巫师传奇》等世界知名游戏的开发商)与底层文件系统和进程间通信的交互方式(IPC) 其客户端进程与其特权服务之间。这导致发现两个新的安全问题:拒绝服务(分配为CVE-2023-50915)和本地权限升级(分配为CVE-2023-50914),我们将在本博客文章中详细介绍。

最初的分析是我自己开始的,作为更广泛的正在进行的研究项目的一部分,导致了CVE-2023-50915。后来,我的同事 Alex Popovici 与我一起评估该漏洞是否可以在 DoS 之外被利用,并在此过程中帮助发现了CVE-2023-50914 。

为什么是GOG Galaxy?

启动此研究项目的主要目的是进一步了解如何在搜索安全问题时审查和利用 Windows 应用程序和环境。有什么比融合两种热情更好的方法来寻找一致的动力呢?进攻性安全和游戏❤️。

这个过程立即开始,因为我之前对此类目标没有太多经验,所以我开始浏览公开的漏洞报告和帖子,这些报告和帖子符合我的期望,以学习我不熟悉的新技术。我学习了滥用进程间通信、文件系统操作、常用框架(如 Electron 或 Chromium 嵌入式框架)以及其他常见的 Windows 相关错误配置等的不同方法。

当我通读我能找到的每一个资源时,我开始列出一个潜在目标列表,其中包括我能想到的所有当前存在的 Windows 支持的游戏平台,所以基本上,第一种方法是向所有目标发射霰弹枪。同时设定目标,看看之后会发生什么。当时,这个列表如下:

  • Steam(来自Valve

  • Origin(来自Electronic Arts

  • Connect(来自Ubisoft)

  • GOG Galaxy(来自CD Projekt Red

  • Battle.net(来自动视暴雪,现归微软所有)

  • Epic Games(来自Epic Games Publishing

令我惊讶的是,GOG Galaxy 在第一个分析阶段就表现出了有趣的、潜在的不安全行为,我们使用Process MonitorProcess ExplorerWireshark进行了分析,系统中的哪些文件正在被服务操纵,以及通过 IPC 链路发送的内容。这时我注意到第一个问题的存在,在接下来的章节中将对此进行深入解释。

架构

在直接讨论研究结果之前,我想分享一些关于我们面临的目标架构的见解。这可能为您提供足够的工具来了解我们可以使用哪种攻击面,并熟悉我们创建心理威胁模型所遵循的逻辑过程,该模型将相应地优先考虑可用资产。

与旨在满足相同受众的其他平台类似,GOG Galaxy 建立在Client - Service由以下资产组成的模型之上:

  • 客户流程

  • 特权进程(充当服务)

请跟随我完成接下来的小节,以获取有关上面列出的每个组件的更多见解。

客户流程

客户端进程(在本例中称为GalaxyClient.exe)负责处理与前端相关的任务和功能。这基本上涉及处理以下任务:

  • 站点渲染,使用引擎继承主 Web 应用程序逻辑并将其显示回用户(与游戏商店、社区论坛和支持等功能相关)。

  • 操纵游戏内叠加层

  • 处理一些非常基本的游戏库管理任务(仅触发游戏安装或更新、文件系统交互以及不需要进一步提升的任务)。

值得注意的是,该进程代表执行该程序的用户运行,因此,它没有特权。这意味着如果用户PCLautaro执行GOG Galaxy,则该GalaxyClient.exe进程将以其名称及其附加权限启动。

GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

特权进程

另一方面,名为 的特权进程GalaxyClientService.exe处理所有需要任何类型提升的任务。下面列举了与此权限相关的一些任务:

  • 用户通过客户端进程提示后管理游戏安装和更新

  • 操作底层操作系统配置组件(例如使用文件系统中多个不同资产的权限描述符)

  • 负责更新客户端进程组件。

我是否提到过该服务正在运行NT AUTHORITYSYSTEM?本地 Windows 主机安装上的最高特权用户?考虑到这种情况,处理特权操作并不奇怪,这也使其成为查找漏洞时的一个有趣目标,如果我们想找到有影响力的错误,那么这就是要走的路。

GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

进程间通信

如果我们要重新创建一个真正高级的抽象架构图GOG Galaxy,它将如下所示:

GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

如前所述,两者都通过 IPC 通道GalaxyClient.exe进行GalaxyClientService.exe通信,我们假设该通道充当零容量双向链路(在这种类型的链路通道中,发送方等待,直到接收方通知发送方它已收到消息)。

这两个资产还以不同的方式与底层文件系统交互,例如:

  • 创建、修改或删除某些给定文件

  • 修改文件夹结构

  • 修改资产权限

当与 Windows 文件系统交互时,他们将使用与前面部分中已经提到的相对应的不同权限。

CVE-2023-50915:通过任意文件覆盖拒绝服务

问题

因此,回顾一下,GalaxyClient.exeGalaxyClientService.exe进程都将数据写入主 GOG Galaxy 安装目录 ( C:Program Files (x86)GOG Galaxy)

它们以相同的方式编写的内容之一是在C:Program Files (x86)GOG Galaxylogs目录中创建的日志文件,每个进程都会写入自己的日志文件。由于运行的用户继承了权限GalaxyClient.exe,该进程将代表他们写入GalaxyClient.log,并且相反,GalaxyClientService.exe运行为NT AUTHORITYSYSTEM并且在写入内容时不会放弃权限GalaxyClientService.log,这意味着该文件是由该用户写入的同一用户,以下从 Process Monitor 中截取的屏幕截图可以作为证据:

GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

到目前为止,这听起来可能并不是一个问题,但是如果我告诉您 WindowsUsers组具有读取、写入和执行权限呢C:Program Files (x86)GOG Galaxylogs

在调查人们对 GOG Galaxy 子目录结构具有哪种访问权限时,这立即引起了我的注意,因为在这种情况下,我们有一个特权进程将文件写入每个人都可以多种访问权限的文件夹中。

GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

理论滥用

好吧,在面对上述场景后,我的脑海中突然出现了一些问题,以验证我作为攻击者是否可以以某种方式利用它!接下来的步骤正确总结了我的思路:

  • 我们可以控制GalaxyClientService.exe写入位置或写入内容吗?

尽管我们无法控制服务写入GalaxyClientService.log文件的内容(这只是它设计的工作方式),但我绝对可以尝试操纵写入此内容的目标文件。

首先,我考虑使用CreateSymlinkJames Forshaw Symboliclink 测试工具存储库中的二进制文件创建 SymLink 。

正如该工具包的说明所述:

您只能在空目录中创建符号链接,这是对连接点处理的限制,因此您不能直接放入%TEMP%。但是,如果您至少可以从目录中删除文件,您应该仍然可以做到这一点。

看起来我需要logs先删除整个目录,然后尝试重新创建它,但这没有实际问题,因为我(在 WindowsUsers组中)绝对可以做到这一点!

  • 我们可以利用任何伤害吗?

这可能是一个棘手的问题,如何在没有任何实际内容操作的情况下将普通的潜在文件覆盖变成有影响力的东西?那么,如果我们可以将特权服务指向 Windows 主机安装中的任何位置进行写入,为什么不强制它覆盖关键 Windows 驱动程序呢?

这样做实际上会损坏整个 Windows 安装,迫使用户回滚到旧的备份快照或从头开始重新安装操作系统!

太好了,现在路径更加清晰了,我可以瞄准它,C:WindowsSystem32driverspci.sys因为它在处理机器硬件和底层操作系统之间的交互方面发挥着至关重要的作用。

最后,该漏洞利用的整体视觉流程应如下所示:

GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

漏洞利用

在第一次手动尝试触发此驱动程序覆盖向量成功后,我致力于通过 PowerShell 脚本武器化我的出路,这将使利用过程更加可靠和可扩展。

此漏洞的代码可以在以下存储库部分找到:https://github.com/anvilsecure/gog-galaxy-app-research/tree/main/poc/CVE-2023-50915 - 主机拒绝服务通过任意文件覆盖

CVE-2023-50914:通过不安全的进程间通信进行权限提升

问题

在我发现我们刚才谈到的拒绝服务向量之后,我被提示挑战自己,看看我是否能以某种方式利用它产生更大的影响。就像,我可以以任何神奇的方式操纵任何东西来提升我们作为主机内用户的权限吗?

此时,亚历克斯开始进行研究,我们再次致力于这项任务,并深入研究每个日志文件内容(GalaxyClient.log以及GalaxyClientService.log),看看可以用它们做什么。

在某些时候,我们只是注意到GalaxyClient.exe正在发出一些有趣的指令,GalaxyClientService.exe并且后者正在使用作为参数提供的信息相应地执行它,日志条目如下所示:

GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

显然,每当用户安装游戏时,都会发生以下过程:

GalaxyClient.exe通过 IPC 通道向进程发送一个新数据包GalaxyClientService.exe,要求服务在用户要求安装游戏的路径中创建一个新的子目录。

然后,GalaxyClientService.exe验证数据包是否使用 的加密密钥进行签名GalaxyClient.exe,确认接收并继续执行提示的任务。

一旦游戏文件被下载、安装并定位到适当的目录中,GalaxyClient.exe再次发送另一个数据包,要求GalaxyClientService.exe放弃对创建的文件夹的权限,以便每个人将来都可以访问它,主要是为了让实际的游戏可以在其内部写入内容自己的目录,无需作为提升的进程运行。是的,是的,你没看错,这个名为的指令FixDirectoryPrivileges负责授予 WindowsEveryone组对指定文件夹的完全访问权限。

手动检查目标文件夹后立即确认了此行为:

GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

理论滥用

再次证明上述情况后,我们的脑海中立即充满了疑问。我们按照以下思路解决问题:

  • 我们可以控制哪个目录被设置这些权限吗?

我们可以尝试伪造自己的数据包,但由于就地完整性检查,这肯定是一种复杂的方法。对于这种情况有没有更简单的解决方案?好吧,我们可以将自定义 DLL 注入GalaxyClient.exe并挂钩调用的函数FixDirPrivileges来操作Directory发送到的参数值GalaxyClientService.exe,并将其替换为我们自己的值Target Path

  • 我们可以利用任何伤害吗?

那么,如果我们无法利用这一点,那么修改对给定目录的访问权限背后的全部意义是什么?如果我们可以滥用Everyone组权限进行写入,C:Program Files (x86)GOG Galaxy我们将能够植入恶意 DLL。

然后,我们可以使用这种植入方法来实际替换特权进程加载的 DLL GalaxyClientService.exe,在这种情况下profapi.dll(用于分析的众所周知的 DLL)似乎很合适。我们当然知道受影响的进程使用它,因为它通过操作验证其存在CreateFile,如以下屏幕截图所示:

GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

我们可以尝试伪造自己的 shell profapi.dll,并使其在被NT AUTHORITYSYSTEM服务加载时生成一个新的 shell!

最后,该漏洞利用的整体视觉流程应与此类似,请注意,每个步骤都用旁边的蓝色数字进行枚举:

GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

漏洞利用

我们立即开始通过创建必要的 DLL(一个用于挂钩目的,另一个用于生成系统 shell)来手动确认我们的想法,并深入研究手动执行步骤。

不过,最后一个过程花了我们几个小时的时间,因为我们还需要来回跟踪一些实施问题。处理低级代码并调试不同的组件总是很有趣,直到最终让事情按预期工作。

此漏洞的代码可以在以下存储库部分找到:https://github.com/anvilsecure/gog-galaxy-app-research/tree/main/poc/CVE-2023-50914 - 通过不安全的交互进行权限升级过程通讯

结论

这篇博文是测试 Windows 应用程序(特别是 GOG Galaxy)的技术介绍。它解释了我们评估目标的安全观点并发现两个新漏洞所遵循的不同步骤。它还详细介绍了我们如何利用这些来发挥影响力。

我们讨论了文件系统交互以及 IPC 机制,并评论了在特定的上下文场景中这些机制如何被滥用。显然,还有其他向量需要迭代,我们认为将来可以产生有趣的结果。

每个发现的更多技术细节以及相应的概念验证脚本和演示可在我们的GitHub 存储库和 YouTube 频道上找到。

https://github.com/anvilsecure/gog-galaxy-app-research

负责任的披露时间表

  • 2023-09-07: Anvil 通过 GOG 的支持网页联系了 GOG,其中包含包含调查结果的建议以及我们的 90 天披露政策的链接。

  • 2023-09-28: 在多次跟进电子邮件后,GOG 确认他们收到了 Anvil 的消息,并且正在将其转发给内部安全团队。安维尔询问是否可以与他们的安全团队直接联系。

  • 2023年10月10日: GOG回复称没有实际的预计到达时间,并且不可能与他们的安全团队建立直接沟通。

  • 2023 年 10 月 31 日: Anvil 请求更新。

  • 2023 年 11 月 7 日: GOG 回复称没有更新,并要求提供指向初始公告的新链接,因为之前的公告已过期。Anvil 提供了该咨询的新链接。

  • 2023-12-06: Anvil 请求更新并提醒 GOG 90 天披露期已过。Anvil询问GOG是否要求延期。

  • 2023 年 12 月 14 日: Anvil 向 MITRE 请求 CVE ID。

  • 2023 年 12 月 15 日MITRE 使用以下分配的 CVE ID 进行答复:CVE-2023-50914 和 CVE-2023-50915

  • 2024-01-04: GOG 回复称他们仍在调查这些问题,并且没有实际的预计到达时间可提供。Anvil 使用 MITRE 分配的 CVE ID 进行回复,并解释说我们将在未来几个月内发布有关问题的详细信息

  • 2024-02-20: GOG 发送一封电子邮件,解释说安全团队仍在调查这些问题。Anvil 回复说我们的博客文章即将发布。

点击下方阅读原文 - 即可跳转原文地址

原文始发于微信公众号(Ots安全):GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月10日10:13:31
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   GOG Galaxy漏洞搜寻:我们如何发现 CD Projekt Red 游戏平台中的新问题http://cn-sec.com/archives/2642633.html

发表评论

匿名网友 填写信息