亿级分布式系统架构实践
ontextIsolation功能的引入目的在于隔离Web页面和Web页面之外的JS代码,让它们在执行时不会产生相互影响。该功能非常有必要,因为如果存在不被信任的内容或操作,就会产生安全问题。而在Discord这里,该功能却被配置为false,被禁用了。因此,遵循上述覆盖JS脚本的方法,我对Discord的此处缺陷发起了测试。 由于Electron内置的JS代码在渲染时可以在任意的Electron APP中执行,所以一般我测试Electron的RCE时,习惯首先在渲染时用Electron内置的JS代码来测试。在我的文章中,我写到了可以用Electron在执行navigation timing时的代码来实现RCE,该缺陷不仅可以从代码中发现,还可从其它地方发现(以后我会公布详细的PoC实例)。但是,由于目标应用不同的Electron版本使用或BrowserWindow选项设置,Discord这里Electron运行启动时,我实际测试的PoC总是不稳定,所以我把测试重点放在了预加载脚本上。 测试预加载脚本时,我发现Discord应用曝露了DiscordNative.nativeModules.requireModule('MODULE-NAME')方法函数,该函数功能在于可以通过其把一些模块功能调用到Web页面中去实现。然而,经测试发现,我并不能有效地调用类似child_process的模块实现RCE,但却可以用之前说过的覆盖方法,覆盖掉Discord Electron中内置的JS方法,干扰曝露模块的执行,以此实现RCE。
以下为相关的PoC。当覆盖掉Discord Electron中内置的RegExp.prototype.test和Array.prototype.join方法,调用"discord_utils"模块中定义的getGPUDriverVersions方法函数时,可以触发执行calc.exe程序: 而在Discord这里,nodeIntegration为false,所以我也不能调用require()去使用Node.js功能。然而,仍然存在一种访问Node.js功能的方法。接下来且听我慢慢解释。 Discord中的另一重要功能contextIsolation也配置为了false,该功能用来隔离不信任的内容,所以,如果你想消除RCE,那么该功能就不应该配置为false。如果contextIsolation为false,那么web页面中的JS可以影响Electron内部渲染时的JS代码和预加载脚本执行,(这里Electron内部渲染时的JS代码指Web页面之外的JS脚本),例如,假设用Web页面JS中的方法函数,把Electron内置JS的方法Array.prototype.join覆盖掉,那么Web页面之外的JS脚本在加载join方法时,就会调用后来被覆盖的方法函数。 这种行为是很危险的,因为这样一来,可以不用考虑nodeIntegration配置,直接用覆盖的方式,就可以让Electron允许Web页面之外的JS脚本使用Node.js特性,这种方式即使在nodeIntegration配置为false的情况下,都还还可演变为RCE漏洞。
我顺便提一下,类似的缺陷早在2016年我在Cure53公司时就已经发现了,当时我上报给了Electron安全团队,后来在Electron架构中就引入了contextIsolation功能。以下为最近才公开的技术细节PDF: 研究人员说,黑客声称他们的勒索软件加密了大约2,000台Capcom服务器,包括文件服务器。攻击者发布了一些屏幕截图(上图),以证明他们已经获得了敏感信息的访问权限。 千万美元级别的赎金如今并不罕见,今年5月份,Ragnar Locker勒索软件运营商向可再生能源公司EDP索要了类似金额的赎金。据悉,同样的勒索软件也参与了针对联合国国际海事组织和法国航运巨头CMA CGM的近期攻击。 总结 蓬勃发展的视频游戏行业已成为网络犯罪分子眼中越来越有吸引力的目标。在全球疫情爆发期间,针对游戏行业的网络攻击数量猛增,特别是SQL注入和DDoS攻击。Akamai的Tony Lauro指出:“应用内微交易的新兴生态系统”这块肥肉已经让媒体公司成为“汁多肉嫩”的受害者。
另外值得注意的是,游戏视频直播和聊天室也卷入了大选攻防风波。近日有黑客用支持特朗普的信息轰炸了多人派对游戏《Among US》的玩家,此举显然是对当选总统拜登一次“非传统线上竞选活动”的回应,在那次活动中,美国国会女议员亚历山大·奥卡西奥·科尔特斯与该游戏的网红主播一起玩游戏的视频在Twitch上吸引了数百万粉丝。 (编辑:长春站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |