據(jù)研究人員稱,微軟的Azure Functions云容器的一個權(quán)限升級漏洞可能會允許用戶逃逸虛擬容器。
由于觸發(fā)該漏洞需要規(guī)避一個flush-to-disk限制,Intezer研究人員將該漏洞稱為 "Royal Flush"。逃脫flush-to-disk限制就意味著要把數(shù)據(jù)移交給內(nèi)核,在那里數(shù)據(jù)對于其他進程來說是可見的,但是在系統(tǒng)重啟后可能就無法使用了。
該公司發(fā)現(xiàn),Azure Functions容器在運行時會使用privileged Docker標(biāo)志,這意味著Docker主機和容器使用者都可以共享/dev目錄中的設(shè)備文件。該漏洞是由于這些設(shè)備文件具有 "他人 "的讀寫權(quán)限而引起的。
周四發(fā)布的分析報告中描述,"相對寬松的設(shè)備文件權(quán)限并不是系統(tǒng)的默認(rèn)設(shè)置"。
根據(jù)Intezer的說法,由于Azure Functions環(huán)境中包含了52個不同的文件系統(tǒng)分區(qū),這些分區(qū)可以使得不同權(quán)限的用戶可見,這個特點就成了一個很大的安全問題。
研究人員解釋說:"我們懷疑這些分區(qū)是屬于其他Azure Functions客戶端的,但通過進一步的評估顯示,這些分區(qū)只是同一操作系統(tǒng)所使用的普通文件系統(tǒng),比如Docker主機的文件系統(tǒng)pmem0 "。
Intezer研究副總裁Ari Eitan告訴Theatpost:"在攻擊者以一個低權(quán)限的用戶身份來訪問受害者環(huán)境的情況下,這可能就會變得非常危險,利用這個漏洞,攻擊者可以升級權(quán)限,做一些他本不能夠做到的事情(例如從文件系統(tǒng)中讀取文件)。"
此外,雖然該漏洞不是一個Docker逃逸漏洞,他說:"如果用戶能夠升級到root權(quán)限,他們將能夠使用各種Docker逃逸技術(shù)逃逸到Docker主機內(nèi),將這兩者結(jié)合在一起使用,對于系統(tǒng)的安全來說將是一個巨大的威脅。"
Royal Flush云容器漏洞
為了查找這種設(shè)置可能會產(chǎn)生的攻擊路徑,研究人員創(chuàng)建了一個本地測試容器。他們發(fā)現(xiàn),通過使用Debugfs程序(一種用于調(diào)試Linux內(nèi)核的特殊程序,可以用來檢查和改變文件系統(tǒng)的狀態(tài)),一個無權(quán)限的用戶可以輕松穿越Azure Functions文件系統(tǒng)。而且,事實證明,非特權(quán)用戶還可以直接編輯其中的任何文件。
據(jù)分析:"一開始,我們嘗試使用zap_block命令直接編輯文件系統(tǒng)塊的內(nèi)容。在系統(tǒng)內(nèi)部,Linux內(nèi)核會將/dev/sda5設(shè)備文件進行修改處理,對/etc/passwd文件的修改會寫入到緩存中。因此,需要將系統(tǒng)的更改刷新到磁盤內(nèi),這種刷新是由Debugfs程序處理實現(xiàn)的。"
然而,研究人員找到了一種方法,能夠繞過這種對文件進行直接修改的限制。
研究人員解釋說:"首先,我們在容器的diff目錄中,通過Debugfs創(chuàng)建了一個硬鏈接,這樣更改就會影響到我們的容器中的文件了。"
他們補充說:"這個硬鏈接仍然需要root權(quán)限來編輯,所以我們還必須要使用zap_block來編輯其中的內(nèi)容。受一個名為'pagecache管理'的項目啟發(fā),我們可以使用posix_fadvise來使得內(nèi)核從緩存中刷新頁面。這會使得內(nèi)核加載我們的修改,我們最終會將它們傳播到Docker主機文件系統(tǒng)中。"
研究人員指出,Debugfs還支持寫模式,允許用戶對底層磁盤進行修改。他們補充說:"需要重點注意的是,我們通常不會向掛載的磁盤中寫入內(nèi)容,因為它可能會導(dǎo)致磁盤的損壞"。
研究人員解釋說,由于攻擊者可以編輯Docker主機的任意文件, 因此他們可以對/etc/ld.so.preload文件進行修改,這將允許攻擊者進行"預(yù)加載-劫持 "攻擊,通過容器的diff目錄來傳播惡意的共享文件。
根據(jù)研究人員分析:"這個文件可能會被預(yù)加載到Docker主機系統(tǒng)中的每個進程中(我們之前就記錄了使用這種技術(shù)的HiddenWasp惡意軟件),因此攻擊者這樣就能夠在Docker主機上執(zhí)行惡意代碼。"
Intezer向微軟安全響應(yīng)中心(MSRC)報告了該漏洞,但微軟并沒有發(fā)布補丁。根據(jù)分析,這家計算巨頭認(rèn)定該漏洞 "對Azure Functions用戶的安全沒有影響",因為研究人員使用的Docker主機實際上是一個HyperV容器,有另一個沙箱的保護。但這并不是說這個漏洞在其他的配置下就不會有危險。
Eitan說:"盡管MSRC說這個沒有什么可擔(dān)心的,但我們相信高級攻擊者可以利用這個漏洞,并且它可以幫助攻擊者進行更高級別的攻擊,這也就是我們要公布它的原因。"
研究人員還提供了漏洞驗證的代碼。
微軟對此并沒有立即進行回復(fù)評論。
Intezer建議:"通過這樣的案例我們可以發(fā)現(xiàn),漏洞有時是未知的,或者是消費者無法控制的,我們建議要對云安全采取雙層保護的方法。做好基本的防護工作,比如修復(fù)已知的漏洞和加固你的操作系統(tǒng),降低被攻擊的可能性。實施運行時的保護策略,檢測和應(yīng)對漏洞的利用和其他的內(nèi)存攻擊。"
參考及來源:https://threatpost.com/azure-functions-privilege-escalation/165307/