Webview Vulnerability Fix
· 3 min read
일부 Electron 애플리케이션에서 비활성화된 Node.js 통합을 다시 활성화할 수 있는 취약점이 발견되었다. 이 취약점은 CVE-2018-1000136로 지정되었다.
영향을 받는 애플리케이션
다음 조건을 모두 만족하는 애플리케이션은 영향을 받을 수 있다:
- Electron 1.7, 1.8 또는 2.0.0-beta 버전에서 실행된다.
- 임의의 원격 코드 실행을 허용한다.
- Node.js 통합을 비활성화한다.
- webPreferences에서
webviewTag: false
를 명시적으로 선언하지 않는다. nativeWindowOption
옵션을 활성화하지 않는다.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로 이메일을 보낸다.
릴리스 및 보안 업데이트에 대한 정보를 받으려면 이메일 리스트에 가입한다.