一. 簡介
2021年1月26日,Linux安全工具sudo被發現嚴重的基於堆緩衝區溢位漏洞。利用這一漏洞,攻擊者無需知道使用者密碼,一樣可以獲得root許可權,並且是在預設配置下。此漏洞已分配為CVE-2021-3156,危險等級評分為7分。
當sudo透過-s或-i命令列選項在shell模式下執行命令時,它將在命令引數中使用反斜槓轉義特殊字元。但使用-s或-i標誌執行sudoedit時,實際上並未進行轉義,從而可能導致緩衝區溢位。因此只要存在sudoers檔案(通常是/etc/sudoers),攻擊者就可以使用本地普通使用者利用sudo獲得系統root許可權。研究人員利用該漏洞在多個Linux發行版上成功獲得了完整的root許可權,包括Ubuntu 20.04(sudo 1.8.31)、Debian 10(sudo 1.8.27)和Fedora 33(sudo 1.9.2),並且sudo支援的其他作業系統和Linux發行版也很容易受到攻擊。
目前漏洞細節已公開,請受影響的使用者儘快採取措施進行防護。
二. 影響版本
Sudo 1.8.2 - 1.8.31p2
Sudo 1.9.0 - 1.9.5p1
三. 漏洞檢測
首先以非root使用者的身份登入,並執行“sudoedit -s /”命令。
有漏洞的系統會丟擲一個以“sudoedit:”開頭的錯誤,而打過補丁的系統則會顯示一個以“usage:”開頭的錯誤。
四. 防禦建議
1. 官方升級
目前官方已在sudo新版本1.9.5p2中修復了該漏洞,請受影響的使用者儘快升級版本進行防護,官方下載連結:https://www.sudo.ws/download.html
注:建議使用者在升級前做好資料備份工作,避免出現意外
2.臨時防護措施
Red Hat相關使用者若暫時無法進行升級操作,建議使用以下方法緩解:
1). 安裝所需的systemtap軟體包和依賴項:
systemtap yum-utils kernel-devel-"$(uname -r)"
RHEL 7安裝命令:
kernel debuginfo:debuginfo-install -y kernel-"$(uname -r)"
RHEL 8安裝命令:
sudo debuginfo:debuginfo-install sudo
2). 建立以下系統呼叫指令碼:(將檔案命名為sudoEd-lock.stap)
probe process("/usr/bin/sudo").function("main") {
command = cmdline_args(0,0,"");
if (strpos(command, "edit") >= 0) {
raise(9);
}
}
3). 使用以下命令安裝指令碼:(使用root許可權)
nohup stap -g sudoedit-block.stap &
該指令碼將使得易受攻擊的sudoedit二進位制檔案停止工作。Sudo命令仍然可以正常工作。
注:上述修改在重啟後失效,必須在每次重啟後重新應用。
一旦安裝了新的補丁包,系統分頁尾本就可以被刪除,可以透過取消systemtap程式來刪除systemtap指令碼。例如,透過執行以下命令:
kill -s SIGTERM 7590 (where 7590 is the PID of the systemtap process)
警告:不要試圖透過刪除符號連結來禁用sudo編輯,因為這不是一個好的緩解選項。
五. 參考連結
https://access.redhat.com/security/vulnerabilities/RHSB-2021-002
https://www.sudo.ws/alerts/unescape_overflow.html