雲服務和遊戲系統或被輕易入侵!Squirrel Engine漏洞可使黑客執行任意程式碼

zktq2021發表於2021-10-21

Squirrel程式語言中的越界讀取漏洞可讓攻擊者突破沙盒限制,並在Squirrel虛擬機器 (VM) 中執行任意程式碼,從而使惡意行為者能夠完全訪問底層機器。

鑑於Squirrel在遊戲中並嵌入物聯網 (IoT) 中,該漏洞可能危及數百萬每月玩電子遊戲(如反恐精英:全球攻勢和門戶 2)以及雲服務(如在Twilio電器進出口物聯網平臺),其準備使用的開原始碼庫。

Squirrel是一種開源、物件導向的程式語言,用於視訊遊戲和雲服務的定製和外掛開發。它是一種輕量級的指令碼語言,適合視訊遊戲和嵌入式系統等應用程式的大小、記憶體頻寬和實時需求。

上面提到的兩個遊戲都使用Squirrel Engine遊戲庫,讓玩家能夠建立自定義遊戲模式和地圖。

跟蹤為CVE-2021-41556,當使用稱為Squirrel Engine的遊戲庫執行不受信任的程式碼並影響 Squirrel 的穩定版本分支 3.x 和 2.x時,就會出現此問題。CVE-2021-41556的Squirrel越界讀取漏洞可在使用Squirrel引擎執行不受信任的程式碼時被利用,例如Twilio Electric Imp或某些視訊遊戲。

安全研究人員解釋稱:“當伺服器所有者下載並安裝這個惡意地圖到他的伺服器上時,Squirrel 指令碼就會被執行,逃離它的虛擬機器,並控制伺服器機器。”

在定義 Squirrel 類時,安全漏洞涉及“通過索引混淆進行的越界訪問”。研究人員解釋說:“事實上,在索引中設定位標誌是有問題的,因為攻擊者完全有可能建立一個具有0x02000000方法的類定義。” 他們建立了以下“非常簡單”的概念證明 (PoC):只需一小部分程式碼,就可以利用這些程式碼劫持程式,並授予攻擊者對Squirrel VM的完全控制。

根據分析,“rawset和rawget函式允許我們方便地訪問給定類的成員。”在這個PoC中,Squirrel 直譯器將解引用空指標和段錯誤,因為_defaultvalues陣列還沒有被分配。

攻擊者可以通過以下方式觸發漏洞:

建立具有0x02000005方法和0x1欄位的類定義

使用對應的索引0x02000005訪問該方法

當設定了位標誌0x02000000時,_isfield()巨集為該索引返回true

使用索引0x5訪問_defaultvalues陣列。但是,它只包含0x1項,因此攻擊者已經越界訪問了。

該漏洞很危險,因為惡意行為者可以設定可以讀取和寫入值的虛假陣列。通過這樣做,研究人員發現他們可以他們通過重寫函式指標來“劫持程式的控制流,並獲得對Squirrel VM的完全控制”。

網路安全研究團隊提供了下圖,顯示了攻擊者控制的指標鏈,可以對整個地址空間進行讀寫:

Squirrel GitHub儲存庫已修補

Squirrel GitHub 儲存庫的維護者在8月份承認了該漏洞。9月16日,作為程式碼提交的一部分推出了一個補丁。

但正如The Hacker News所指出的,這些更改並未包含在新的穩定版本中,最新的正式版本 (v3.1)於2016年3月27日釋出。

因此,發現該漏洞的研究人員“高度”推薦在專案中使用Squirrel的維護人員應用可用的修復程式提交,以防止攻擊。

在敏捷開發的今天,越來越多的開原始碼及元件被開發人員引入到應用程式中來。相信任何企業都不想遭到網路攻擊,但將不安全的程式碼引入軟體會大大增加遭到網路攻擊風險。建議企業在軟體開發過程中或進行DevsecOps建設時,進行 靜態程式碼安全檢測及開原始碼安全測試,以確保自研程式碼及開原始碼安全,同時提高軟體安全性降低遭到網路攻擊的風險。


參讀連結:

https://threatpost.com/squirrel-attackers-execute-code-games-cloud-services/175586/


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2838491/,如需轉載,請註明出處,否則將追究法律責任。

相關文章