賈浩楠 魚羊 發自 凹非寺,量子位 報道 | 公眾號 QbitAI
「這可能是近期內最需要重視的sudo漏洞。」
程式設計師都知道,一句sudo可以「為所欲為」。
而現在,來自Qualys的安全研究人員發現,sudo中存在一個嚴重的漏洞:
任何本地使用者,無需身份驗證(密碼),也能獲得root許可權。
也就是說,攻擊者完全可以利用這個漏洞,直接接管主機系統!
什麼樣的漏洞
Qualys的研究人員指出,此漏洞是基於堆的緩衝區溢出。
利用這一漏洞,攻擊者無需知道使用者密碼,一樣可以獲得root許可權。並且,是在默認配置下。
△攻擊效果
這一漏洞名為CVE-2021-3156(又名Baron Samedit)。Qualys分析認為,漏洞發生的原因在於sudo錯誤地轉義了參數中的反斜槓。
通常,通過shell(sudo -s或sudo -i)運行命令列時,sudo會轉義特殊字符。
但 -s 或 -i 也可能被用來運行sudoedit,在這種情況下,實際上特殊字符沒有被轉義,這就可能導致緩衝區溢出。
利用該漏洞,研究人員在多個Linux發行版上成功獲得了完整的root許可權,包括Ubuntu 20.04(sudo 1.8.31)、Debian 10(sudo 1.8.27)和Fedora 33(sudo 1.9.2)。
並且,Qualys認為,在這種情況下,sudo支持的其他作業系統和Linux發行版也很容易受到攻擊,並不能排除風險。
漏洞10年前就存在
能讓攻擊者跳過身份驗證,直接獲取root許可權,這個漏洞本身的嚴重程度,按理說應該引起大部分使用者和開發者注意。
事實上,這個漏洞2011年7月開始就已經存在,是由8255ed69這個commit引入的。
匪夷所思的是,從2011年7月29日提交到現在,一直沒有人發現、修復由此引發的漏洞。
也就是說,這個漏洞一直存在於sudo1.9.0到1.9.5p1的所有穩定版本,和1.8.2到1.8.31p2的所有舊版本的默認配置中。
按照慣例,在Qualys公佈這一漏洞的詳細訊息之前,sudo已經正式修復這個漏洞。
所以,升級到sudo的1.9.5p2或是更高版本,就能化解風險。
如何測試你現在使用的sudo版本是否存在漏洞呢?
首先你需要以非root使用者的身份登入,並運行「sudoedit -s /」命令。
有漏洞的系統會拋出一個以 「sudoedit: 」開頭的錯誤,而打過補丁的系統則會顯示一個以 「usage:」開頭的錯誤。
為啥10年未修復?
為什麼提交近10年間,這個漏洞都沒人理會呢?
在Hacker News上,有網友給出了推斷:
他認為,包括但不限於sudo這樣的Linux程序的使用者提交聲明,是從來沒有經過測試的。
提交沒有測試的bug聲明,原作者是沒有充足的理由相信bug的真實性,也就無所謂bug是否修復了。
比如去年,有蘋果的安全人員也發現了一個類似的安全漏洞,Linux Mint上的sudo在非默認配置下,也允許使用者跳過身份驗證獲得root許可權。
而類似這樣的漏洞補丁,大部分也沒有經過測試,所以,對使用者來說,即使安裝漏洞修復,也還存在漏洞修補不完全,以及引起新漏洞的風險。
還有人說,sudo官方沒有「審稿人」的職能,對於使用者的提交,沒有確定的安全標準,所以也不會有的測試和審核。
普通使用者怎麼辦呢?
很遺憾,現在根本沒有一套完美的解決辦法。
面對可能存在的漏洞,你能做的,就是格外留意自己的系統安全,避免不信任的使用者碰到你的電腦。
參考連結:
https://www.theregister.com/2021/01/26/qualys_sudo_bug/
https://news.ycombinator.com/item?id=25919235
https://bit.ly/36hvlal