加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

Safari信息泄漏裂痕说明

发布时间:2018-11-05 02:39:21 所属栏目:业界 来源:Alpha_h4ck
导读:媒介 Javascript中的数组和数组工具一向都是编程职员优化的首要方针,一样平常来说,数组只会包括一些根基范例数据,好比说32位整数或字符等等。因此,每个引擎城市对这些工具举办某些优化,并晋升差异元素范例的会见速率和麋集型暗示。 在JavaScriptCore中,J

我们可以看到在这种环境下,有一个输入数组的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。

  1. ArrayValuesallocateJSArray(LValue publicLength, LValue vectorLength, LValue structure,LValue indexingType, bool shouldInitializeElements = true, boolshouldLargeArraySizeCreateArrayStorage = true)  
  2. {  
  3.     [ ... ]  
  4.     initializeArrayElements(  
  5.        indexingType,  
  6.        shouldInitializeElements ?m_out.int32Zero : publicLength, vectorLength,  
  7.        butterfly);  
  8. ...  
  9. voidinitializeArrayElements(LValue indexingType, LValue begin, LValue end, LValuebutterfly)  
  10. {  
  11.     if (begin == end)  
  12.         return;    
  13.     if (indexingType->hasInt32()) {  
  14.         IndexingType rawIndexingType =static_cast<IndexingType>(indexingType->asInt32());  
  15.         if (hasUndecided(rawIndexingType))  
  16.             return;  // [[ 4 ]] 

语句new Array(n)在被FTL JIT编译时将会触发[[4]],然后返回一个indexing范例为ArrayWithUndecided的数组,个中就包括未初始化的元素。

裂痕操作

清晰了之前所先容的裂痕道理之后,想必触发这个裂痕也并训斥事:我们可以不绝一再挪用一个行使new Array()要领来建设数组的函数,然后挪用concat要领将这个数组和一个只包括double范例数据的数组举办拼接。在挪用够足够次数之后,FTL编译器将会对其举办编译。

这份【裂痕操作代码】可以操作这个裂痕来走漏一个方针工具的内存地点,实现机制是通过我们所建设的工具举办内存喷射,在触发这个裂痕之后,我们就可以或许从代码所返回的数组中找到方针工具的地点了。

总结

这个裂痕今朝已经在iOS 12和macOS Mojave的最新版本(Safari)中修复了,该裂痕的CVE编号为CVE-2018-4358。

【编辑保举】

  1. 5G类型安详性和协议裂痕说明(下篇)
  2. 史上最大安详裂痕案息争 雅虎向2亿用户抵偿3.5亿元
  3. Windows 10被曝新零日裂痕 涉及3大版本
  4. 收集安详基本,缓冲区溢出裂痕理会
  5. 新的BLEEDINGBIT裂痕影响普及行使的蓝牙芯片
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读