本文首發於:微信公衆號「運維之美」,公衆號 ID:Hi-Linux。html
「運維之美」是一個有情懷、有態度,專一於 Linux 運維相關技術文章分享的公衆號。公衆號致力於爲廣大運維工做者分享各種技術文章和發佈最前沿的科技信息。公衆號的核心理念是:分享,咱們認爲只有分享才能使咱們的團體更強大。若是你想第一時間獲取最新技術文章,歡迎關注咱們!數據庫
公衆號做者 Mike,一個月薪 3000 的雜工。從事 IT 相關工做 15+ 年,熱衷於互聯網技術領域,認同開源文化,對運維相關技術有本身獨特的看法。很願意將本身積累的經驗、心得、技能與你們分享交流,篇篇乾貨不要錯過喲。若是你想聯繫到我,可關注公衆號獲取相關信息。vim
做爲 Linux
中最常使用的重要實用程序之一,sudo
幾乎安裝在每一款 UNIX
和 Linux
發行版上的,以便用戶調用和運行核心命令。然而近期這個命令曝出的一個嚴重的本地提權漏洞,即使配置中明確不容許 root 用戶訪問,該漏洞仍可容許惡意用戶或程序,在目標 Linux 系統上以 root 用戶身份執行任意命令。安全
sudo
做爲一個系統命令,其容許普通用戶以特殊權限來運行程序或命令,而無需切換使用環境。bash
據悉,該漏洞由蘋果信息安所有門的 Joe Vennix 追蹤發現(漏洞的 CVE ID 爲 CVE-2019-14287
)。服務器
若是想要利用這個漏洞,只需按如下的方式運行便可。微信
$ sudo -u#-1 id -u複製代碼
或者運維
$ sudo -u#4294967295 id -u複製代碼
使用
sudo
命令時,你能夠直接指定用戶的 UID 來代替用戶名。函數
之因此會產生這個漏洞,是由於將用戶 ID 轉換爲用戶名的函數會將 -1
(或無效等效的 4294967295)誤認爲是 0,而這正好是 root 用戶 User ID
。此外,因爲經過 -u
選項指定的 User ID
在密碼數據庫中不存在,所以不會運行任何 PAM 會話模塊。post
CVE-2019-14287
是管理員在配置文件中用了 ALL 關鍵詞後形成的。當 /etc/sudoers
文件中存在 *=(ALL, *)
形式的配置時,本地攻擊者能夠經過指定用戶 ID 爲 -1
或者 4294967295
,從而以 root 權限在服務器上執行命令。例如:
user_name ALL=(ALL, !root) /usr/bin/vim複製代碼
當存在這種 ALL=(ALL, !root)
形式的配置時,表示對被切換到的用戶進行了 ALL(全部用戶) 和其餘用戶的剔除操做。例如上面的含義就是:容許 user_name
用戶以非 root 權限以外的全部用戶權限運行 vim
命令。
下面咱們來看一個實例,首先配置一個容許 r7 用戶以非 root 權限以外的全部用戶權限運行 vim
命令的規則。
而後,直接以 r7 用戶身份切換爲 root 來運行 vim
命令。
咱們能夠看到,命令執行請求被拒絕了。
接着,咱們利用漏洞中所描述的方式進行身份切換。
咱們能夠看到成功切換到爲 root 用戶,並打開了 /etc/shadow
文件。
/etc/shadow
文件只有具有 root 權限的用戶才能進行訪問。
所以,咱們能夠很輕易地利用該漏洞在 vim
命令下啓動一個具備 root 權限的 Shell,而後執行任何命令。
# 在 vim 中執行外部命令,下面這個就表示執行一個帶有 root 權限的 SHELL。
:!/bin/bash複製代碼
sudo 1.8.28
版本。 /etc/sudoers
是否存在 ALL 關鍵詞的複合限制邏輯。