Snap 套件管理工具包中的本機根漏洞

Qualys 在snap-confine 實用程式中發現了兩個漏洞(CVE-2021-44731、CVE-2021-44730),這些漏洞隨SUID 根標誌一起提供,並由snapd 進程調用,以便為獨立包中交付的應用程式建立可執行環境以快照格式。 這些漏洞允許本機非特權使用者在系統上以 root 權限執行程式碼。 這些問題已在今天的 Ubuntu 21.10、20.04 和 18.04 的 snapd 軟體包更新中解決。

第一個漏洞 (CVE-2021-44730) 允許透過硬連結操作進行攻擊,但需要停用系統硬連結保護(將 sysctl fs.protected_hardlinks 設為 0)。 該問題是由於對以 root 身分執行的 snap-update-ns 和 snap-discard-ns 幫助程式的可執行檔位置驗證不正確而導致的。 這些檔案的路徑是在sc_open_snapd_tool() 函數中根據其自己的/proc/self/exe 路徑計算的,這允許您建立一個硬連結以將snap-confine 放在您的目錄中,並放置您自己版本的snap-此目錄中的 update-ns 和 snap-utilities 位於discard-ns 中。 透過硬連結運行後,具有root權限的snap-confine將從目前目錄啟動snap-update-ns和snap-discard-ns文件,並由攻擊者取代。

第二個漏洞是由競爭條件引起的,可以在預設的 Ubuntu 桌面配置中被利用。 為了讓漏洞在 Ubuntu Server 中成功運行,您必須在安裝時從「特色伺服器快照」部分選擇其中一個軟體套件。 在為 snap 套件準備掛載點命名空間期間呼叫的 setup_private_mount() 函數中,競爭條件很明顯。 此函數建立一個臨時目錄“/tmp/snap.$SNAP_NAME/tmp”,或使用現有目錄將 snap 套件綁定掛載到其中。

由於臨時目錄的名稱是可預測的,因此攻擊者可以在檢查所有者之後、呼叫 mount 系統呼叫之前用符號連結取代其內容。 例如,您可以在 /tmp/snap.lxd 目錄中建立指向任意目錄的符號連結“/tmp/snap.lxd/tmp”,對 mount() 的呼叫將遵循該符號連結並將該目錄掛載到快照命名空間。 以類似的方式,您可以將內容掛載到/var/lib 中,並透過替換/var/lib/snapd/mount/snap.snap-store.user-fstab 來組織/etc 目錄在命名空間中的掛載透過取代 /etc/ld.so.preload 來組織使用 root 權限載入庫的 snap 套件。

值得注意的是,建立漏洞利用程式並不是一項簡單的任務,因為 snap-confine 實用程式是使用安全程式設計技術用 Go 編寫的,具有基於 AppArmor 配置檔案的保護,基於 seccomp 機制過濾系統調用,並使用用於隔離的掛載命名空間。 然而,研究人員能夠準備一個有效的漏洞來獲得系統的 root 權限。 漏洞代碼將在用戶安裝提供的更新後幾週內發布。

來源: opennet.ru

添加評論