Electron XSS漏洞问题解决
2018-05-15 本文已影响31人
charles0427
Electron最近被公布了一个安全漏洞,xxs可以绕过Electron框架的安全检查,漏洞由由 Trustwave 发布,影响的Electron版本范围覆盖之前的
< 1.7.13, < 1.8.4, and < 2.0.0-beta.3
该漏洞主要涉及Electron Api中nodeIntegration属性,以及window.open()方法。具体可查看BrowserWindow
CVE-2018-1000136
详细描述了漏洞发生条件和测试方法,简单来说,即应用禁用了nodeIntegration,且未显示声明webviewTag: false
时,攻击着可以通过xxs调用window.open()方法,通过脚本重新启用nodeIntegration,从而获取通过webview调用底层node api的能力。
目前,Electron官方已紧急修复了漏洞,同时提供了解决方案:Webview Vulnerability Fix
- Electron版本升级
若应用当前使用的Electron版本属于1.7.x,1.8.x或2.0.0-beta.x;那可以升级到对应的最新release,这样也不会影响到原生模块的rebuild - 添加配置
app.on('web-contents-created', (event, win) => {
win.on('new-window', (event, newURL, frameName, disposition,
options, additionalFeatures) => {
if (!options.webPreferences) options.webPreferences = {};
options.webPreferences.nodeIntegration = false;
options.webPreferences.nodeIntegrationInWorker = false;
options.webPreferences.webviewTag = false;
delete options.webPreferences.preload;
})
})
// 应用中未使用到webview
app.on('web-contents-created', (event, win) => {
win.on('will-attach-webview', (event, webPreferences, params) => {
event.preventDefault();
})
})
其实我们的应用并不满足漏洞执行环境,但在dev环境下,尝试将xxs输入到console中:
var x = window.open('data://yoloswag','','webviewTag=yes,show=no');
x.eval(
"var webview = new WebView;"+
"webview.setAttribute('webpreferences', 'webSecurity=no, nodeIntegration=yes');"+
"webview.src = `data:text/html;base64,PHNjcmlwdD5yZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlYygnbHMgLWxhJywgZnVuY3Rpb24gKGUscikgeyBhbGVydChyKTt9KTs8L3NjcmlwdD4=`;"+
"document.body.appendChild(webview)"
);
xxs
window.open()确实被执行,且执行了系统命令,读取了当前目录文件读写权限等信息...
目前,使用了第二种解决方案,再次在dev模式下测试,脚本无法执行。