人工智能驱动的网络攻击:如何检测、预防和抵御智能威胁

立即阅读
我们利用人工智能进行网站翻译,虽然我们力求准确,但不一定总是 100%精确。感谢您的理解。

修复 Google Chrome 浏览器中的 CVE-2024-0517 漏洞

由MetaDefender Endpoint提供支持
OPSWAT
分享此贴
OPSWAT 研究金计划参与者 Hoai Nam Do 和 Minh Quan Le 的合影
OPSWAT 研究金计划参与者

关于 CVE-2024-0517

CVE-2024-0517 是 Google Chrome 浏览器 120.0.6099.224 之前版本的 V8 JavaScript 引擎中的越界写入漏洞,远程攻击者可通过伪造的 HTML 页面利用该漏洞造成堆损坏。该漏洞由 QriousSecure 的 Toan (Suto) Pham 首次报告。 

显示 CVSS 3.x 严重性基础分数 8.8(高)的截图,以及 NVD 提供的详细载体描述
国家漏洞数据库 (NVD) 中的 CVE-2024-0517

当应用程序使用一种类型分配或初始化指针、对象或变量等资源,但随后使用与原始类型不兼容的类型访问该资源时,就会发生类型混乱(CWE-843)。在此 CVE 中,类型混淆是在称为折叠分配的内存分配过程中触发的,Maglev 是 V8 JavaScript 引擎的优化编译器,采用折叠分配进行内存优化。 

攻击者可利用类型混乱,通过 WebAssembly 编写任意 shellcode,从而在受害者机器上执行命令。 

攻击阶段

攻击者可以托管一个包含精心制作的 HTML 页面的网站,并通过钓鱼电子邮件或社交网络诱骗用户访问该网站。当用户使用有漏洞的 Google Chrome 浏览器版本访问该网站时,嵌入的恶意代码将执行任意命令。 

利用带有恶意 HTML 文件的钓鱼电子邮件远程执行代码的四步流程示意图
分步进攻运动 

V8 JavaScript 引擎 

攻击者可以托管一个包含精心制作的 HTML 页面的网站,并通过钓鱼电子邮件或社交网络诱骗用户访问该网站。当用户使用有漏洞的 Google Chrome 浏览器版本访问该网站时,嵌入的恶意代码将执行任意命令。 

磁悬浮和折叠式分配

Maglev 是 V8 中的优化编译器,可增强代码执行和内存分配。Maglev 仅在代码频繁执行并标记为 "热 "时运行,这表明需要通过编译加快执行速度,而不是逐行解释。 

通常情况下,分配发生在非连续的内存区域,导致内存使用稀疏且效率低下。为了解决这个问题,V8 采用了一种名为折叠分配的技术,它可以连续、同时分配多个变量。Maglev 也在其进程中使用折叠分配来优化分配。 

用彩色编码表示已分配文件夹和未分配文件夹的文件夹分配示意图
马勒夫和文件夹分配

代际垃圾收集 

为了清理未使用的内存区域,V8 采用了代际垃圾收集(GC)技术,将内存分为两个空间:年轻一代和老一代。此外,还有两个垃圾收集器:次要垃圾收集器负责清理年轻空间,主要垃圾收集器负责清理旧空间。年轻代是内存中最初分配新创建对象的区域,而老一代是内存中存储长期对象的区域。在年轻代中经过多次次要垃圾回收器循环的对象,最终会被提升到老一代。 

垃圾回收 (GC) 期间在年轻内存代、中间内存代和老内存代分配对象过程的示意图
记忆空间:年轻一代和老一代

脆弱性分析

概述

当从没有明确定义构造函数(基类默认构造函数)的基类继承的类中创建对象,然后再创建另一个对象时,就会出现漏洞。由于折叠分配的原因,第一个对象的分配可能会紧接着第二个对象的分配。如果在这两次分配之间发生垃圾回收等事件,就会产生类型混淆漏洞。

根源分析 

OPSWAT 研究生对分配过程中的 V8 工作流程进行了详细分析,并确定在此过程中会调用以下功能: 

图解说明了 V8 在对象分配过程中从构造函数查找到原始分配扩展的工作流程
分配过程中的 V8 工作流程 

在此过程中,发现 TryBuildFindNonDefaultConstructorOrConstruct 函数中存在一个问题:BuildAllocateFastObject 函数扩展了 current_raw_allocation_(指向同时为多个变量分配的内存区域的指针)以构建子类实例,但未能通过将其设置为空而清除它。 

因此,下一个创建的对象总是紧接着 current_raw_allocation_ 指向的内存进行分配,而不管第二次分配之前发生了什么事件。 

在内存中创建新对象,从 "当前原始分配 "移动到 "下一个对象 "的示意图
内存区域中的 "current_raw_allocation "和 "Next object "对象

