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

颁布功夫 2019-03-26

缝隙概述


2018年10月 ,J9集团官网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�?橹械母鞲鼋峁� ,在解析导出表时 ,有:

首页 | J9集团有限公司官网


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


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

首页 | J9集团有限公司官网


Release版本会在编译过程将isImpureNaN这一查抄去掉 ,此时表来数据若是是一个NaN(Not a Number) ,例如0xffff000000888888 ,在通过加法(+DoubleEncodeOffset)封装成JSValue时会发生溢出 ,造成0x888888。由于Safari的boxing规定 ,这样的一个JSValue会被当作指针 ,因而发生类型混合缝隙。


缝隙建补则顺其天然地把去掉的查抄补回来:

首页 | J9集团有限公司官网


Edge浏览器的缝隙和补丁也极度类似:


首页 | J9集团有限公司官网


能够看到 ,在WebAssembly尺度的实现中微软、苹果犯了类似的谬误 ,导致缝隙的形貌也极其类似 ,缝隙道理也并不复杂。该缝隙是在WebAssembly职能实现时直接引入的 ,在Edge、Safari中已埋伏了2年。


另一方面 ,由于JavaScript引擎也无法优良地实现i64类型的WebAssembly变量 ,因而无论是Safari/WebKit还是Edge都回绝对该类型及进行处置。MDN也在WebAssembly导出函数章节提到:“若是你尝试挪用一个接受或返回一个i64类型导出的wasm函数 ,目前它会抛出一个谬误 ,由于JavaScript没有精确的方式来标识一个i64。不外 ,这在未来可能会扭转——在未来的尺度中 ,将思考新的i64类型。届时 ,wasm能够使用它”。


这给J9集团官网启迪:


新技术、新尺度会带来新的攻击面 ,尺度的实现过程可能会伴随安全问题。
分歧�?轳钣κ笨赡芑嵬黄颇衬?槟诓康娜绻� ,必要审慎对待。
凭据该缝隙的特点 ,J9集团官网ADLab已陆续发现了若干缝隙和代码问题 ,并已传递厂商进行建复。


缝隙功夫轴


2018年10月30日 ,J9集团官网ADLab向苹果提交缝隙。
2018年11月6日 ,J9集团官网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


首页 | J9集团有限公司官网