這次是因為CVE-2021-3156 指出 Linux 環境下存在著 sudo 指令漏洞,可以非法取得 sudo 權限,相關文章可以參考 CVE-2021-3156: Heap-Based Buffer Overflow in Sudo (Baron Samedit),剛好我要更新的主機環境沒有辦法連網路,所以在這邊記錄自己的處理方式。
如果主機環境有網路環境,可以直接透過 yum 下載更新即可,如果沒有,則可以參考這邊記錄的方法處理。
這邊的環境是使用 osboxes.org 網站下載的 CentOS 7-1804 版本來測試。
要看主機是否有 sudo漏洞,測試方式是輸入下列指令,如果出現 Segmentation fault則表示套件存在漏洞
$ sudoedit -s '\' `perl -e 'print "A" x 65536'`
Segmentation fault
主機沒有網路則必須先在其他主機上下載檔案,再將檔案搬移到要更新的主機,下面是離線安裝的方法: 首先至 https://pkgs.org 查詢 sudo 套件,找到 CentOS 7,在CentOS Updates x86_64 區塊找到sudo-1.8.23-10.el7_9.1.x86_64.rpm,從裡面的紀錄可以看到這個版本修復了 CVE-2021-3156問題。
可以用下列兩種方式取得 sudo 套件
至Centos下載 sudo package: http://mirror.centos.org/centos/7/updates/x86_64/Packages/
使用下列指令下載,會下載最新的版本,並下載到指定的目錄,如果要指定版本的套件,則將 sudo 改為 sudo-version即可。
$ yum install --downloadonly --downloaddir=/home/osboxes sudo
下載完檔案後,接著將檔案搬移放至主機,接續執行下列指令
$ yum localinstall -y --nogpgcheck path_to_your_package
# 如果有多個 dependencies可以試試看下面的指令(擇一)
$ yum localinstall -y --nogpgcheck folder/*
$ yum install folder/*
更新完再執行一次指令,就不會有前面看到的錯誤了。
$ sudoedit -s '\' `perl -e 'print "A" x 65536'`
usage: sudoedit [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
修復 Sudo Buffer Overflow 漏洞 (CVE-2021-3156)