Safari信息泄漏裂痕说明
我们可以看到在这种环境下,有一个输入数组的indexing范例为ArrayWithUndecided,功效indexing范例将会是另一个数组的indexing范例。因此,假如我们我们用一个indexing范例为ArrayWithUndecided的数组和另一个indexing范例为ArrayWithDouble的数组去挪用Array.prototype.concat要领的话,我们将会凭证快速路径[[2]]运行,并将两个数组举办拼接。 这段代码并不能担保这两个“butterfly”(JavaScript引擎进攻技能里的一种观念,详情请参考【这篇文章】)在代码挪用memcpy之前可以或许正确初始化。这也就意味着,假如我们可以或许找到一条应承我们建设一个未初始化数组并将其转达给Array.prototype.concat的代码路径,那我们就可以或许在堆内存中拥有一个包括了未初始化值的数组工具了,并且它的indexing范例还不是ArrayWithUndecided。从某种水平上来说,这个安详题目跟lokihardt在2017年陈诉的一个旧裂痕有些相似,只不外操作方法差异。 在建设这种数组工具时,可以操作NewArrayWithSize DFG JIT的操纵码来实现,在对FTLLowerDFGToB3.cpp中FTL所实现的allocateJSArray操纵码举办说明之后,我们可以看到这个数组将会包括未初始化的值。引擎基础不必要对数组举办初始化,由于这个数组的indexing范例为ArrayWithUndecided。
语句new Array(n)在被FTL JIT编译时将会触发[[4]],然后返回一个indexing范例为ArrayWithUndecided的数组,个中就包括未初始化的元素。 裂痕操作 清晰了之前所先容的裂痕道理之后,想必触发这个裂痕也并训斥事:我们可以不绝一再挪用一个行使new Array()要领来建设数组的函数,然后挪用concat要领将这个数组和一个只包括double范例数据的数组举办拼接。在挪用够足够次数之后,FTL编译器将会对其举办编译。 这份【裂痕操作代码】可以操作这个裂痕来走漏一个方针工具的内存地点,实现机制是通过我们所建设的工具举办内存喷射,在触发这个裂痕之后,我们就可以或许从代码所返回的数组中找到方针工具的地点了。 总结 这个裂痕今朝已经在iOS 12和macOS Mojave的最新版本(Safari)中修复了,该裂痕的CVE编号为CVE-2018-4358。 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |