在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”等更精簡的旋轉中。
0X1 漏洞描述
Snapd提供附加到本地UNIX_AF套接字的REST API。通過查詢與該套接字的任何連接配接相關聯的UID來完成對受限API函數的通路控制。在for循環中進行字元串解析期間,可能會影響使用者控制的套接字對等資料以覆寫UID變量。這允許任何使用者通路任何API函數。
通過通路API,有多種方法可以擷取root。下面提到了兩種可能性:
1.使用“create-user”API根據從Ubuntu SSO查詢的詳細資訊建立本地使用者。
2.Sideloads Snap包含一個生成新本地使用者的install-hook。
本次影響版本:
Ubuntu 18.10
Ubuntu 18.04 LTS
Ubuntu 16.04 LTS
Ubuntu 14.04 LTS
0X2 環境搭建
實驗環境Ubuntu16.04

然後下載下傳POC代碼:
https://github.com/initstring/dirty_sock
登入Ubuntu:https://login.ubuntu.com
然後本地生成一個秘鑰:
ssh-keygen -t rsa -C "<you email>"
然後到./.ssh下把,id_rsa.pub(公鑰)拷到你賬戶的ssh_key裡面去
0X2 漏洞利用
開始利用下載下傳的poc代碼檔案中第一個腳本測試:
直接利用腳本1進行提權攻擊:
顯示成功,但是ssh沒有開啟,是以連接配接失敗,再次利用顯示失敗!
利用腳本2成功:
成功添加賬戶dirty_sock,檢視其資訊,發現已經具有sudo權限:
提權成功!
再次回到第一次提權,發現snap的版本已經系統被更新了:
官方給的修複即将snap更新到2.37.1以上即可,是以腳本1利用失敗!但是利用腳本2的使用者我們已經添加了,是以後門使用者存在。是以,使用Ubuntu系統的使用者需要盡快更新更新!
參考文章:
https://github.com/SecuritySi/CVE-2019-7304_DirtySock
http://www.4hou.com/vulnerable/16181.html
https://github.com/initstring/dirty_sock