## 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环境,就可能实现沙箱逃逸。为验证该方法,可通过修改V8的native函数%TheHole()来泄露Uninitialized Oddball对象。利用该方法可以绕过V8的HardenType保护。关键在于优化后的JavaScript read函数没有充分检查对象属性,导致类型混淆实现任意读写。建议修复方案是在优化后的函数返回数组元素时,添加对数组map的检查,避免直接计算偏移返回数值。值得注意的是,Skype等软件可能仍存在此类漏洞。在x86平台下,由于缺少地址压缩,任意读写范围更大。攻击者可能利用此漏洞实现完整的利用链。除Uninitialized Oddball外,V8中还有多种Sentinel value可能存在类似风险。建议进一步研究其他Sentinel value泄露导致的安全问题,并考虑在模糊测试中加入相关场景。无论该类问题是否被正式列为安全漏洞,它都可能大幅缩短攻击者实现完整利用的周期,值得高度重视。
Chrome V8引擎Sentinel value泄露导致沙箱逃逸风险
Sentinel value在Chrome V8中的应用及其安全影响
Sentinel value是算法中的特殊值,常用于循环或递归算法的终止条件。Chrome V8引擎源码中广泛使用了Sentinel value。近期,安全研究人员发现通过泄露特定Sentinel value对象可以实现Chrome沙箱内任意代码执行。
V8中存在多种原生对象不应泄露到JavaScript环境中。除了此前曝光的TheHole对象,Uninitialized Oddball对象的泄露同样可导致安全问题。该方法最早出现在Issue1352549中,目前仍可用于最新版V8,谷歌尚未修复。
该方法具有较强通用性:
Issue1216437(CVE-2021-30551)中首次给出了泄露internal uninitialized oddball的POC。
Issue1314616(CVE-2022-1486)中也直接泄露了UninitializedOddball对象。
Issue1352549(无CVE)中完整给出了利用方法。
这些案例表明,利用Sentinel value泄露可能影响多个软件版本。
V8的大部分原生对象定义在v8/src/roots/roots.h文件中,在内存中相邻排布。一旦这些对象泄露到JavaScript环境,就可能实现沙箱逃逸。
为验证该方法,可通过修改V8的native函数%TheHole()来泄露Uninitialized Oddball对象。
利用该方法可以绕过V8的HardenType保护。关键在于优化后的JavaScript read函数没有充分检查对象属性,导致类型混淆实现任意读写。
建议修复方案是在优化后的函数返回数组元素时,添加对数组map的检查,避免直接计算偏移返回数值。
值得注意的是,Skype等软件可能仍存在此类漏洞。在x86平台下,由于缺少地址压缩,任意读写范围更大。攻击者可能利用此漏洞实现完整的利用链。
除Uninitialized Oddball外,V8中还有多种Sentinel value可能存在类似风险。建议进一步研究其他Sentinel value泄露导致的安全问题,并考虑在模糊测试中加入相关场景。
无论该类问题是否被正式列为安全漏洞,它都可能大幅缩短攻击者实现完整利用的周期,值得高度重视。