【原创缝隙】WebAssembly高危缝隙影响Edge和Safari浏览器
颁布功夫 2019-03-26缝隙概述
2018年10月,宝运莱官方网站ADLab发现浏览器WebAssembly�?榇嬖诟呶7煜�,并第一功夫传递苹果和微软官方进行建复。该缝隙位于对应浏览器JavaScript引擎(JavaScriptCore/ChakraCore)与WebAssembly�?榈慕涌�,可同时影响Edge、Safari浏览器。
缝隙影响领域
Apple iOS/macOS操作系统的Safari浏览器
其他平台上基于WebKit的组件和产品
缝隙简析
攻击者可通过精心机关的html网页,使用户在使用浏览器接见网页时触发缝隙。该缝隙在浏览器缝隙利用中能够直接作为fakeobj原语。通常addrof与fakeobj原语结合能够直接获得肆意代码执行的能力,在一些特殊情况下,单独使用fakeobj原语也能够实现缝隙利用。
WebAssemblyModuleRecord::link掌管解析WebAssembly�?橹械母鞲鼋峁�,在解析导出表时,有:

在加载导出的全局变量时,有Wasm::I32、Wasm::I64、Wasm::F32、Wasm::F64四种类型,是WebAssembly尺度中指定的数据类型(descriptor),别离暗示32位、64位的整数和浮点数,在.wasm文件中用一个字节确定;随后凭据变量类型的长度从.wasm文件中持续取出具体数据(value),封装成JSValue供JavaScript高低文使用。
Release版本会在编译过程将isImpureNaN这一查抄去掉,此时表来数据若是是一个NaN(Not a Number),例如0xffff000000888888,在通过加法(+DoubleEncodeOffset)封装成JSValue时会产生溢出,造成0x888888。由于Safari的boxing规定,这样的一个JSValue会被当作指针,因而产生类型混合缝隙。
Edge浏览器的缝隙和补丁也极度类似:
能够看到,在WebAssembly尺度的实现中微软、苹果犯了类似的谬误,导致缝隙的形貌也极其类似,缝隙道理也并不复杂。该缝隙是在WebAssembly职能实现时直接引入的,在Edge、Safari中已埋伏了2年。
另一方面,由于JavaScript引擎也无法优良地实现i64类型的WebAssembly变量,因而无论是Safari/WebKit还是Edge都回绝对该类型及进行处置。MDN也在WebAssembly导出函数章节提到:“若是你尝试挪用一个接受或返回一个i64类型导出的wasm函数,目前它会抛出一个谬误,由于JavaScript没有精确的方式来标识一个i64。不外,这在将来可能会扭转——在将来的尺度中,将思考新的i64类型。届时,wasm能够使用它”。
这给宝运莱官方网站启迪:
分歧�?轳钣κ笨赡芑嵬黄颇衬?槟诓康娜绻�,必要审慎对待。
凭据该缝隙的特点,宝运莱官方网站ADLab已陆续发现了若干缝隙和代码问题,并已传递厂商进行建复。
缝隙功夫轴
2018年11月6日,宝运莱官方网站ADLab向微软提交缝隙。
2018年11月27日,苹果在WebKit代码库中建复缝隙。
2019年1月24日,微软在ChakraCore代码库中建复缝隙。
2019年2月12日,微软为Edge浏览器推送安全性更新,并披露CVE编号。
2019年3月25日,苹果为Safari浏览器等产品推送安全性更新,并披露CVE编号。
安全建议
为了方便社区贡献代码,Edge、Safari在内的常见浏览器产品往往将主题引擎组件开源,而开源代码仓库中的每次补丁提交均蕴含部门缝隙信息。因而在厂商正式披露缝隙并为产品推送补丁之前,黑客有一个机关缝隙POC的攻击功夫窗。为了缩幼这一功夫窗,终端用户应实时装置厂商提供的安全性更新。
参考链接:
https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/CVE-2019-0607https://support.apple.com/en-us/HT209599
https://developer.mozilla.org/zh-CN/docs/WebAssembly/Exported_functions


京公网安备11010802024551号