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