V8引擎Sentinel Value泄露引发安全风险 Uninitialized Oddball成新型攻击向量

robot
摘要生成中

Chrome v8引擎中Sentinel Value泄露导致的安全问题分析

Sentinel value是算法中的特殊值,通常在循环或递归算法中作为终止条件使用。Chrome源码中存在多个Sentinel value,其中一些如果泄露到JavaScript环境中可能导致安全问题。

之前有研究表明,通过泄露TheHole对象可以实现Chrome沙箱内任意代码执行。谷歌团队在此后不久对相关CVE进行了修复。然而,除了TheHole对象外,v8中还有其他不应泄露到JS中的原生对象。本文将讨论Uninitialized Oddball对象,这种绕过方法目前仍可用于最新版V8。

值得注意的是,这种方法具有一定通用性:

  1. 在CVE-2021-30551中,最初的POC就是泄露internal uninitialized oddball。

  2. 在CVE-2022-1486中,POC也直接泄露了UninitializedOddball。

  3. Issue1352549(未分配CVE)中给出了完整利用代码。

这些案例表明,Uninitialized Oddball的泄露可能导致严重的安全问题。

V8中的Sentinel Value

V8的大部分原生对象定义在v8/src/roots/roots.h文件中,这些对象在内存中依次相邻排布。如果将不应泄露的原生对象泄露到JavaScript中,可能实现沙箱内任意代码执行。

为验证这一点,我们可以修改V8的native函数,将Uninitialized Oddball泄露到JavaScript中。具体可以修改%TheHole()函数中相对isolate的偏移,使其返回Uninitialized Oddball。

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

绕过HardenType保护

利用Uninitialized Oddball可以实现相对任意读。关键代码如下:

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

let uninitialized_oddball = %TheHole(); let ab = new ArrayBuffer(8); let fa = new Float64Array(ab); let ia = new BigInt64Array(ab);

let evil = [1.1, 2.2, 3.3]; evil.prop = 1;

%PrepareFunctionForOptimization(read); read(evil, 0); read(evil, 1); %OptimizeFunctionOnNextCall(read); read(evil, 0);

let val = read(uninitialized_oddball, "prop"); fa[0] = val; console.log(ia[0]);

在优化后的汇编代码中,会直接按JavaScript语义计算偏移并返回数组值,而没有检查obj.prop为key的Value。这导致了类型混淆,从而实现任意读。

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

由于Uninitialized Oddball在V8内存中排序靠前且更原始,比TheHole对象更容易伪造,是绕过HardenType的首选方法。

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

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

PatchGap警告

分析Issue1352549后发现,某些软件可能存在PatchGap问题。例如Skype目前仍未修复该漏洞。在x86平台下,由于没有地址压缩,任意读写是相对于整个进程的。

虽然Skype开启了ASLR,但由于文件较大,黑客只需对某个固定地址进行读写,就有很大概率读写到Skype文件内容。结合PE解析等传统方法,可以完成整个漏洞利用链。

这次PatchGap不仅涉及Issue1352549,还会导致类似CVE-2022-1486和CVE-2021-30551等漏洞的利用难度大幅降低。黑客几乎不需要额外研究即可实现完整利用。

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

总结

本文简要讨论了通过泄露Uninitialized Oddball实现任意读原语的方法。V8中还有许多其他Sentinel value,可能存在类似安全隐患。这给我们以下启示:

  1. 其他Uninitialized Oddball泄露是否也可轻易实现V8 RCE。

  2. 此类问题是否应被正式视为安全问题仍存在争议。

  3. Fuzzer中是否有必要将%TheHole/Uninitialized Oddball等作为变量加入,以挖掘新的利用原语。

无论如何,这类问题都会大大缩短黑客实现完整利用的周期,值得我们高度重视。

独家揭秘通过泄露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

SENC2.25%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 5
  • 分享
评论
0/400
幻觉丛生vip
· 7小时前
卧槽 咋还能泄露呢
回复0
代码审计姐vip
· 7小时前
又一个CVE变种攻击面 啧啧
回复0
巨鲸资深观察员vip
· 7小时前
谷歌这是玩火呢?开历史倒车
回复0
BearMarketSurvivorvip
· 7小时前
真就修不完的bug
回复0
Crypto冒险家vip
· 7小时前
又到了交智商税的好时候?懂得都懂
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)