# 探究Chrome V8引擎中Sentinel Value泄露导致的安全隐患Sentinel value是算法中用作特殊标记的值,通常在循环或递归中作为终止条件。Chrome V8引擎源码中存在多个Sentinel value,其中一些不应泄露到JavaScript环境中。本文将讨论通过泄露Uninitialized Oddball对象来绕过Chrome V8 HardenProtect机制的方法。## V8中的Sentinel ValueV8源码的roots.h文件中定义了大量原生对象,它们在内存中相邻排列。一旦这些对象被泄露到JavaScript中,就可能导致沙箱逃逸。我们可以通过修改V8的native函数来验证这一点。例如,修改%TheHole()函数的偏移量,使其返回Uninitialized Oddball对象而非TheHole对象。## 绕过HardenType保护利用Uninitialized Oddball对象可以实现相对任意的内存读取。关键在于优化后的JavaScript read函数中,仅检查了对象的prop属性是否正确,但未检查以obj.prop为键的值。这导致了在计算过程中发生类型混淆,从而实现任意读取。分析优化后的汇编代码可以看到,当传入uninitialized_oddball时,程序会直接计算偏移并读取数据,而不进行类型检查。这种方法相比TheHole对象更容易构造和利用。建议的修复方案是在优化后的函数返回数组元素时,添加对数组map的检查,避免直接通过偏移计算来返回数组值。## PatchGap安全警告除了关注已知的历史漏洞,我们还需要注意厂商在基础组件中悄然修复的问题。经过分析,发现Skype软件至今仍未修复该漏洞。在x86平台上,由于缺少地址压缩,任意读写的范围更大,几乎可以读写整个进程空间。这次PatchGap不仅涉及Issue1352549,还包括Issue1314616和Issue1216437等类似漏洞。新的绕过方法公开后,这些漏洞的利用难度大幅降低,攻击者几乎无需额外研究即可完成完整利用链。## 总结本文简要探讨了通过泄露Uninitialized Oddball实现任意读取的方法。V8中还存在其他多个Sentinel value,它们同样可能导致类似问题。这提示我们:1. 其他uninitialized_Oddball泄露可能同样导致V8沙箱逃逸。2. 此类问题是否应被视为正式安全漏洞仍存在争议。3. 考虑在模糊测试中将Sentinel value作为变量加入,以发现新的利用方法。无论如何,这类问题都会大大缩短攻击者实现完整利用的周期,值得高度重视。
Chrome V8引擎Sentinel Value泄露的安全隐患与利用分析
探究Chrome V8引擎中Sentinel Value泄露导致的安全隐患
Sentinel value是算法中用作特殊标记的值,通常在循环或递归中作为终止条件。Chrome V8引擎源码中存在多个Sentinel value,其中一些不应泄露到JavaScript环境中。本文将讨论通过泄露Uninitialized Oddball对象来绕过Chrome V8 HardenProtect机制的方法。
V8中的Sentinel Value
V8源码的roots.h文件中定义了大量原生对象,它们在内存中相邻排列。一旦这些对象被泄露到JavaScript中,就可能导致沙箱逃逸。
我们可以通过修改V8的native函数来验证这一点。例如,修改%TheHole()函数的偏移量,使其返回Uninitialized Oddball对象而非TheHole对象。
绕过HardenType保护
利用Uninitialized Oddball对象可以实现相对任意的内存读取。关键在于优化后的JavaScript read函数中,仅检查了对象的prop属性是否正确,但未检查以obj.prop为键的值。这导致了在计算过程中发生类型混淆,从而实现任意读取。
分析优化后的汇编代码可以看到,当传入uninitialized_oddball时,程序会直接计算偏移并读取数据,而不进行类型检查。这种方法相比TheHole对象更容易构造和利用。
建议的修复方案是在优化后的函数返回数组元素时,添加对数组map的检查,避免直接通过偏移计算来返回数组值。
PatchGap安全警告
除了关注已知的历史漏洞,我们还需要注意厂商在基础组件中悄然修复的问题。经过分析,发现Skype软件至今仍未修复该漏洞。在x86平台上,由于缺少地址压缩,任意读写的范围更大,几乎可以读写整个进程空间。
这次PatchGap不仅涉及Issue1352549,还包括Issue1314616和Issue1216437等类似漏洞。新的绕过方法公开后,这些漏洞的利用难度大幅降低,攻击者几乎无需额外研究即可完成完整利用链。
总结
本文简要探讨了通过泄露Uninitialized Oddball实现任意读取的方法。V8中还存在其他多个Sentinel value,它们同样可能导致类似问题。这提示我们:
其他uninitialized_Oddball泄露可能同样导致V8沙箱逃逸。
此类问题是否应被视为正式安全漏洞仍存在争议。
考虑在模糊测试中将Sentinel value作为变量加入,以发现新的利用方法。
无论如何,这类问题都会大大缩短攻击者实现完整利用的周期,值得高度重视。