【漏洞預警】Ubuntu Linux許可權升級漏洞PoC(CVE-2019-7304)
在2019年1月,國外安全人員在Ubuntu Linux的預設安裝中發現了一個許可權提升漏洞。這是由於snapd API中的一個錯誤,這是一個預設服務。任何本地使用者都可以利用此漏洞獲取對系統的直接root訪問許可權,CVE編號CVE-2019-7304。
為了簡化Linux系統上的打包應用程式,各種新的競爭標準正在出現。Canonical,Ubuntu Linux的製造商,正在推廣他們的“Snap”軟體包。這是一種將所有應用程式依賴項轉換為單個二進位制檔案的方法 – 類似於Windows應用程式。
Snap生態系統包括一個 “應用程式商店” ,開發人員可以在其中貢獻和維護隨時可用的軟體包。
管理本地安裝的Snap以及與此線上商店的通訊部分由名為 “snapd”的系統 服務處理。此服務自動安裝在Ubuntu中,並在“root”使用者的上下文中執行。Snapd正在發展成為Ubuntu作業系統的重要組成部分,特別是在用於雲和物聯網的“Snappy Ubuntu Core”等更精簡的旋轉中。
漏洞描述
snapd提供附加到本地UNIX_AF套接字的REST API。通過查詢與該套接字的任何連線相關聯的UID來完成對受限API函式的訪問控制。在for迴圈中進行字串解析期間,可能會影響使用者控制的套接字對等資料以覆蓋UID變數。這允許任何使用者訪問任何API函式。
通過訪問API,有多種方法可以獲取root。下面提到了兩種可能性:
1.使用“create-user”API根據從Ubuntu SSO查詢的詳細資訊建立本地使用者。
2.Sideloads Snap包含一個生成新本地使用者的install-hook。
漏洞復現
首先我們保證有一個叫vulnbug_spyder的低許可權使用者,我們查vulnbug_spyder版本為2.35.5
然後我們生成一個公鑰,在Ubuntu SSO上註冊一個賬戶,將公鑰配置到賬戶中,通過利用訪問控制檢查來使用本地snapd服務的受限API函式(POST / v2 / create-user)。這將在Ubuntu SSO中查詢提供的電子郵件地址的使用者名稱和公共SSH金鑰,然後根據這些值建立本地使用者,我們直接使用公開的利用指令碼進行測試,發現攻擊成功後會自動跳轉到名字和遠端sso註冊一樣的賬號的shell,但是許可權很低。
但是我們直接使用Sudo -i的時候發現不需要輸入驗證密碼就可以變成root許可權
影響版本
安全問題會影響這些Ubuntu及其衍生產品的釋出:
·Ubuntu 18.10
·Ubuntu 18.04 LTS
· Ubuntu 16.04 LTS
· Ubuntu 14.04 LTS
修復建議
Canonical官方已經針對該漏洞釋出了修復CVE-2019-7304的安全補丁:
·Ubuntu 18.10: https://launchpad.net/ubuntu/+source/snapd/2.35.5+18.10.1
· Ubuntu 18.04 LTS: https://launchpad.net/ubuntu/+source/snapd/2.34.2+18.04.1
· Ubuntu 16.04 LTS: https://launchpad.net/ubuntu/+source/snapd/2.34.2ubuntu0.1
· Ubuntu 14.04 LTS: https://launchpad.net/ubuntu/+source/snapd/2.34.2~14.04.1
時間軸
· 2019-01月 研究人員通過在Ubuntu Linux的預設安裝中發現了一個許可權提升漏洞
· 2019-02-13 研究人員通過部落格披露漏洞的詳情
· 2019-02-13 深信服千里目安全實驗室復現漏洞併發布漏洞預警
參考連結
https://initblog.com/2019/dirty-sock/