Packages / electron / Security

HighVulnerabilityGHSA-8xwg-wv7v-4vqpCVE-2018-1000136Published 26 Mar 2018

Electron Vulnerable to Code Execution by Re-Enabling Node.js Integration

Affected releases · electron

  • 1.x1.7.0 – 1.8.3Fixed in 1.8.4

On 1.x, the newest line:

npm install electron@1.8.4
45.x
  1. Not affected

    45.0.0

    1 release, latest

1.x
  1. Not affected

    1.3.1 – 1.6.18

    53 releases

  2. Affected

    1.7.0 – 1.7.12

    13 releases

  3. Fixed

    1.7.13 – 1.7.16

    4 releases

  4. Affected

    1.8.0 – 1.8.3

    4 releases

  5. Fixed

    1.8.4 – 1.8.8

    5 releases

1131 stable releases of electron, oldest to newest, one row per major.

Is your project affected?

Paste your package.json, or type the range you declare for electron. It is read in your browser and sent nowhere.

What happens

A vulnerability has been discovered which allows Node.js integration to be re-enabled in some Electron applications that disable it.

For the application to be impacted by this vulnerability it must meet all of these conditions

  • Runs on Electron 1.7, 1.8, or a 2.0.0-beta

  • Allows execution of arbitrary remote code

  • Disables Node.js integration

  • Does not explicitly declare webviewTag: false in its webPreferences

  • Does not enable the nativeWindowOption option

  • Does not intercept new-window events and manually override event.newGuest without using the supplied options tag

Recommendation

Update to electron version 1.7.13, 1.8.4, or 2.0.0-beta.5 or later.

If you are unable to update your Electron version can mitigate the vulnerability with the following code.

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;
  })
})

// and *IF* you don't use WebViews at all,
// you might also want
app.on('web-contents-created', (event, win) => {
  win.on('will-attach-webview', (event, webPreferences, params) => {
    event.preventDefault();
  })
})