CVE-2021-3560 和 CVE-2021-4034 是 2021 年曝光的兩個 Linux 本地權限提升漏洞,均涉及 Polkit 組件。由于它們影響廣泛且利用門檻較低,迅速引起安全社區關注。本文將深入分析這兩個漏洞的技術原理、影響范圍、區別與聯系,并結合實際案例,提供緩解措施及安全建議。
1. CVE-2021-3560:Polkit 認證繞過漏洞
1.1 漏洞原理
CVE-2021-3560 是一個 認證繞過漏洞,源于 Polkit 處理 DBus 消息時的邏輯缺陷。Polkit(PolicyKit)是 Linux 權限管理框架,通過 DBus 與客戶端通信。當用戶使用 pkexec
提權時,Polkit 需要驗證其權限。
漏洞出現在 Polkit 處理 中斷請求 時的邏輯錯誤:
- 用戶發起特權請求(如
pkexec --user nobody
)。 - 在 Polkit 處理該請求的過程中,攻擊者通過
SIGTERM
終止進程。 - Polkit 未能正確清理狀態,導致后續請求被誤認為已通過認證,從而賦予 root 權限。
1.2 技術細節
漏洞位于 polkitd
處理 DBus 消息的邏輯中,涉及 GLib 的 GMainLoop
事件處理機制。由于 PolkitSubject
對象在認證中斷后未釋放,導致狀態混淆。
攻擊者可使用以下 PoC(概念驗證代碼)來利用該漏洞:
for i in {1..100}; do (pkexec --user nobody bash &); sleep 0.01; killall -9 pkexec; done
此代碼利用競態條件,不斷中斷 pkexec
進程,使得認證狀態失效,從而繞過權限檢查。
1.3 影響范圍
- 受影響版本:Polkit 0.113 至 0.118。
- 受影響系統:Ubuntu 20.04、Debian 10、Fedora 34 等主流發行版。
- CVSS 評分:7.8(高危)。
- 利用門檻:需要本地用戶權限,但無需特殊權限。
- 修復方案:漏洞于 2021 年 6 月 3 日公開,0.119 版本修復了狀態清理問題。
2. CVE-2021-4034:pkexec 本地提權漏洞
2.1 漏洞原理
CVE-2021-4034(“PwnKit”)是 pkexec
二進制文件中的 本地提權漏洞,源于參數處理錯誤。
當 pkexec
運行時:
- 若
argc == 1
(無參數),則pkexec
試圖解析參數。 - 由于缺少邊界檢查,
pkexec
試圖從環境變量加載動態庫,如GCONV_PATH
。 - 攻擊者可偽造共享庫,使其以 root 權限執行任意代碼。
2.2 技術細節
pkexec
源碼中的 main()
函數對 argv
處理不當:
int main(int argc, char *argv[]) {if (argc < 2) {char *path = g_find_program_in_path(argv[0]);setlocale(LC_ALL, ""); // 觸發 GCONV_PATH 加載}
}
攻擊者可以這樣利用:
export GCONV_PATH=./malicious_dir
gcc -shared -fPIC -o malicious.so exploit.c
pkexec
pkexec
會加載惡意庫 malicious.so
,以 root 權限執行其中的代碼。
2.3 影響范圍
- 受影響版本:Polkit 0.105 及之后所有版本(漏洞自 2009 年引入)。
- 受影響系統:幾乎所有 Linux 發行版(Ubuntu、Debian、CentOS、RHEL 等)。
- CVSS 評分:7.8(高危)。
- 利用門檻:本地用戶可直接利用,無需競態條件。
- 修復方案:2022 年 1 月 25 日披露,0.120 版本修復該問題。
3. CVE-2021-3560 與 CVE-2021-4034 的區別與聯系
3.1 主要區別
漏洞編號 | 攻擊目標 | 觸發方式 | 技術要求 | 影響范圍 |
---|---|---|---|---|
CVE-2021-3560 | Polkit DBus | 競爭條件 | 需要精準時序 | 影響 2019-2021 年的系統 |
CVE-2021-4034 | pkexec | 確定性利用 | 僅需環境變量 | 影響 2009 年以來所有系統 |
3.2 共同點
- 都涉及 Polkit 權限管理機制。
- 都可用于本地權限提升,從普通用戶提權至 root。
- 都已被黑客利用,成為實際攻擊場景中的重要漏洞。
- 都已通過軟件更新修復,建議立即升級系統。
4. 防御與緩解措施
4.1 更新系統
- CVE-2021-3560:升級至 Polkit 0.119 或更高。
- CVE-2021-4034:升級至 Polkit 0.120 或更高。
4.2 臨時緩解方案
- 移除 pkexec 的 setuid 權限:
chmod u-s /usr/bin/pkexec
- 禁用 Polkit 服務(適用于無 GUI 服務器):
systemctl stop polkit && systemctl disable polkit
4.3 監控與檢測
- 檢查
pkexec
的異常調用日志:journalctl -xe | grep pkexec
- 使用 SELinux 或 AppArmor 限制
pkexec
訪問權限。
5. 結論
CVE-2021-3560 和 CVE-2021-4034 展示了 Linux 權限管理的兩個關鍵問題:
- 認證繞過(CVE-2021-3560)
- 輸入驗證不足(CVE-2021-4034)
其中,CVE-2021-4034 影響所有主流 Linux 發行版,危害更大。建議 Linux 用戶立即更新系統,實施必要的防御措施,以防止本地提權攻擊。