摘要:Docker已修復了一個漏洞,該漏洞可使攻擊者使用其服務獲得對Windows系統的控制。連接docker後,我們模擬連接客戶端(即系統),並使用CreateProcessWithTokenW API啓動一個新進程。

Docker已修復了一個漏洞,該漏洞可使攻擊者使用其服務獲得對Windows系統的控制。安全諮詢公司Pen Test Partners的研究員Ceri Coburn發現了這個漏洞,這使Docker for Windows暴露在特權提升的環境中。

Docker是一個容器系統,管理員可以在自己的環境中運行應用程序。容器有點像虛擬機,但它們不是在軟件中重新創建整個操作系統,而是共享主機操作系統的許多底層資源。這使得它們比虛擬機(vm)更小、更靈活。

Windows下運行的兩個Docker組件對此漏洞很重要:Docker Desktop 服務(DDS)和Docker Desktop for Windows(DDW)。DDS在後臺運行,而DDW是允許管理員管理其容器的控制面板。

當DDW打開時,它會在Windows中生成許多支持容器管理的子進程。DDS使用稱爲管道的Windows機制連接到這些子進程,該機制允許不同進程相互通信。

DDS在Windows中的系統帳戶下運行,該帳戶是一個非常高的權限帳戶。攻擊者獲得系統帳戶的訪問權限,即可獲取重要的密鑰。

Pen Test Partners發現的漏洞使用名爲模擬的Windows功能。它允許進程的服務器端模擬客戶端。這是因爲客戶端進程通常需要服務器進程以它們的名義執行系統任務。

並非所有帳戶都具有此模擬權限。根據Coburn的說法,在Windows服務帳戶下啓動的任何東西都可以。

這意味着可以使系統在服務帳戶下啓動進程的攻擊者可以利用其系統帳戶權限操縱DDS。如果進程使用了DDS通常會連接到的名稱,那麼在建立連接之後,它可以刪除自己的憑據,而使用DDS憑據。科伯恩解釋道:

連接docker後,我們模擬連接客戶端(即系統),並使用CreateProcessWithTokenW API啓動一個新進程。CreateProcessWithTokenW是一個Win32 API,允許您創建新進程。

Coburn指出,要創建這樣的帳戶,您需要一個已經破壞了的系統,但他解釋說,用戶可以通過在IIS(微軟的web服務器)中操作易受攻擊的web應用程序來進入,IIS很可能運行在同一臺計算機上。這將使此漏洞成爲一個潛在的有用漏洞,作爲鏈接攻擊的一部分,該攻擊將多個漏洞串在一起,首先獲得立足點,然後提升權限。

根據科伯恩的說法,Docker一開始並沒有多大幫助,他說:

最初披露時,Docker甚至否認該漏洞存在。他們的立場是模仿是Windows的一項功能,我們應該和微軟談談。

不過,他堅持認爲,如果開發人員正在開發與命名管道作爲客戶端進行交互的系統服務,則應關閉模擬功能。Docker拒絕了兩次,然後試圖在沒有模擬權限的帳戶下運行概念驗證代碼,因此Coburn發送了有關如何複製問題的說明。當時,該公司確認了這個bug,並於5月11日在2.3.0.2版中發佈了補丁。

這個bug有CVE 2020-11492,在編寫本文時被列爲“reserved”。

相關文章