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

颁布功夫 2019-03-26

缝隙概述


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

8827太阳集团(Macau)股份有限公司-Official website


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


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

8827太阳集团(Macau)股份有限公司-Official website


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


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

8827太阳集团(Macau)股份有限公司-Official website


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


8827太阳集团(Macau)股份有限公司-Official website


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


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


这给8827太阳集团启迪:


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


缝隙功夫轴


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


8827太阳集团(Macau)股份有限公司-Official website