Skip to main content

Webview Vulnerability Fix

· 3 min read

일부 Electron 애플리케이션에서 비활성화된 Node.js 통합을 다시 활성화할 수 있는 취약점이 발견되었다. 이 취약점은 CVE-2018-1000136로 지정되었다.

영향을 받는 애플리케이션

다음 조건을 모두 만족하는 애플리케이션은 영향을 받을 수 있다:

  1. Electron 1.7, 1.8 또는 2.0.0-beta 버전에서 실행된다.
  2. 임의의 원격 코드 실행을 허용한다.
  3. Node.js 통합을 비활성화한다.
  4. webPreferences에서 webviewTag: false를 명시적으로 선언하지 않는다.
  5. nativeWindowOption 옵션을 활성화하지 않는다.
  6. new-window 이벤트를 가로채고, 제공된 옵션 태그를 사용하지 않고 event.newGuest를 수동으로 재정의하지 않는다.

이러한 조건을 모두 충족하는 애플리케이션은 소수에 불과하지만, 예방 차원에서 모든 애플리케이션을 업그레이드할 것을 권장한다.

취약점 완화

이 취약점은 최신 버전인 1.7.13, 1.8.4, 그리고 2.0.0-beta.5에서 수정되었다.

애플리케이션의 Electron 버전을 업그레이드할 수 없는 개발자는 다음 코드를 통해 이 취약점을 완화할 수 있다:

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

// 그리고 웹뷰를 전혀 사용하지 않는다면,
// 다음 코드도 추가할 수 있다
app.on('web-contents-created', (event, win) => {
win.on('will-attach-webview', (event, webPreferences, params) => {
event.preventDefault();
});
});

추가 정보

이 취약점은 Trustwave SpiderLabs의 Brendan Scarvell이 Electron 프로젝트에 책임감 있게 보고했다.

Electron 애플리케이션의 보안을 유지하는 모범 사례에 대해 더 알고 싶다면, 보안 튜토리얼을 참고한다.

Electron에서 발견한 취약점을 보고하려면 security@electronjs.org로 이메일을 보낸다.

릴리스 및 보안 업데이트에 대한 정보를 받으려면 이메일 리스트에 가입한다.