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

  1. Electron版本升级
    若应用当前使用的Electron版本属于1.7.x,1.8.x或2.0.0-beta.x;那可以升级到对应的最新release,这样也不会影响到原生模块的rebuild
  2. 添加配置
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模式下测试,脚本无法执行。

上一篇下一篇

猜你喜欢

热点阅读