sudo提權(CVE-2019-14287)復現及原理分析

介紹

sudo,也就是以超級管理員身份運行(superuser do)的意思。sudo是 Linux中最常使用的重要實用程序之一,它功能十分強大,幾乎安裝在每一款基於UNIX或 Linux的操作系統上,也是這些操作系統的核心命令。作爲一個系統命令,普通用戶可通過它以特殊權限來運行程序或命令(通常以root用戶身份運行命令),而無需切換使用環境。
管理員可以配置 sudoers 文件,來定義哪些用戶可以運行哪些命令。即便限制了用戶以 root 身份運行特定或任何命令,該漏洞也可允許用戶繞過此安全策略,並完全控制系統。

復現

準備條件:

1.sudo 版本 小於1.8.28

sudo -V 查看sudo版本

2.配置sudoers安全策略

vi /etc/sudoers

新建普通用戶/設置密碼:useradd/passwd

切換到test用戶執行mkdir命令,提示沒有權限

提權:
sudo -u#-1 mkdir test

sudo -u4294967295 mkdir test2

可見目錄成功以root身份創建屬組爲test

修復及影響


該漏洞影響最新版本 1.8.28 之前的所有 Sudo 版本。
升級到 sudo 1.8.28
檢索/etc/sudoers 是否存在 ALL 關鍵詞的複合限制邏輯
目前廠商已發佈升級補丁以修復漏洞,補丁獲取鏈接:
https://www.sudo.ws/alerts/minus_1_uid.html

總結分析


一直不明白爲什麼要配置sudoers才能觸發此漏洞,特意去了解了一下sudo/sudoers
上文復現過程中我們在sudoers加了這樣一條配置:
test ALL=(ALL,!root) /usr/bin/mkdir
意爲:將授權用戶test在所可能出現的主機上切換到非root的所有用戶執行/usr/bin/mkdir

  • test表示將要授權的用戶
  • 第一個ALL表示所有主機
  • (ALL,!root) 除root外的所有用戶
  • /usr/bin/mkdir 表示授權的命令 命令都是使用絕對路徑, 這是爲了避免目錄下有同名命令被執行,從而造成安全隱患。
再來看一下sudo命令執行過程 :

sudo命令:將當前用戶切換到超級用戶下,或切換到指定的用戶下,然後以超級用戶或其指定切換到的用戶身份執行命令,執行完成後,直接退回到當前用戶。

具體工作過程如下:   
1->當用戶執行sudo時,系統會主動尋找/etc/sudoers文件,判斷該用戶是否有執行sudo的權限   
2–>確認用戶具有可執行sudo的權限後,讓用戶輸入用戶自己的密碼確認   
3–>若密碼輸入成功,則開始執行sudo後續的命令
4–>sudo -u#-1 mkdir

Sudo 開發者說到: “即便 RunAs 規約明確禁止 root 用戶訪問,但如果 Runas 規約文件中首先列出了 ALL 關鍵字,具有 sudo 權限的用戶就可以使用它來以 root 身份運行任意命令。

已經知道在第一步已經走過sudoers文件,說明咱的Sudo -u#-1 or 4294967295 是擁有權限的而且sudo到非root,然後在執行sudo -u#-1 mkdir命令時將用戶ID轉換爲用戶名的函數會將-1(或無效等效的4294967295)誤認爲是0,而這正好是root用戶User ID。此外,由於通過-u選項指定的User ID在密碼數據庫中不存在,因此不會運行任何PAM會話模塊。個人感覺與其說是一個漏洞倒不如說是一個bug。

有什麼問題還望各位老大指正,歡迎發言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章