查看原文
其他

又是 Electron!Element 桌面版被发现远程代码执行

Remote Code Execution on Element Desktop Application using Node Integration in Sub Frames Bypass - CVE-2022-23597


https://blog.electrovolt.io/posts/element-rce/


Element 是一款基于 Matrix 协议的即时通讯软件,支持多个桌面和移动平台,允许端到端加密、拉群、语音视频通话和自建服务器等功能。


Element 的桌面端主要还是用 Electron。一个有趣的现象是,只要一款 App 而且足够流行,而且选择使用 Electron,那么一定会被人搞出 XSS 甚至 RCE 漏洞来。


不信你看。




2018 年 5 月,Signal 桌面端很短的时间内连续发现两个 XSS


CVE-2018-10994


https://github.com/signalapp/Signal-Desktop/commit/bfbd84f5d1308cdfcb08a1727821f7103be151ea


发送一个经过构造的 URL 可以触发


CVE-2018-11101


https://thehackerblog.com/i-too-like-to-live-dangerously-accidentally-finding-rce-in-signal-desktop-via-html-injection-in-quoted-replies/index.html


通过“引用消息”功能触发


if (text) { return ( <div className="text" dangerouslySetInnerHTML=\{\{ __html: text \}\} /> );}


2020 年 8 月,另一款以安全为卖点的跨平台即时通信软件 Wire 桌面端被发现没有对打开文件的参数做检查,可以远程运行可执行文件。


https://github.com/wireapp/wire-desktop/security/advisories/GHSA-5gpx-9976-ggpm


https://benjamin-altpeter.de/shell-openexternal-dangers/



令人哑然失笑的是,这篇两年前用来针对 Electron 的文章,就用到了 ms-msdt 这个在今年大放光芒的攻击向量,也就是日后的 Follina


2020 年 10 月,知名的即时聊天和社群工具 Discord 被发现 XSS 和远程代码执行。


https://mksben.l0.cm/2020/10/discord-desktop-rce.html


滥用了受信任的 sketchfab.com 网站,作为嵌入式框架引用之后可以执行攻击者控制的 js。


作者首先绕过了框架对页面重定向的限制(CVE-2020-15174)。不过执行代码的上下文禁用了 nodeIntegration,仅暴露了一些特权函数,其中一个可以在沙箱外运行程序。于是作者通过原型链劫持,篡改 js 内置函数的返回值,从而篡改本应不可控的命令行参数实现 RCE。





2021 年 7 月,还是 Discord。


https://blog.electrovolt.io/posts/discord-rce/


首先 XSS 的点类似上一个 bug,都是通过嵌入第三方网站的功能,然后在受信任站点上找到 XSS。这次用的 Vimeo。


但这次利用有所不同,纯逻辑的方式并没有奏效。作者直接高射炮打蚊子上了 nday v8 exploit 来打,却失望地发现渲染器进程也有 sandbox。最终他们通过在新窗口打开页面的方式创建了一个没有沙箱的 renderer 进程。




回到 Element 这篇。


这篇和最后一个 Discord 的案例是同一批作者。


Element 支持 jitsi(一款开源、跨平台的 VOIP 和即时聊天软件)会议。在这个功能中允许嵌入自定义域名的 iframe 执行脚本。


接下来就是怎么将 XSS 转化成 RCE 的过程。Element 给 WebView 也配置了沙箱。作者通过分析 ipcMain 的接口发现如下功能可以运行一个本地程序:


electron.send('userDownloadOpen',{ path: 'C:\\Windows\\System32\\calc.exe'})


但插入的 js 在 iframe 里,没有启用 nodeIntegrationInSubFrames,无法使用接口。


于是作者想到了 v8 nday。虽然这个进程有沙箱,但是通过内存读写可以直接修改 nodeIntegrationInSubFrames,从而允许 js 直接向 ipcMain 通信有没有 mojo 的味道),触发命令执行:





Electron 大大方便了桌面应用的开发,可是两大黑点广受诟病——大多数 Electron 应用都没几个功能,却要带上一整个 Chrome 引擎来浪费存储空间和性能;而用 js 做桌面应用极大降低了漏洞利用成本,经常栽在 XSS 之类问题上。


哪怕是公认性能架构好性能高,同时还是 Electron 亲兄弟的 VSCode,也时不时出过安全问题。怎么说呢?虽然因噎废食不好,可是 Electron 的生态确实该领几张反思券。其他的应用,能用网页版尽量用网页版吧……




题外话。近期几篇题图都是用 MidJourney 生成的。用 AI 画画真是香啊,版权图片网站怕是眼看着要倒闭了。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存