PolKit 漏洞允許在大多數 Linux 發行版上獲得 root 訪問權限

最近 質量 發布消息稱 發現了一個漏洞 (CVE-2021-4034) en 系統組件 polkit (以前稱為 PolicyKit),用於分發中以允許非特權用戶執行需要提升訪問權限的操作。

脆弱性 允許非特權本地用戶將他們的特權提升到 root 用戶 並獲得對系統的完全控制。 該問題的代號為 PwnKit,值得注意的是產生了一個在大多數 Linux 發行版上以默認設置運行的有效漏洞利用。

有人提到 PolKit 附帶的 pkexec 實用程序中存在問題,它帶有 SUID root 標誌,旨在根據 PolKit 規則以其他用戶的權限執行命令。

由於錯誤處理參數 從傳遞給 pkexec 的命令行,一個 非特權用戶可以繞過身份驗證並讓您的代碼以 root 身份運行,無論已建立的訪問規則如何。 對於攻擊,無論在 PolKit 中設置什麼設置和限制,使用 pkexec 實用程序設置可執行文件的 SUID 根屬性就足夠了。

Pkex​​ec 不檢查正確性 啟動進程時傳遞的命令行參數 (argc) 的計數。 pkexec 開發人員假設 argv 數組中的第一個條目始終包含進程的名稱 (pkexec),第二個條目要么是 NULL,要么是通過 pkexec 執行的命令的名稱。

由於參數計數未與數組的實際內容進行比較,並且假定始終大於 1,因此如果將空的 argv 數組傳遞給進程,Linux 的 execve 函數允許,pkexec 將 NULL 作為第一個參數(進程name),以及下一個超出緩衝存儲器後,作為下一個數組內容。

問題是內存中的 argv 數組之後是包含環境變量的 envp 數組。 因此,對於一個空的 argv 數組,pkexec 從具有環境變量的數組的第一個元素(argv[1] 變得與 envp[0] 相同)中提取有關以提升的權限執行的命令的數據,其內容可以通過以下方式控制攻擊者。

收到值 argv[1] 後,pkexec 嘗試使用 PATH 中的文件路徑確定可執行文件的完整路徑,並將指向具有完整路徑的字符串的指針寫回 argv[1],這會導致覆蓋該值第一個環境變量也是如此,因為 argv[1] 與 envp[0] 相同。 通過操縱第一個環境變量的名稱,攻擊者可以在pkexec中替換另一個環境變量,例如替換“LD_PRELOAD”環境變量,這在suid程序中是不允許的,並讓進程在進程中加載其共享庫.

工作漏洞利用 GCONV_PATH 變量替換, 它用於確定調用 g_printerr() 函數時動態加載的符號轉碼庫的路徑,該函數在其代碼中使用 iconv_open()。

通過重新定義 GCONV_PATH 中的路徑,攻擊者可以設法加載的不是普通的 iconv 庫,而是他自己的庫,其驅動程序將在 pkexec 仍以 root 身份運行的階段和啟動權限驗證之前的錯誤消息期間執行。

據觀察, 儘管問題是由於內存損壞造成的,但它可以被可靠且可重複地利用,無論使用何種硬件架構。

漏洞利用已準備就緒 在 Ubuntu、Debian、Fedora 和 CentOS 上成功測試, 但也可以用於其他發行版。 原始漏洞利用尚未公開,這表明它是微不足道的,可以很容易地被其他研究人員重新創建,因此在多用戶系統上盡快安裝修補程序更新非常重要。

Polkit 也可用於 BSD 和 Solaris 系統,但尚未探索利用。 眾所周知,該攻擊無法在 OpenBSD 上執行,因為 OpenBSD 內核不允許在調用 execve() 時傳遞空 argc 值。

自 2009 年 XNUMX 月添加 pkexec 命令以來,該問題一直存在。 PolKit 中漏洞的修復仍然以補丁的形式提供(修復版本尚未形成),但由於提前通知了發行版的開發人員,因此大多數發行版同時發布了更新。漏洞信息。

終於 如果您有興趣了解更多信息,您可以在中查看詳細信息 以下鏈接。


本文內容遵循我們的原則 編輯倫理。 要報告錯誤,請單擊 這裡.

成為第一個發表評論

發表您的評論

您的電子郵件地址將不會被發表。

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。