Discord 桌面應用程序漏洞鏈引發遠程代碼執行攻擊
這個消息應用程序的桌面版本存在一個嚴重的問題,這個問題使得用戶容易受到遠程代碼執行(RCE)攻擊。
Bug賞金獵人Masato Kinugawa幾個月前開發了一條導致RCE的漏洞利用鏈,并在周末發布了一篇博客文章,描述了該方法的技術細節,該方法結合了多個漏洞。
在Discon桌面應用程序使用的軟件框架Electron中發現了第一個安全問題。雖然桌面應用程序不是開源的,但Electron所使用的JavaScript代碼(用于創建能夠利用JavaScript,HTML和CSS的跨平臺應用程序的開源項目)已保存在本地,可以提取和檢查。
Discord的Electron構建中的一項設置“ contextIsolation”被設置為false,這可能允許應用程序外部的JavaScript代碼影響內部代碼,例如Node.js函數。該功能旨在在網頁和JavaScript代碼之間引入單獨的上下文。
“這種行為是危險的,因為Electron允許web頁面外部的JavaScript代碼使用node.js功能,而與nodeIntegration選項無關,并且通過干擾Web頁面中覆蓋的功能來干擾它們,甚至可以實現RCE如果nodeIntegration設置為false,“Kinugawa解釋道。
現在,研究人員需要一種在應用程序上執行JavaScript的方法,從而導致在iframe嵌入功能中發現跨站點腳本(XSS)問題,該問題用于在發布URL時在聊天中顯示視頻,例如YouTube。
這導致Kinugawa轉到了3D內容查看器Sketchfab。Sketchfab在Discord的內容安全策略中列入了白名單,并且可以嵌入到iframe中-但是在嵌入頁面中發現的基于DOM的XSS可能會被濫用。
但是,這僅允許漏洞賞金獵人在iframe中執行JavaScript,因此在Discord桌面應用程序上仍無法實現完整的RCE。至少直到Kinugawa在Electron的“will-navigation”事件代碼中遇到導航限制繞過的情況。
跟蹤為 CVE-2020-15174,此處理錯誤與其他兩個漏洞一起,使 Kinugawa 通過規避導航限制并使用iframe XSS錯誤訪問包含RCE有效負載的網頁來執行RCE攻擊。
Kinugawa通過Discord的Bug賞金計劃報告了他的發現。在Discord團隊對錯誤進行分類并確認其有效性之后,開發人員禁用了Sketchfab嵌入,并向iframe添加了沙箱屬性。
錯誤賞金獵人補充說:“過了一會兒,啟用了contextIsolation。” “現在,即使我可以在應用程序上執行任意JavaScript,RCE也不會通過覆蓋的JavaScript內置方法發生。”
Kinugawa因Discord的報告獲得了5,000美元的獎勵,而Sketchfab團隊因披露XSS缺陷而獲得了300美元的獎勵,現已修復。Electron的“將要解決”問題也已解決。