今年以来,WebAssembly 的发展势头强劲,频频引起技术圈的轰动。这项技术目前已支持 Golang, Rust 和 TypeScript 这些编程语言,它们都成为了可用于编写 wasm 应用程序的示例语言。
而 WebAssembly 对浏览器的支持也比以往更好,甚至可以说它已经成长到了“临界质量”(critical mass)这个状态。早在 2016 年,它就已经在 Microsoft Edge, V8 JavaScript 引擎和其他引人瞩目的引擎中有了实验性的实现。JavaScript 的排他性时代已经结束。
然而能力越大,责任也就越大。即使浏览器中的沙箱提供了一个继承自 JavaScript 的安全框架,但要实现新的运行时也不是件容易的事。正如 Meltdown 和 Spectre 漏洞所显示的,带来意想不到的攻击的提供方可能会从底层的优化中发现漏洞。
即使没有像来自 CPU 预测执行这种系统级别的安全漏洞,但对浏览器而言,访问内存空间(memoryspace)也是一个严重的漏洞。这已经在 MWR Infosecurity 的一份报告中得到了证明 —— 研究小组在 Safari 浏览器中发现了运行 Wasm 引擎产生的漏洞。
详细报告的研究人员深入地了解他们在 WebKit 浏览器引擎的开源实现中发现的漏洞,该引擎在 macOS 和 iOS 上为 Safari 提供支持。而团队在对 Wasm 二进制文件格式进行模糊处理时发现了安全漏洞。
该漏洞可能会被堆内存损坏(heap memory corruption)利用,不过苹果已经在 macOS 的更新中(10.13.4)修复了这个问题。考虑到 WebAssembly 技术的有限采用以及苹果在用户修复其操作系统方面的强大追踪记录,该漏洞可能会被广泛利用。
关于这个利用 WebAssembly 和它的 Wasm 二进制格式的漏洞,对于我们的警醒就是并没有安全方面的“灵丹妙药”,开发者都应该相信 Fox Mulder 所说的一句话:不要相信任何人。
原文:https://react-etc.net/ 编译:开源中国