如果调用 GC,与 current_raw_allocation_ 相邻的内存区域可能会被分配给其他对象。这可能导致这样一种情况:在触发 GC 并创建另一个对象后,两个指针引用了相同的内存区域,但却具有不同的数据类型,从而造成类型混淆漏洞。

显示类型混乱漏洞过程的图表,说明垃圾回收触发器和导致潜在问题的对象分配
类型混淆漏洞 

剥削

为利用此漏洞,OPSWAT 研究生创建了包含 shellcode 的 WebAssembly 实例,并试图通过 GC 引发类型混乱,从而控制内存并执行 shellcode: 

如何通过 V8 引擎中的类型混淆触发远程代码执行(从触发类型混淆到执行 shellcode)的分步流程图
在 V8 引擎中触发远程代码执行的步骤 

触发器类型混乱

在初始化过程中,我们首先定义了一个包含空对象的数组 (_arrayObject)。接着,我们构建一个子类实例以及一个触发式垃圾收集器。最后,我们定义了另一个包含浮点数的数组,名为 _arrayDouble。 

代码片段演示了在 JavaScript 中触发垃圾回收的函数,创建了一个数组缓冲区

这些构造必须重复执行,以便代码被多次执行,从而导致 V8 将其标记为 "热 "并触发磁悬浮编译器。为此,我们在一个循环中调用子类的构造函数,如下所示: 

一个简短的 JavaScript 代码片段,说明如何循环创建多个子类实例

在循环中反复初始化这些对象后,将触发类型混乱。

创建读写基元

成功触发类型混淆后,执行 shellcode 需要读取内存并覆盖受控地址的内存。为此,我们创建了读写基元。开发基元将利用对象中的元数据为我们提供任意读/写内存区域,并利用这些区域运行任意代码。 

读写基元的可视化表示,显示内存区域和被覆盖的值
原始读写 

这一步中的读写原语将使我们能够在下一步中控制 WebAssembly 实例的跳转表指针。 

创建 WebAssembly 实例

接下来,我们创建了两个 WebAssembly 实例:一个用于存储 shellcode,另一个用于触发 shellcode。为了避免通过读写原语将 shellcode 直接写入 WebAssembly 实例的内存,我们在 WebAssembly 实例中定义了一些浮点常量值。 

用 WebAssembly 编写的代码片段,说明了内存访问和存储功能

WebAssembly 实例的控制跳转表指针

利用读写原语,我们调整第二个 WebAssembly 实例的跳转表指针,跳过第一个 WebAssembly 实例中常量编译代码的某些字节,这样浮点常量就会被解释为我们想要的 shellcode:

显示将数据移至寄存器的指令的汇编代码片段

运行 WebAssembly 实例以执行 Shellcode 

最后,在引发类型混淆并使用读/写原语控制 WebAssembly 实例的跳转表指针后,我们调用了第二个 WebAssembly 实例的导出函数,从而执行了第一个 WebAssembly 实例中的 shellcode。 

我们使用的 shellcode 是用来终止 Linux 机器上的所有进程的,就像下面的命令一样: 

使用 "kill "命令终止进程的简单终端命令片段

由浮点数转换而来的执行命令的汇编代码如下: 

使用 "kill "命令终止进程的系统调用的汇编代码片段

模拟安全漏洞 

为了在现实世界中模拟这种利用,OPSWAT 研究生创建了一个恶意制作的 HTML 页面。 

通过访问内存和操作数据来执行 shellcode 的 WebAssembly 代码片段

受害者会收到一封钓鱼电子邮件,邮件中嵌入了一个链接,指向托管这个精心制作的 HTML 页面的域。 

截图显示了一封钓鱼电子邮件和一个系统监控工具,展示了攻击的执行情况

如果受害者使用有漏洞的 Google Chrome 浏览器版本访问该链接,就会执行 shellcode,导致所有进程终止。结果,用户会被注销,如下图所示: 

Kali Linux 登录屏幕截图

补救措施

MetaDefender Endpoint™ 利用其 "漏洞应用程序 "功能,主动缓解了这一 CVE。该解决方案能有效地确定并显示端点环境中谷歌 Chrome 浏览器应用程序的所有相关 CVE。为了消除威胁,用户可以立即卸载 Chrome 浏览器或应用最新的安全补丁。采取任何一种应对措施,CVE 都会被完全控制,从而大大降低端点遭受成功网络攻击的风险。

MetaDefender Endpoint 界面显示 Google Chrome 浏览器漏洞,包括 CVE 的详细信息

下一代Endpoint 安全 

了解为什么世界各地的组织、机构和实体都信赖MetaDefender Endpoint 来保护关键端点。立即咨询专家,了解更多信息,并亲自体验免费演示。  


通过OPSWAT 了解最新信息!

立即注册,即可收到公司的最新动态、 故事、活动信息等。