Discord 桌面应用程序漏洞链引发远程代码执行攻击
这个消息应用程序的桌面版本存在一个严重的问题,这个问题使得用户容易受到远程代码执行(RCE)攻击。
Bug赏金猎人Masato Kinugawa几个月前开发了一条导致RCE的漏洞利用链,并在周末发布了一篇博客文章,描述了该方法的技术细节,该方法结合了多个漏洞。
在Discon桌面应用程序使用的软件框架Electron中发现了第一个安全问题。虽然桌面应用程序不是开源的,但Electron所使用的JavaScript代码(用于创建能够利用JavaScript,HTML和CSS的跨平台应用程序的开源项目)已保存在本地,可以提取和检查。
Discord的Electron构建中的一项设置“ contextIsolation”被设置为false,这可能允许应用程序外部的JavaScript代码影响内部代码,例如Node.js函数。该功能旨在在网页和JavaScript代码之间引入单独的上下文。
“这种行为是危险的,因为Electron允许web页面外部的JavaScript代码使用node.js功能,而与nodeIntegration选项无关,并且通过干扰Web页面中覆盖的功能来干扰它们,甚至可以实现RCE如果nodeIntegration设置为false,“Kinugawa解释道。
现在,研究人员需要一种在应用程序上执行JavaScript的方法,从而导致在iframe嵌入功能中发现跨站点脚本(XSS)问题,该问题用于在发布URL时在聊天中显示视频,例如YouTube。
这导致Kinugawa转到了3D内容查看器Sketchfab。Sketchfab在Discord的内容安全策略中列入了白名单,并且可以嵌入到iframe中-但是在嵌入页面中发现的基于DOM的XSS可能会被滥用。
但是,这仅允许漏洞赏金猎人在iframe中执行JavaScript,因此在Discord桌面应用程序上仍无法实现完整的RCE。至少直到Kinugawa在Electron的“will-navigation”事件代码中遇到导航限制绕过的情况。
跟踪为 CVE-2020-15174,此处理错误与其他两个漏洞一起,使 Kinugawa 通过规避导航限制并使用iframe XSS错误访问包含RCE有效负载的网页来执行RCE攻击。
Kinugawa通过Discord的Bug赏金计划报告了他的发现。在Discord团队对错误进行分类并确认其有效性之后,开发人员禁用了Sketchfab嵌入,并向iframe添加了沙箱属性。
错误赏金猎人补充说:“过了一会儿,启用了contextIsolation。” “现在,即使我可以在应用程序上执行任意JavaScript,RCE也不会通过覆盖的JavaScript内置方法发生。”
Kinugawa因Discord的报告获得了5,000美元的奖励,而Sketchfab团队因披露XSS缺陷而获得了300美元的奖励,现已修复。Electron的“将要解决”问题也已解决。
