ZDI年度五大漏洞之—--ELECTRON BOOGALOO --一个技术影响多个产品

翻译自:https://www.zerodayinitiative.com/blog/2018/12/18/top-5-day-two-electron-boogaloo-a-case-for-technodiversity
翻译:聂心明

这是2018年五大最有趣漏洞的第二篇,每一个bug都有一些基本的特征,这个特征使他们与其他的1400份报告区别开来。这篇博客主要讲Electron框架中的多个bug,这些bug最后都收到了相同的cve编号。

早在2017年十二月份,我们就收到一系列与协议处理相关的远程命令执行的漏洞,这些漏洞存在于google web设计工具的Windows版本 (ZDI-18-552), Microsoft Teams(ZDI-18-426),Skype(ZDI-18-308),和Slack,这些漏洞来自于与我们长期合作的安全研究员rgod。虽然它们都是不同的产品,但是它们都有一个相同的东西–Electron.js。Electron是一个开发框架,它允许开发者使用Node.js来写跨平台的桌面程序。这很酷,它是跨平台桌面应用框架的新宠,或者也可以被伪装成Chromium。

这四个不同的漏洞被合并了,且它们被一个补丁所修复( https://electronjs.org/blog/protocol-handler-fix ),同时也被分配了一个cve–CVE-2018-1000006。这个补丁是从下游产品合并而来,并不是又rgod所提交的部分。因为Electron提交的补丁来自于一个未发布的仓库,这看上去好像rgod撞洞了。

这个漏洞被选为今年最有趣的5个漏洞之一,是因为它影响了上述的四个产品。在公布补丁不久,Tomas Lažauninkas (@Wflki) 发现Exodus wallet也被影响。最有趣的是,rgod发现Chromium的嵌入式框架中也有类似的漏洞,这个框架和Electron.js很类似。它影响了Spotify音乐播放器的Windows客户端 (ZDI-18-280)和亚马逊音乐播放器(https://www.zerodayinitiative.com/advisories/ZDI-18-215/).

漏洞

基于Electron.js的应用会注册一个自定义的协议处理接口,目的是提高用户体验。这样,当用户点击一个浏览器的连接时,就可以启动相应的程序,并展示相应的内容。攻击者会直接用命令行参数来劫持自定义的URI,然后注入Chromium命令行选项以影响程序的流程或者启动其他的程序。

一些Chromium的选项是十分危险的。比如--gpu-launcher=可以通过提供的命令来创建一个进程。许多公开可用的poc就是利用这个命令行参数。在rgod给微软团队提交的漏洞中(ZDI-18-426),就利用了下面的这个poc

可是,我们没有看到公开的poc使用rgod所演示的poc。ZDI-18-552影响了google的web设计工具。他利用了三个命令行参数,目的是注入一个后缀为.hta的html应用程序文件到日志文件中去,这个日志文件被攻击者控制,并且放置在受害者机器的启动目录之中。

当受害者重启计算机的时候,suntzu.hta就会启动程序,弹出一股计算器。

ZDI-18-308影响了Microsoft Skype,他演示了另一种漏洞利用技术

--browser-subprocess-path=这个命令行参数允许用户给渲染器指定一个可执行文件的路径并以插件的形式启动它。在这个poc中,rgod演示了这个payload文件可以被存储在网络的UNC路径中。这个利用技巧也会给EDR软件造成潜在的危害。

在Slack (ZDI-18-265)中,他指出一个存在的Slack进程将会阻止利用程序的运行。‘–user-data-dir='被添加Slack的指令中,这样就可以使用不同的用户身份,这样就可以在有Slack进程的受害主机上运行poc了。

问题的核心

Electron通过添加黑名单来阻止相关的Chromium运行指令。虽然一部分漏洞不能被利用了,但是问题的根源还是存在的。当应用调用Electron.js API时app.setAsDefaultProtocolClient(),去给Windows客户端注册自定义的URI时,Electron.js会在Windows中创建一个新的注册表。下面就是有漏洞的Slack Windows客户端如何用Electron.js 去注册一个自定义的URI过程。

通过微软的文档来看,这个注册程序让slack.exe来处理自定义的slack:// URI协议。URI 将替换掉“%1”这个字符串,并且传递给处理程序一个自定义的命令行选择。微软文档指出简单的文本替换将成为潜在的安全漏洞

不仅仅是Electron.js开发者会以默认的方式去注册一个不安全的处理程序,微软的文档中也没有表达出潜在的安全问题。我看看最近版本的Electron.js ,它仍然在默认情况下,以安全的方式来注册处理程序,并且里面包含一个简短的提示“不要被未授权的用户改写”

总结

Electron是一个流行的技术,它利用了Chromium的技术来封装平台实现细节,这让大量的JavaScript开发者可以快速的开发跨平台的桌面客户端程序。这个技术的普及给计算机领域带来了很大的方便并提升了效率。但是,与此同时,当一个严重的缺陷被发现时,就会带来广泛的危害。就像其他框架以前一样,Electron需要去建立和维持一个快速解决安全问题的机制。文档也需要去完善,目的是为了让开发者明白如何用安全的方式去利用各种特性。随着流行度的增长,漏洞影响范围也会持续扩大

你会在推特上找到我 @TrendyTofu,也可以关注我的团队,在里面我们会发布最新的漏洞利用技术和安全补丁。请关注年度五大漏洞的下一篇,我们将会在明天发布。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章