挖洞經驗 | 從儲存型XSS到RCE的Steam客戶端漏洞
隨著視訊遊戲行業的持續膨脹,Valve的Steam平臺仍然是遊戲玩家們的熱門市場之一,在某種程度上,這也成為了黑客們攻擊目標。最近眾測社群披露的一個Steam客戶端漏洞,就能讓攻擊者在Steam使用者的電腦系統上實現從儲存型XSS到遠端程式碼執行(RCE)的攻擊,可導致個人資訊和進一步的系統控制。最終,該漏洞獲得了Valve官方$7500美金的獎勵。
Steam聊天客戶端介紹
Steam是Valve公司旗下綜合的數字遊戲社交平臺,玩家可以在該平臺購買、下載、討論、上傳和分享遊戲和軟體。為了方便社群玩家的交流溝通,Steam除了具備電腦手機客戶端的聊天功能外,還構建有一個與客戶端功能相同的網頁版聊天系統( https://steamcommunity.com/chat ),該網頁聊天系統具有的多媒體元素和功能與客戶端一致。
Steam聊天客戶端基於React開發而成,React算是Javascript應用框架中具備多種強大安全性的良好架構了,它能一定程度上規避某些不安全函式的應用。另外,Steam聊天客戶端還部署了內容安全策略(CSP),且在其中應用了’unsafe-inline’策略,而本來’unsafe-inline’就會帶來XSS風險,這就有點意思了。
CSP的’ unsafe-inline ‘策略:允許使用內聯資源,如內聯的 <script> 元素、javascript: URL、內聯的事件處理函式和內聯的 <style> 元素。(注意: 使用 ‘unsafe-inline’ 和 ‘unsafe-eval’ 都是不安全的,它們會使您的網站有跨站指令碼攻擊風險。)
漏洞發現
該漏洞由年輕的英國國家網路安全中心(National Cyber Security Centre)安全工程師Thomas Shadwell發現,他曾獲得福布斯2018年評選的“歐洲30名30歲以下優秀工程師”稱號。
Shadwell的 漏洞報告 顯示,他利用了Chrome DevTool工具、XSS Palyload和允許第三方站點URL嵌入的oEmbed格式發現了該漏洞。由於客戶端和網頁版聊天系統的元素和功能模式相同,為了更好的除錯請求,Shadwell選擇了網頁版聊天系統 https://steamcommunity.com/chat 作為突破口,客戶端和網頁版存在的最終測試漏洞相同。
Steam聊天客戶端可以傳送和接收BBcode格式的聊天訊息,而這些訊息會間接地對映為相應的HTML元素,特別是對任意URL都可使用類似[url]的BBcode標籤,Shadwell發現[url=xxx]、[code] 和 [image]標籤存在可利用風險,尤其是 [url=xxx] 未被安全過濾,可以嵌入任意連結,儘管React具備嚴格的XSS緩解防護措施,但並不能緩解[url=xxx]下類似 javascript: URI 的XSS攻擊。
對該漏洞的利用場景為,攻擊者只需向聊天群組玩家成員,傳送一條經過構造的連結,當玩家點選了這條連結之後,就能觸發漏洞實現攻擊。如下PoC視訊所示:
看不到?點 這裡
嚴重的危害就是,攻擊者可以在Steam聊天客戶端的一些公共群組中廣泛傳播經過構造的惡意嵌入連結,如jarfile:..\..\..\..\..\..\..\..\Users\Username\Downloads\drive-by-download.jar,或是一些精巧頁面,願者點選上鉤之後,就能利用該漏洞竊取受害者玩家的個人敏感資訊,進行進一步的網路釣魚攻擊、勒索軟體傳播和系統破壞。
從XSS到RCE
在Shadwell對該漏洞的首次上報中,只發現了以上的XSS漏洞,但在他綜合 前期對Steam客戶端的漏洞發現 時,卻發現可以利用
steam://openexternalforpid/10400/file:///C:/Windows/cmd.exe
構造RCE執行指令,實現對受害者系統的遠端程式碼執行攻擊。只用傳送連結
[url=steam://openexternalforpid/10400/file:///C:/Windows/cmd.exe]click me[/url]
給目標受害者,只要對方點選,攻擊就能成功。
該漏洞的根本原因出在Steam聊天客戶端所謂的“豐富聊天內容”功能中,這也是現在很多流行的聊天應用程式中經常會內建的功能,而該漏洞也就是Steam應用了不安全的CSP 'unsafe-inline'策略所導致的。
據Shadwell透露,總體來說,Steam聊天客戶端的安全設計還算不錯,但問題出在對一些早前的架構採用了相同的安全設計,所以才導致了該漏洞。Shadwell還表示,Steam平臺的遊戲專案存在很多實際價值,所以在Steam上存在很多竊取他人遊戲賬戶和資產的網路犯罪行為。更多漏洞細節請參考漏洞報告: Hackerone