Linux sudo被曝提權漏洞,任意用戶均能以root身份運行命令

Linux用戶請注意!根據外媒的報道,Linux sudo被曝出存在一個提權漏洞,可完全繞過sudo的安全策略。
先簡單說明一下情況,報道指出sudo存在一個安全策略隱患,即便"sudoers configuration"配置文件中明確表明不允許以root用戶進行訪問,但通過該漏洞,惡意用戶或程序仍可在目標Linux系統上以root用戶身份執行任意命令。
sudo,也就是以超級管理員身份運行(superuser do)的意思。sudo是Linux中最常使用的重要實用程序之一,它功能十分強大,幾乎安裝在每一款基于UNIX或Linux的操作系統上,也是這些操作系統的核心命令。作為一個系統命令,普通用戶可通過它以特殊權限來運行程序或命令(通常以root用戶身份運行命令),而無需切換使用環境。
默認情況下,在大多數Linux發行版中,/etc/sudoers文件中RunAs規約的ALL關鍵字允許admin或sudo組中的所有用戶以系統中的任何有效用戶身份運行任何命令。如下圖所示:
然而,在Linux系統中存在一條基本安全范式——權限劃分(privilege separation)。管理員可以配置sudoers文件,來指定哪些用戶可以運行哪些命令。
如此一來,即使限制了用戶以root用戶身份運行特定命令或任何命令,該漏洞也可能允許用戶繞過此安全策略并完全接管系統。
Sudo開發者說到:“即便RunAs規約明確禁止root用戶訪問,但如果Runas規約文件中首先列出了ALL關鍵字,具有sudo權限的用戶就可以使用它來以root身份運行任意命令。”
如何利用此漏洞?Sudo User ID -1 or 4294967295
據悉,該漏洞由蘋果信息安全部門的Joe Vennix追蹤發現(漏洞的CVE ID為CVE-2019-14287)。如果想要利用這個漏洞,只需按以下的方式運行即可:
sudo-u#-1id-u
或者
sudo-u#4294967295id-u
不過我們也能看到這里存在一個這樣的前提,那就是你的安全策略設置如下:
eviluser=(ALL,!root)/usr/bin/vi
然后這個eviluser就能夠通過sudo -u#-1 vi命令以root身份運行vi。
之所以會產生這個漏洞,是因為將用戶ID轉換為用戶名的函數會將-1(或無效等效的4294967295)誤認為是0,而這正好是root用戶User ID。此外,由于通過-u選項指定的User ID在密碼數據庫中不存在,因此不會運行任何PAM會話模塊。
最后,快將sudo升級到1.8.28最新版本吧,新版本已于今天發布!該漏洞會影響1.8.28之前的所有版本。