這是2018年五大最有趣漏洞的第二篇,每一個bug都有一些基本的特徵,這個特徵使他們與其他的1400份報告區別開來。這篇博客主要講Electron框架中的多個bug,這些bug最後都收到了相同的cve編號。
早在2017年十二月份,我們就收到一系列與協議處理相關的遠程命令執行的漏洞,這些漏洞存在於google web設計工具的Windows版本 (ZDI-18-552), Microsoft Teams(ZDI-18-426),Skype(ZDI-18-308),和Slack,這些漏洞來自於與我們長期合作的安全研究員rgod。雖然它們都是不同的產品,但是它們都有一個相同的東西–Electron.js。Electron是一個開發框架,它允許開發者使用Node.js來寫跨平臺的桌面程序。這很酷,它是跨平臺桌面應用框架的新寵,或者也可以被僞裝成Chromium。
這四個不同的漏洞被合併了,且它們被一個補丁所修復( https://electronjs.org/blog/protocol-handler-fix ),同時也被分配了一個cve–CVE-2018-1000006。這個補丁是從下游產品合併而來,並不是又rgod所提交的部分。因爲Electron提交的補丁來自於一個未發佈的倉庫,這看上去好像rgod撞洞了。
這個漏洞被選爲今年最有趣的5個漏洞之一,是因爲它影響了上述的四個產品。在公佈補丁不久,Tomas Lažauninkas (@Wflki) 發現Exodus wallet也被影響。最有趣的是,rgod發現Chromium的嵌入式框架中也有類似的漏洞,這個框架和Electron.js很類似。它影響了Spotify音樂播放器的Windows客戶端 (ZDI-18-280)和亞馬遜音樂播放器(https://www.zerodayinitiative.com/advisories/ZDI-18-215/).
漏洞
基於Electron.js的應用會註冊一個自定義的協議處理接口,目的是提高用戶體驗。這樣,當用戶點擊一個瀏覽器的連接時,就可以啓動相應的程序,並展示相應的內容。攻擊者會直接用命令行參數來劫持自定義的URI,然後注入Chromium命令行選項以影響程序的流程或者啓動其他的程序。
一些Chromium的選項是十分危險的。比如--gpu-launcher=
可以通過提供的命令來創建一個進程。許多公開可用的poc就是利用這個命令行參數。在rgod給微軟團隊提交的漏洞中(ZDI-18-426),就利用了下面的這個poc
可是,我們沒有看到公開的poc使用rgod所演示的poc。ZDI-18-552影響了google的web設計工具。他利用了三個命令行參數,目的是注入一個後綴爲.hta的html應用程序文件到日誌文件中去,這個日誌文件被攻擊者控制,並且放置在受害者機器的啓動目錄之中。
當受害者重啓計算機的時候,suntzu.hta就會啓動程序,彈出一股計算器。
ZDI-18-308影響了Microsoft Skype,他演示了另一種漏洞利用技術
--browser-subprocess-path=
這個命令行參數允許用戶給渲染器指定一個可執行文件的路徑並以插件的形式啓動它。在這個poc中,rgod演示了這個payload文件可以被存儲在網絡的UNC路徑中。這個利用技巧也會給EDR軟件造成潛在的危害。
在Slack (ZDI-18-265)中,他指出一個存在的Slack進程將會阻止利用程序的運行。‘–user-data-dir='被添加Slack的指令中,這樣就可以使用不同的用戶身份,這樣就可以在有Slack進程的受害主機上運行poc了。
問題的核心
Electron通過添加黑名單來阻止相關的Chromium運行指令。雖然一部分漏洞不能被利用了,但是問題的根源還是存在的。當應用調用Electron.js API時app.setAsDefaultProtocolClient()
,去給Windows客戶端註冊自定義的URI時,Electron.js會在Windows中創建一個新的註冊表。下面就是有漏洞的Slack Windows客戶端如何用Electron.js 去註冊一個自定義的URI過程。
通過微軟的文檔來看,這個註冊程序讓slack.exe來處理自定義的slack:// URI協議。URI 將替換掉“%1”這個字符串,並且傳遞給處理程序一個自定義的命令行選擇。微軟文檔指出簡單的文本替換將成爲潛在的安全漏洞
不僅僅是Electron.js開發者會以默認的方式去註冊一個不安全的處理程序,微軟的文檔中也沒有表達出潛在的安全問題。我看看最近版本的Electron.js ,它仍然在默認情況下,以安全的方式來註冊處理程序,並且裏面包含一個簡短的提示“不要被未授權的用戶改寫”
總結
Electron是一個流行的技術,它利用了Chromium的技術來封裝平臺實現細節,這讓大量的JavaScript開發者可以快速的開發跨平臺的桌面客戶端程序。這個技術的普及給計算機領域帶來了很大的方便並提升了效率。但是,與此同時,當一個嚴重的缺陷被發現時,就會帶來廣泛的危害。就像其他框架以前一樣,Electron需要去建立和維持一個快速解決安全問題的機制。文檔也需要去完善,目的是爲了讓開發者明白如何用安全的方式去利用各種特性。隨着流行度的增長,漏洞影響範圍也會持續擴大
你會在推特上找到我 @TrendyTofu,也可以關注我的團隊,在裏面我們會發布最新的漏洞利用技術和安全補丁。請關注年度五大漏洞的下一篇,我們將會在明天發佈。