【原创缝隙】WebAssembly高危缝隙影响Edge和Safari浏览器

颁布功夫 2019-03-26

缝隙概述


2018年10月,宝运莱官方网站ADLab发现浏览器WebAssembly� ?榇嬖诟呶7煜�,并第一功夫传递苹果和微软官方进行建复。该缝隙位于对应浏览器JavaScript引擎(JavaScriptCore/ChakraCore)与WebAssembly� ?榈慕涌�,可同时影响Edge、Safari浏览器。


2019年3月25日,苹果颁布了针对该缝隙的安全补�。–VE-2019-6201);微软的对应缝隙补丁已于2019年2月12日颁布。提醒宽大用户尽快将浏览器升级到最新版本。


缝隙影响领域


Microsoft Windows 10操作系统的Edge浏览器
Apple iOS/macOS操作系统的Safari浏览器
其他平台上基于WebKit的组件和产品


缝隙简析


攻击者可通过精心机关的html网页,使用户在使用浏览器接见网页时触发缝隙。该缝隙在浏览器缝隙利用中能够直接作为fakeobj原语。通常addrof与fakeobj原语结合能够直接获得肆意代码执行的能力,在一些特殊情况下,单独使用fakeobj原语也能够实现缝隙利用。


该缝隙的简要分析如下(以Safari/WebKit CVE-2019-6201为例):
WebAssemblyModuleRecord::link掌管解析WebAssembly� ?橹械母鞲鼋峁�,在解析导出表时,有:

宝运莱·(中国区)最新官方网站


在加载导出的全局变量时,有Wasm::I32、Wasm::I64、Wasm::F32、Wasm::F64四种类型,是WebAssembly尺度中指定的数据类型(descriptor),别离暗示32位、64位的整数和浮点数,在.wasm文件中用一个字节确定;随后凭据变量类型的长度从.wasm文件中持续取出具体数据(value),封装成JSValue供JavaScript高低文使用。


以“case Wasm::F64为例”,debug版的代码会查抄表来数据是否是一个切合IEEE754尺度的双精度浮点数:

宝运莱·(中国区)最新官方网站


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年10月30日,宝运莱官方网站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-0607
https://support.apple.com/en-us/HT209599
https://developer.mozilla.org/zh-CN/docs/WebAssembly/Exported_functions


宝运莱·(中国区)最新官方网站