漏洞简介
CVE-2024-3833 是 Chrome 浏览器 V8 JavaScript 引擎中的一个对象损坏漏洞。攻击者可以利用该漏洞,通过诱使用户访问恶意网站,实现在 Chrome 渲染器沙箱中执行任意代码(RCE)。简单来说,就是黑客可以通过一个网页,控制你的 Chrome 浏览器。
技术原理
该漏洞的根源在于 V8 引擎在处理 JavaScript 对象属性时,没有正确处理重复属性。当一个对象中存在重复属性时,V8 引擎可能会出现类型混淆,从而导致内存破坏,最终允许攻击者执行任意代码。
漏洞细节
-
Origin Trials(源试用)机制
Chrome 为了让开发者提前体验新功能,引入了 Origin Trials 机制。开发者可以通过注册自己的网站,获得一个 Token,然后在网页中通过
<meta>标签启用某些实验性功能。 -
漏洞触发点
在 WebAssembly 的 JavaScript Promise Integration 功能中,当 Origin Trial Token 被检测到时,V8 引擎会在
WebAssembly对象上添加Suspender和Function属性。但是,V8 引擎在添加这些属性之前,没有充分检查WebAssembly对象是否已经被用户 JavaScript 代码修改过。 -
漏洞利用
攻击者可以先通过 JavaScript 代码修改
WebAssembly对象,例如添加一个Suspender属性。然后,通过<meta>标签激活 JavaScript Promise Integration Origin Trial。由于 V8 引擎没有正确处理,就会在WebAssembly对象上创建两个重复的Suspender属性。 -
对象克隆
当使用展开语法复制对象时,会创建一个原始对象的浅拷贝:
const clonedObj = { ...obj1 };在 V8 中,这被实现为 CloneObject 字节码。
当一个函数包含字节码第一次运行时,会生成内联缓存代码,并在后续调用中使用,内联缓存代码也会收集输入对象的信息,并为相同类型的输入生成优化的内联缓存处理程序,当代码第一次运行,没有之前输入对象信息和缓存,因此会检测到内联缓存未命中,并使用 CloneObjectIC_Miss 来处理字节码,
-
利用思路
- 创建带重复属性的“字典对象”:利用漏洞,在字典对象中创建重复的
type属性。 - 将字典对象转换为“快对象”:通过
MakePrototypesFast函数,将字典对象转换为快对象。 - 对象克隆触发漏洞:克隆带有重复属性的快对象,触发 PropertyArray 越界写入漏洞。
- 操控内存,实现任意代码执行:通过越界写入,修改对象的属性,最终实现任意代码执行。
- 创建带重复属性的“字典对象”:利用漏洞,在字典对象中创建重复的
实际应用例子
假设你正在开发一个在线游戏,使用了 WebAssembly 技术来提高性能。如果你的网站启用了 JavaScript Promise Integration Origin Trial,并且用户访问了包含恶意代码的网页,那么攻击者就可以利用这个漏洞,控制用户的浏览器,甚至窃取用户的游戏账号信息。
Demo 代码
由于漏洞利用代码比较复杂,这里只提供一个简化版的 Demo,用于演示如何在 WebAssembly 对象上创建重复属性:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="origin-trial" content="YOUR_ORIGIN_TRIAL_TOKEN">
<title>CVE-2024-3833 Demo</title>
</head>
<body>
<script>
// 修改 WebAssembly 对象
WebAssembly.Suspender = {};
// 激活 JavaScript Promise Integration Origin Trial
var meta = document.createElement('meta');
meta.httpEquiv = 'Origin-Trial';
meta.content = 'YOUR_ORIGIN_TRIAL_TOKEN'; // 替换为你的 Origin Trial Token
document.head.appendChild(meta);
// 打印 WebAssembly 对象,查看是否创建了重复属性
console.log(WebAssembly);
</script>
</body>
</html>
请注意:
- 你需要将
YOUR_ORIGIN_TRIAL_TOKEN替换为你自己的 Origin Trial Token。 - 这个 Demo 只是演示了漏洞的触发,并不能直接实现代码执行。完整的漏洞利用需要更复杂的代码。
漏洞修复
该漏洞已经在 Chrome 124.0.6367.60/.61 版本中修复。建议用户及时更新 Chrome 浏览器到最新版本。
总结
CVE-2024-3833 是一个严重的 Chrome 远程代码执行漏洞。攻击者可以利用该漏洞,控制用户的浏览器,甚至窃取用户的敏感信息。建议广大开发者和用户提高安全意识,及时更新浏览器版本,避免受到攻击。