Chrome V8引擎Sentinel value泄露导致沙箱逃逸风险

robot
摘要生成中

Sentinel value在Chrome V8中的应用及其安全影响

Sentinel value是算法中的特殊值,常用于循环或递归算法的终止条件。Chrome V8引擎源码中广泛使用了Sentinel value。近期,安全研究人员发现通过泄露特定Sentinel value对象可以实现Chrome沙箱内任意代码执行。

V8中存在多种原生对象不应泄露到JavaScript环境中。除了此前曝光的TheHole对象,Uninitialized Oddball对象的泄露同样可导致安全问题。该方法最早出现在Issue1352549中,目前仍可用于最新版V8,谷歌尚未修复。

该方法具有较强通用性:

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

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

  3. Issue1352549(无CVE)中完整给出了利用方法。

这些案例表明,利用Sentinel value泄露可能影响多个软件版本。

V8的大部分原生对象定义在v8/src/roots/roots.h文件中,在内存中相邻排布。一旦这些对象泄露到JavaScript环境,就可能实现沙箱逃逸。

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

为验证该方法,可通过修改V8的native函数%TheHole()来泄露Uninitialized Oddball对象。

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

利用该方法可以绕过V8的HardenType保护。关键在于优化后的JavaScript read函数没有充分检查对象属性,导致类型混淆实现任意读写。

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

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

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

值得注意的是,Skype等软件可能仍存在此类漏洞。在x86平台下,由于缺少地址压缩,任意读写范围更大。攻击者可能利用此漏洞实现完整的利用链。

除Uninitialized Oddball外,V8中还有多种Sentinel value可能存在类似风险。建议进一步研究其他Sentinel value泄露导致的安全问题,并考虑在模糊测试中加入相关场景。

无论该类问题是否被正式列为安全漏洞,它都可能大幅缩短攻击者实现完整利用的周期,值得高度重视。

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

SENC5.48%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 5
  • 转发
  • 分享
评论
0/400
LowCapGemHuntervip
· 08-05 12:29
又挖到漏洞了 v8快来修
回复0
Degen_Whisperervip
· 08-04 10:02
啊这 谷歌咋没修 好菜啊
回复0
APY Whisperervip
· 08-04 09:59
Chrome卡到起飞 还脆皮
回复0
MidsommarWalletvip
· 08-04 09:49
又是chrome的锅= = 就这安全性?
回复0
token_therapistvip
· 08-04 09:46
没有啥杀伤力的漏洞,闲着没事
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)