Chrome V8引擎Sentinel Value泄露漏洞分析与防御

robot
摘要生成中

泄露Sentinel Value绕过Chrome V8 HardenProtect的技术分析

Sentinel value是算法中的特殊值,通常在循环或递归算法中作为终止条件存在。Chrome源码中有许多Sentinel value。近期有研究表明,通过泄露TheHole对象可以实现CVE-2021-38003和CVE-2022-1364的沙箱内任意代码执行。谷歌团队随后对这两个野外漏洞进行了更新。

除了TheHole对象外,V8中还有其他不应泄露到JavaScript中的原生对象。本文讨论的是Uninitialized Oddball对象,这种绕过方法目前仍可用于最新版V8。

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

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

为验证该方法,可以通过修改V8的native函数,将Uninitialized Oddball泄露到JavaScript中。具体可以修改%TheHole()函数中相对isolate的偏移,使其返回Uninitialized Oddball。

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

利用Uninitialized Oddball可以实现相对任意读写。优化后的JavaScript read函数会直接按JavaScript语义计算偏移,求取数组的数值,从而导致类型混淆,实现任意读。

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

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

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

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

值得注意的是,这种方法不仅适用于Chrome,其他使用V8引擎的软件也可能受影响。例如Skype目前仍未修复该漏洞。在x86下,由于没有地址压缩,任意读写是直接相对于整个进程的。

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

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

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

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

总的来说,通过泄露Sentinel value中的uninitialized_Oddball可以实现任意读原语。V8中还有其他Sentinel value可能导致类似问题。建议将这些Sentinel value作为变量加入fuzzer,以挖掘更多潜在的利用原语。无论是否被正式视为安全问题,这类问题都会大大缩短黑客实现完整利用的周期。

SENC-10.83%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 4
  • 分享
评论
0/400
汤米老师vip
· 07-20 16:35
确实有点危险啊喂
回复0
破产豆豆vip
· 07-20 16:22
整天想着挖洞钻洞,有手刷题不香吗
回复0
GateUser-ccc36bc5vip
· 07-20 16:13
v8保护这么菜的吗?
回复0
稳定币守护者vip
· 07-20 16:09
哦哦 V8安全又出问题了啊
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)