Snap 包管理工具包中的根漏洞

Qualys 在snap-confine 實用程式中發現了今年的第三個危險漏洞(CVE-2022-3328),該實用程式帶有SUID root 標誌,由snapd 進程調用,為獨立包中分發的應用程式創建可執行環境以快照格式。 此漏洞允許本機非特權使用者在預設 Ubuntu 配置中以 root 身分執行程式碼。 該問題已在 snapd 2.57.6 版本中修復。 所有受支援的 Ubuntu 分支的軟體包更新均已發布。

有趣的是,該漏洞是在修復 22.04 月的 snap-confine 中類似漏洞的過程中引入的。 研究人員能夠準備一個有效的漏洞,提供對Ubuntu Server 2022 的root 存取權限,該漏洞除了snap-confine 中的漏洞外,還涉及multipathd 進程中的兩個漏洞(CVE-41974-2022、CVE-41973- XNUMX) ,與傳輸特權指令時繞過權限檢查以及使用符號連結進行不安全操作有關。

snap-confine 中的漏洞是由 Must_mkdir_and_open_with_perms() 函數中的競爭條件引起的,添加該函數是為了防止在檢查所有者之後、調用掛載系統之前用符號鏈接替換 /tmp/snap.$SNAP_NAME 目錄呼叫將快照格式的套件綁定安裝到其中的目錄。 新增的保護是將 /tmp/snap.$SNAP_NAME 目錄重新命名為 /tmp 中的另一個目錄,並使用隨機名稱(如果目錄存在且不屬於 root)。

在利用 /tmp/snap.$SNAP_NAME 目錄重新命名操作時,研究人員利用了 snap-confine 也為 snap 套件內容的根目錄建立 /tmp/snap.rootfs_XXXXXX 目錄的事實。 名稱的“XXXXXX”部分是由 mkdtemp() 隨機選擇的,但是可以在 sc_instance_name_validate 函數中驗證名為“rootfs_XXXXXX”的套件(即,想法是將 $SNAP_NAME 設為“rootfs_XXXXXX”,然後進行重命名操作將導致用根快照覆蓋/tmp/snap.rootfs_XXXXXX 目錄)。

為了實現同時使用/tmp/snap.rootfs_XXXXXX和重新命名/tmp/snap.$SNAP_NAME,啟動了兩個snap-confine實例。 一旦第一個實例建立了/tmp/snap.rootfs_XXXXXX,進程就會阻塞,第二個實例將以套件名稱rootfs_XXXXXX 啟動,導致第二個實例的臨時目錄/tmp/snap.$SNAP_NAME 成為根目錄/tmp /snap第一個的.rootfs_XXXXXX。 重新命名完成後,第二個實例立即崩潰,/tmp/snap.rootfs_XXXXXX 被替換為競爭條件操作,就像利用 XNUMX 月份的漏洞一樣。 替換後,第一個實例的執行鎖定被刪除,攻擊者獲得了對快照根目錄的完全控制。

最後一步是建立一個符號連結 /tmp/snap.rootfs_XXXXXX/tmp,sc_bootstrap_mount_namespace() 函數使用該符號連結將可寫真實目錄 /tmp 綁定掛載到檔案系統中的任何目錄,因為 mount() 呼叫在安裝之前遵循符號連結。 AppArmor 限制會阻止此類安裝,但為了繞過此阻止,該漏洞利用了 multipathd 中的兩個輔助漏洞。

來源: opennet.ru

添加評論