Chrome v8 HardenProtect绕过:利用Sentinel Value实现任意代码执行

Sentinel Value与Chrome v8 HardenProtect绕过

Sentinel value是算法中的特殊值,常用于循环或递归算法的终止条件。Chrome源码中广泛使用了这类特殊值。近期有研究表明,通过泄露某些Sentinel value对象可实现Chrome沙箱内任意代码执行。

本文将探讨利用Uninitialized Oddball对象绕过Chrome v8 HardenProtect机制的方法。该方法最早由Project0成员在Issue1352549中提出,目前仍可用于最新版V8,Google尚未针对此进行修复。

值得注意的是,该方法具有较强通用性:

  1. Issue1216437(CVE-2021-30551)中首次给出了泄露internal uninitialized oddball的poc。

  2. Issue1314616(CVE-2022-1486)中也直接泄露了UninitializedOddball对象。

  3. Issue1352549(暂无CVE)展示了该方法的完整利用链。

这些案例表明,该绕过方法可能影响多个软件版本。截至目前,Skype等软件仍未修复该漏洞。

V8中的Sentinel Value

V8源码中定义了大量原生对象,包括多种Sentinel value。这些对象在内存中依次相邻排布。一旦将不应泄露的原生对象暴露给JavaScript,就可能实现沙箱内任意代码执行。

为验证该方法,我们可以修改V8的%TheHole()函数,使其返回Uninitialized Oddball对象。

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

绕过HardenType

以下代码展示了如何利用泄露的Uninitialized Oddball对象实现任意读:

javascript function read(obj, idx) { return obj[idx]; }

let uninitialized_oddball = %GetUninitialized(); let ab = new ArrayBuffer(8); let f64 = new Float64Array(ab); let u32 = new Uint32Array(ab);

for (let i = 0; i < 0x10000; i++) { read({prop: 1.1}, 0);
}

%OptimizeFunctionOnNextCall(read);

let val = read({prop: uninitialized_oddball}, 0x1234); f64[0] = val; console.log(u32[0].toString(16), u32[1].toString(16));

优化后的read函数汇编代码显示,函数仅检查了obj的prop属性,未检查obj.prop的值就直接计算偏移,造成类型混淆,实现任意读。

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

建议修复方案:在优化后的函数返回数组元素时,添加对数组map的检查,避免直接计算偏移。

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

PatchGap警告

该绕过方法不仅影响历史漏洞,还可能影响当前软件。例如Skype目前仍未修复此问题。在x86平台下,由于缺少地址压缩,任意读写范围更大。

这次PatchGap不仅涉及Issue1352549,还使得类似Issue1314616和Issue1216437的利用难度大幅降低。建议厂商全面排查相关漏洞。

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

总结

本文介绍了利用Uninitialized Oddball实现V8任意读的方法。V8中还有其他多种Sentinel value,可能存在类似安全隐患。建议进一步研究:

  1. 其他Sentinel value泄露是否可实现V8 RCE
  2. 将Sentinel value作为变量加入Fuzzer,挖掘新的利用原语
  3. 正视此类问题可能带来的安全风险

无论该问题是否被正式列为安全漏洞,它都可能大大缩短黑客的完整利用周期。希望本文能引起相关方面的重视。

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

SENC-4.99%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 6
  • 转发
  • 分享
评论
0/400
寒冬取暖喵vip
· 08-10 01:53
强强细节帖必须赞
回复0
StakeOrRegretvip
· 08-08 15:35
又发现浏览器隐患了
回复0
Layer_ZeroHerovip
· 08-07 02:24
有点炫酷的漏洞
回复0
Web3产品经理vip
· 08-07 02:23
这里有一个超级风险的边缘案例
查看原文回复0
幽灵钱包侦探vip
· 08-07 02:11
漏洞真是防不胜防
回复0
UnluckyLemurvip
· 08-07 02:04
这漏洞有大水分了
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)