Qualys研究團隊在polkit的pkexec中發現了一個內存破壞漏洞,pkexec是一個SUID-root程序,默認安裝在每個主要的Linux發行版上。這個容易被利用的漏洞允許任何沒有相關權限的用戶通過利用默認配置中的這個漏洞獲得脆弱主機上的完全根權限。
關於Polkit pkexec for LinuxPolkit(以前是PolicyKit)是一個用於控制類unix操作系統中的系統權限的組件。它為非權限進程提供了一種有組織的方式來與權限進程進行通信。還可以使用polkit來執行具有更高權限的命令,使用命令pkexec,後面跟著要執行的命令(具有根權限)。
PwnKit漏洞的潛在影響如果有人成功利用該漏洞,任何非權限用戶都可以獲得該漏洞主機上的root權限。 Qualys的安全研究人員已經能夠獨立驗證該漏洞,並利用該漏洞,進而獲得Ubuntu、Debian、Fedora和CentOS默認安裝的全部root權限。其他Linux 發行版可能容易受到攻擊並且可能被利用。這個漏洞已經隱藏了12 年多,並影響自2009 年5 月第一個版本以來的所有pkexec 版本(commit c8c3d83, “Add a pkexec(1) command”)。
在我們的研究團隊確認該漏洞後,Qualys負責漏洞的披露,並與供應商和開源發行方協調,公佈了該漏洞。
潛在漏洞利用路徑的視頻可以點此查看。 (https://player.vimeo.com/video/669715589)
另外可以查看本視頻(https://player.vimeo.com/video/670582239),了解如何使用Qualys VMDR查看PwnKit漏洞。
PwnKit漏洞的技術細節介紹pkexec的main()函數的開頭處理命令行參數(第534-568行),如果它的路徑不是絕對的,則在path環境變量的目錄中搜索要執行的程序(第610-640行):
不幸的是,如果命令行參數argc的數量是0,這意味著如果我們傳遞給execve()的參數列表argv是空的,即{NULL},那麼argv[0]就是NULL。這是參數列表的終止符。所以:
在第534行,整數n被永久地設置為1;
在第610行,從argv[1]越界讀取指針路徑;
在第639行,指針s被越界寫入argv[1];
但是,這個越界的argv[1]到底要讀寫什麼呢?
要回答這個問題,我們必須稍微離題一下。當execve()一個新程序時,內核將我們的參數、環境字符串和指針(argv和envp)複製到新程序堆棧的末尾,例如:
顯然,因為argv和envp指針在內存中是連續的,如果argc是0,那麼越界的argv[1]實際上是envp[0],指向我們的第一個環境變量value的指針。結果:
在第610 行,要執行的程序的路徑從argv[1](即envp[0])越界讀取,並指向“value”;
在第632 行,這個路徑“value”被傳遞給g_find_program_in_path()(因為“value”在第629行不是以斜杠開頭的);
然後,g_find_program_in_path() 在我們的PATH 環境變量的目錄中搜索一個名為“value”的可執行文件;
如果找到這樣的可執行文件,則將其完整路徑返回給pkexec 的main() 函數(在第632 行);
最後,在第639 行,這個完整路徑被越界寫入argv[1](即envp[0]),從而覆蓋了我們的第一個環境變量。
所以,更準確地說:
如果我們的PATH環境變量是' PATH=name ',並且目錄' name '存在(在當前工作目錄中)並且包含一個名為' value '的可執行文件,那麼一個指向字符串' name/value '的指針將被寫入envp[0]。
如果我們的PATH 是“PATH=name=.”,並且目錄是“name=.”存在並包含一個名為“value”的可執行文件,然後將指向字符串“name=./value”的指針越界寫入envp[0]。
換句話說,這種越界寫入允許我們將“不安全的”環境變量(例如,LD_PRELOAD)重新引入到pkexec的環境中。在調用main()函數之前,這些“不安全的”變量通常會(通過ld.so)從SUID程序的環境中刪除。我們將在下一節中使用這個強大的原語。
不過要注意的是,polkit也支持非linux操作系統,如Solaris和*BSD,但我們尚未調查它們的可利用性。然而,我們注意到OpenBSD是不可利用的,因為如果argc為0,它的內核拒絕execve()一個程序。
如何修復PwnKit漏洞考慮到該漏洞在Linux和非Linux操作系統中的攻擊範圍,Qualys建議用戶立即更新此應用。
目前Qualys客戶可以搜索CVE-2021-4034的相關新聞,以識別該漏洞的所有QID 和設備。
現在可以開始免費的Qualys VMDR 試用,以獲得對CVE-2021-4034 的QID(檢測)的完全訪問權限,其中可以識別所有易受攻擊的設備。
Qualys研究團隊在polkit的pkexec中發現了一個內存破壞漏洞,pkexec是一個SUID-root程序,默認安裝在每個主要的Linux發行版上。這個容易被利用的漏洞允許任何沒有權限的用戶通過利用默認配置中的這個漏洞獲得脆弱主機上的完全根權限。
關於Linux的Polkit pkexecQualys QID 覆蓋範圍Qualys 將發布下表中的QID,因為它們從vulnsigs 版本VULNSIGS-2.5.387-2 和Linux 雲代理清單版本lx_manifest-2.5.387.2-1 開始可用。
使用Qualys VMDR 發現易受攻擊的Linux 服務器
識別運行Linux 內核的設備接下來會介紹當前Qualys 客戶如何在他們的環境中檢測PwnKit。
管理這一關鍵漏洞和降低風險的第一步是識別運行Linux操作系統的所有設備。 Qualys VMDR使得識別此類設備變得很容易。
Query: operatingSystem.category1:`Linux`
一旦主機被識別出來,就可以將它們與“動態標籤”組合在一起,比如說:“Linux 服務器”。這有助於自動對具有上述漏洞的現有主機以及在你的環境中啟動的任何新Linux 設備進行分組。標籤使得這些分組設備可以在整個Qualys雲平台上進行查詢、報告和管理。
基於RTI 的優先級使用Qualys VMDR,可以使用以下實時威脅指標(RTI) 確定PwnKit 漏洞的優先級:
Predicted_High_Risk
Privilege_Escalation
Easy_Exploit
High_Lateral_Movement
使用Qualys VMDR修復我們預計供應商將在短期內發布針對該漏洞的修復。當修復可用時,Qualys Patch Management可用於將這些修復部署到易受攻擊的設備中。
使用基於上述RTI 方法的相同優先級,客戶可以使用漏洞右側的“立即修復”按鈕將PwnKit 添加到修復作業中。一旦修復發布,Qualys將找到該漏洞的相關修復,並自動將這些修復添加到修復作業中。這將允許客戶將這些修復部署到易受攻擊的設備上,所有這些修復都來自Qualys雲平台。
使用威脅防護檢測受影響的設備VMDR還允許你使用威脅保護自動映射易受PwnKit漏洞攻擊的設備。
使用VMDR 儀表板跟踪漏洞使用VMDR 儀表板,你可以實時跟踪此漏洞、受影響的主機、狀態和整體管理。為儀表板小部件啟用趨勢分析後,你可以使用“PwnKit”儀表板跟踪環境中的這些漏洞發展趨勢。
利用Qualys XDR 識別漏洞利用嘗試Qualys XDR 客戶可以使用標題為“T1068 – Linux:檢測到Polkit pkexec 本地特權升級漏洞(CVE-2021-4034)”的規則名稱來檢測受影響系統上的利用後活動。啟用後,客戶還可以使用以下QQL 查詢搜索易受攻擊的系統:
eventName:”ThevaluefortheSHELLvariablewasnotfoundthe/etc/shellsfile“or“containssuspiciouscontent“客戶將能夠看到類似以下截圖的輸出:
常見問題哪些版本易受攻擊?從2009年開始的所有Polkit版本都很脆弱。
Qualys研究團隊是否會發布此漏洞的利用代碼?不會。但鑑於利用該漏洞非常容易,我們預計在本博客發布日期後的幾天內,公開的漏洞利用將變得可用。
是否有緩解措施?如果你的操作系統沒有可用的補丁,你可以從pkexec 中刪除SUID 位作為臨時緩解措施;例如:
#chmod0755/usr/bin/pkexec這個漏洞可以遠程利用嗎?不可以,但是如果攻擊者可以以任何非特權用戶身份登錄,則可以快速利用該漏洞來獲得root 特權。
能不能查到被攻擊的證據?是的,這種利用技術會在日誌中留下痕跡,比如“在/etc/SHELL文件中找不到SHELL變量的值”或者“環境變量的值[……]包含可疑內容”。但是,請注意,這個漏洞也可以被利用,不會在日誌中留下任何痕跡。
Recommended Comments