CVE-2021-4034 Linux Polkit權限提升漏洞復現
前言
由于傳播、利用此文所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,文章作者不為此承擔任何責任。
如果文章中的漏洞出現敏感內容產生了部分影響,請及時聯系作者,望諒解。
一、漏洞簡述
本次研究漏洞為 CVE-2021-4034,該漏洞是由于pkexec 無法正確處理調用參數,從而將環境變量作為命令執行,具有任意用戶權限的攻擊者都可以在默認配置下通過修改環境變量來利用此漏洞,從而獲得受影響主機的root 權限。
polkit介紹
polkit是一個授權管理器,其系統架構由授權和身份驗證代理組成,pkexec是其中polkit的其中一個工具,他的作用有點類似于sudo,允許用戶以另一個用戶身份執行命令。
polkit 提供了一個授權 API,供特權程序(“ MECHANISMS ” )使用,通常通過某種形式的進程間通信機制為非特權程序( “ SUBJECTS ”)提供服務。
在這種情況下,該機制通常將主體視為不受信任。對于來自主體的每個請求,該機制需要確定該請求是否被授權,或者它是否應該拒絕為主體提供服務。使用 polkit API,一種機制可以將此決定轉交給受信任的一方:polkit 權威。
polkit 權限被實現為系統守護進程 polkitd (8),它本身沒有什么特權,因為它以 polkitd系統用戶身份運行。機制、主體和認證代理使用系統消息總線與授權機構進行通信。
除了作為授權之外,polkit 還允許用戶通過驗證管理用戶或客戶端所屬會話的所有者來獲得臨時授權。這對于機制需要驗證系統的操作員確實是用戶還是管理用戶的場景很有用
plokit基本組成
- polkit— 授權管理器
- polkitd— polkit 系統守護進程
- pkcheck— 檢查一個進程是否被授權
- pkaction— 獲取有關已注冊操作的詳細信息
- pkexec— 以另一個用戶身份執行命令
- pkttyagent— 文本認證助手
二、漏洞檢測
Linux下受漏洞影響Polkit版本范圍為 2009年5月至今發布的所有 Polkit 版本。
在CentOS、Ubuntu、Debian、Redhat、Fedora、Gentoo、Mageia等。
多個Linux發行版上預裝有Polkit,即所有存在Polkit的Linux系統均受影響。
但部分版本不受影響:
CentOS:
- CentOS 6:polkit-0.96-11.el6_10.2
- CentOS 7:polkit-0.112-26.el7_9.1
- CentOS 8.0:polkit-0.115-13.el8_5.1
- CentOS 8.2:polkit-0.115-11.el8_2.2
- CentOS 8.4:polkit-0.115-11.el8_4.2
Ubuntu:
- Ubuntu 14.04 ESM:policykit-1-0.105-4ubuntu3.14.04.6+esm1
- Ubuntu 16.04 ESM:policykit-1-0.105-14.1ubuntu0.5+esm1
- Ubuntu 18.04 LTS:policykit-1-0.105-20ubuntu0.18.04.6
- Ubuntu 20.04 LTS:policykit-1-0.105-26ubuntu1.2
- Ubuntu 21.10:policykit-1-0.105-31ubuntu0.1
Debain:
- Debain stretch:policykit-1 0.105-18+deb9u2
- Debain buster:policykit-1 0.105-25+deb10u1
- Debain bullseye:policykit-1 0.105-31+deb11u1
- Debain bookworm,bullseye:policykit-1 0.105-31.1
可以通過以下命令查看版本信息,判斷是否可利用:
CentOS:
rpm -qa polkit
Ubuntu:
dpkg -l policykit-1

圖1 漏洞檢測
可以看到目前版本受此漏洞影響。
三、漏洞復現
目前POC已公開,如下:
https://github.com/berdav/CVE-2021-4034
首先下載POC,通過以下命令
git clone https://github.com/berdav/CVE-2021-4034.git
進入POC目錄,使用make命令

圖2 make命令
注:若出現以下情況,屬于環境未安裝gcc

圖3 缺少gcc,make失敗
之后使用./cve-2021-4034命令進行利用,可以看到成功進行提權。

圖4 提權利用
由普通用戶權限至root權限。
四、漏洞修復
目前各Linux發行版官方均已給出安全補丁,建議用戶盡快升級至安全版本,或參照官方說明措施進行緩解,CentOS、Ubuntu及Debian用戶可參考以下鏈接:
- https://ubuntu.com/security/CVE-2021-4034
- https://access.redhat.com/security/cve/CVE-2021-4034
- https://security-tracker.debian.org/tracker/CVE-2021-4034
截止到目前2022/01/27, CentOS目前已提供安全更新包。
下載地址:http://mirror.centos.org/centos/7/updates/x86_64/Packages/
結束語
本文主要介紹了CVE-2021-4034 Linux Polkit權限提升漏洞的復現過程,漏洞主要利用pkexec 無法正確處理調用參數,從而將環境變量作為命令執行,具有任意用戶權限的攻擊者都可以在默認配置下通過修改環境變量來利用此漏洞,從而獲得受影響主機的root 權限。