【原创误差】WebAssembly高危误差影响Edge和Safari浏览器

宣布时间 2019-03-26

误差概述


2018年10月 ,尊龙凯时ADLab发明浏览器WebAssembly�?楸4娓呶N蟛� ,并第一时间转达苹果和微软官方举行修复。该误差位于对应浏览器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


尊龙凯时·(中国区)人生就是搏!