安全研究员在五年来一直用于构建大量流行桌面应用的软件框架 Electron 中发现一个安全缺陷。
构建于 Electron 基础上的应用包括微软公司的 Skype 和 Visual Studio Code、GitHub 的 Atom 代码编辑器、Brave 浏览器以及多款服务的官方桌面 app 如 Signal、Twitch、Discord、Basecamp、Slack、Ghost、WordPress.com 等。
Electron 框架因能让开发人员轻易地将通过 HTML、JS 和 CSS 编写的 web应用移植到桌面上运行,它在当前的软件开发社区中非常受欢迎。该软件框架是用Node.js 服务器端 JavaScript 服务器封装的自定义 API。
危险的 Node.js API 和模块
当构建基于 Electron 的应用时,开发人员可通过 Electron API 来选择一个限制性环境,同时能够利用 Node.js API 及其模块。
由于 Node.js 项目更为成熟,因此 Node 的 API 和内置模块与底层操作系统的集成更为深入,而且能让开发人员和应用访问更多的操作系统功能。
Electron 团队意识到问题的存在并创建了一种机制,阻止基于 Electron app 的攻击利用这些 API 损害底层操作系统。
对于只想在桌面运行 HTML 和 JS 代码的应用而言,”nodeIntegration:false” 选项是默认开启的,意味着默认禁用访问 Node.js API 及其模块。这些纯粹的 web 应用经由一个名为 WebView 的组件插入 Electron 应用中。
从 XSS 升级到 RCE
所有基于 Electron 的应用都基于 webPreferences 配置文件运行。如果在这个配置文件中将 webviewTag 设为 “false”,那么 nodeIngration 也被设为 “false”。如果开发人员未声明 webviewTag,那么应用将认为 nodeIntegration 仍然被设置为 “false”。
Trustwave 公司的研究员 Brendan Scarvell 指出,这就是问题所在之处。他发现恶意人员能利用某个机制将 nodeIntegration 选项设置为 “true” 并给予他们访问更多强大的 Node.js API 和模块的权限。
Scarvell 表示,如果基于 Electron 的应用的开发人员并未具体声明某个 app 的 webPreferences 配置文件中的 “webviewTag: false” 选项,那么攻击者就能利用某个 Electron app 中的任意单个跨站点脚本 (XSS) 漏洞创建一个控制设置的新的 WebView 组件窗口,并将 nodeIntegration 标记设置为 “true”。
值得注意的是,Electron 应用是封装的 HTML 和 JS 代码,也就是说,找到一款 XSS 应用利用这个缺陷并非听起来的那么难,因为多数 web 应用中都充斥着这类问题。
Scarvell 已发布 PoC 代码,可导致攻击者利用任何 XSS 缺陷并将其访问权限扩展到底层操作系统。他表示,“如果应用使用了易受攻击的 Electron (版本低于 1.7.13、低于 1.8.4 或低于 2.0.0-beta.3),那么该缺陷可导致远程代码执行(RCE) 问题。”
Scarvell 已将该问题私下告知 Electron 团队,后者已于3月中旬发布修复方案。尽管如此,目前尚不知晓有多少基于 Electron 的应用易受影响,以及哪些应用已集成这些补丁。该漏洞的 CVE 编号是 CVE-2018-1000136。
本文由360代码卫士翻译自BleepingComputer
声明:本文来自代码卫士,版权归作者所有。文章内容仅代表作者独立观点,不代表士冗科技立场,转载目的在于传递更多信息。如有侵权,请联系 service@expshell.com。