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