Wayland 快捷方式管理器 swhkd 中的漏洞

swhkd(Simple Wayland HotKey Daemon)中已發現一系列漏洞,這些漏洞是由於臨時檔案、命令列參數和 Unix 套接字的錯誤使用而導致的。 該程式是用 Rust 編寫的,並在基於 Wayland 協議的環境中處理熱鍵按下(基於 X11 的環境中使用的 sxhkd 進程的配置檔案相容模擬)。

該軟體包包括一個執行熱鍵操作的非特權 swhks 進程,以及一個以 root 身份運行並在 uinput API 級別與輸入設備交互的後台 swhkd 進程。 Unix 套接字用於組織 swhks 和 swhkd 之間的交互作用。 使用 Polkit 規則,任何本機使用者都可以以 root 身分執行 /usr/bin/swhkd 進程並向其傳遞任意參數。

已發現的漏洞:

  • CVE-2022-27815 – 將進程 PID 儲存到具有可預測名稱的檔案和其他使用者可寫入的目錄中 (/tmp/swhkd.pid)。 任何使用者都可以建立一個檔案/tmp/swhkd.pid,並將現有進程的pid放入其中,這將導致swhkd無法啟動。 如果沒有針對在 /tmp 中建立符號連結的保護,則漏洞可用於在任何系統目錄中建立或覆蓋檔案(PID 被寫入檔案)或確定係統上任何檔案的內容(swhkd 列印PID 檔案的全部內容到標準輸出)。 值得注意的是,在發佈的修復程式中,PID 檔案沒有移動到/run 目錄,而是移動到/etc 目錄(/etc/swhkd/runtime/swhkd_{uid}.pid),而它也不屬於該目錄。
  • CVE-2022-27814 – 透過操作用於指定設定檔的「-c」命令列選項,可以確定係統上任何檔案的存在。 例如,要檢查 /root/.somefile,您可以執行“pkexec /usr/bin/swhkd -d -c /root/.somefile”,如果該檔案遺失,則會出現錯誤“/root/.somefile 不存在”將顯示」。 與第一個漏洞的情況一樣,解決問題是令人費解的 - 解決問題歸結為外部實用程式“cat”('Command::new(“/bin/cat”)).arg(path)現在啟動讀取取設定檔。output()')。
  • CVE-2022-27819 – 該問題也與「-c」選項的使用有關,該選項會導致載入和解析整個設定檔而不檢查檔案的大小和類型。 例如,要透過耗盡可用記憶體並建立虛假 I/O 來導致拒絕服務,您可以在啟動時指定區塊裝置(“pkexec /usr/bin/swhkd -d -c /dev/sda”)或產生無限數據流的字元設備。 透過在開啟檔案之前重置權限解決了該問題,但修復並不完整,因為僅重置了使用者 ID (UID),但群組 ID (GID) 保持不變。
  • CVE-2022-27818 – 使用在可寫目錄中建立的/tmp/swhkd.sock 檔案建立Unix 套接字,這會導致與第一個漏洞類似的問題(任何使用者都可以建立/tmp/swhkd.sock並產生或攔截按鍵事件)。
  • CVE-2022-27817 - 從所有設備和所有會話中接受輸入事件,即來自另一個 Wayland 會話或控制台的使用者可以在其他使用者按下熱鍵時攔截事件。
  • CVE-2022-27816 swhks 進程與 swhkd 一樣,使用可寫入 /tmp 目錄中的 PID 檔案 /tmp/swhks.pid。 這個問題與第一個漏洞類似,但沒有那麼危險,因為 swhks 在非特權用戶下運行。

來源: opennet.ru

添加評論