• sudo相关漏洞CVE-2019-18634、CVE-2019-14287


    一、CVE-2019-18634

    sudo官网爆出目前sudo工具的一个高危漏洞,漏洞编号为:CVE-2019-18634,黑客可通过工具获得Linux的root权限(root具有Linux操作系统的最高权限)。

    sudo官网 :
    Sudo

    sudo 是Unix和Linux操作系统广泛使用的工具,这次漏洞是一个是一个堆栈缓冲溢出 bug,这个漏洞在启用了 pwfeedback 的系统中很容易利用,该漏洞让非特权用户很容易通过缓冲溢出获得 root 权限,不需要攻击者有 Sudo 使用权限。

    在 Sudo 上游版本中,pwfeedback 没有默认启用,但在下游发行版如 Linux Mint 和 Elementary OS 中,pwfeedback 被默认启用了。主要影响的版本:从v1.7.1 到 1.8.25p1,ubuntu版本不受该漏洞影响,最新的1.8.31已修复了该漏洞,请大家及时更新到最新的版本。

    查看自己系统是否存在该漏洞

    1、先通过sudo --version命令查看当前sudo的版本信息。

    1. $ sudo --version
    2. Sudo version 1.8.25p1Sudoers policy plugin version 1.8.25p1Sudoers file grammar version 46Sudoers I/O plugin version 1.8.25p1

    2、通过sudo -l查看 pwfeedback是否启用,如果存在pwfeedback字样则说明已启用否则没有:

    $ sudo -l    Matching Defaults entries for millert on linux-build:insults, pwfeedback, mail_badpass, mailerpath=/usr/sbin/sendmail    User millert may run the following commands on linux-build:(ALL : ALL) ALL
    

    如何利用该漏洞

    1、在1.8.26之前的版本

    利用该漏洞,不需要登录的用户有sudo权限,可以利用无法写入的伪终端,向sudo -k 传入超长字符串。原文为:

    1. The bug can be reproduced by passing a large input with embedded terminal kill characters to sudo from a pseudo-terminal that cannot be written to.
    2. For example, using the socat utility and assuming the terminal kill character is set to control-U (0x15): $ socat pty,link=/tmp/pty,waitslave exec:"perl -e 'print((\"A\" x 100 . chr(0x15)) x 50)'" & $ sudo -S -k id < /tmp/pty Password: Segmentation fault (core dumped)

    解决方法

    1、临时解决方法:

    修改/etc/sudoers 文件,关闭pwfeedback 功能,把该文件中下面这行:

    1. Defaults pwfeedback
    2. 改为:
    3. Defaults !pwfeedback

    我们检查一下我们系统:

    2、彻底解决方法:

    1. 升级系统的sudo,升级到最新的版本1.8.31以上即可。

    2.下载最新安装包(1.8.28) wget http://www.sudo.ws/dist/sudo-1.8.28p1.tar.gz。

    3. 编译升级sudo的版本。

    1. #ls
    2. [root@localhost ~/sudo-1.8.28p1]# ./configure --prefix=/usr --libexecdir=/usr/lib --with-secure-path --with-all-insults --with-env-editor --docdir=/usr/share/doc/sudo-1.8.28.p1 --with-passprmpt="[sudo] password for %p: " && make

    4. 安装 [root@localhost sudo-1.8.28p1]# make install && ln -sfv libsudo_util.so.0.0.0 /usr/lib/sudo/libsudo_util.so.0

    5. 升级sudo的版本

     [root@localhost sudo-1.8.28p1]# sudo --version

    二、CVE-2019-14287

    CVE-2019-14287 sudo权限绕过漏洞:

    有的用户可能知道,如果将sudo配置为允许用户通过Runas规范中定义的ALL关键字来以任意用户身份运行命令的话,那么攻击者将有可能通过制定用户ID -1或4294967295来以root权限执行恶意命令。

    实际上,只要用户的权限足够高,即拥有最高sudo权限的用户,并且在Runas规范中定义了ALL关键字的话,他们就可以运行Runas规范中明确禁止使用的那些root命令,而且以这种方式运行的命令其日志项所显示的目标用户为4294967295,而不是root。与此同时,在执行相应命令的过程中,PAM会话模块将不会运行。

    Sudo 的全称是“superuserdo”,它是Linux系统管理指令,允许用户在不需要切换环境的前提下以其它用户的权限运行应用程序或命令。通常以 root 用户身份运行命令,是为了减少 root 用户的登录和管理时间,同时提高安全性。

    2019年10月14日,Sudo官方发布了Sudo 1.8.28版本,其中包含sudo root权限绕过漏洞(CVE-2019-14287)的补丁修复。

    CVE ID:

    CVE为该漏洞分配的漏洞CVE编号为CVE-2019-14287。

    漏洞细节分析

    一般情况下,大多数Linux发行版的Runas规范(/etc /sudoers)都如下图所示,其中定义的ALL关键字将允许admin或sudo组中的用户以目标系统中的任意用户身份来运行命令:

    如果想利用该漏洞来实施攻击,用户需要拥有sudo权限,并允许用户使用任意用户ID来运行命令。通常来说,这意味着用户的sudoer项在Runas规范中定义了特殊的ALL值。

    如果sudoer策略允许的话,sudo支持由用户指定的用户名或用户ID来运行命令。比如说,下列sudoer项允许我们以任意用户的身份来运行id命令,因为在Runas规范中它包含了ALL关键字。

    alice myhost = (ALL) /usr/bin/id
    

    除了以任意有效用户的身份运行id命令之外,我们还能够以任意用户ID来运行该命令,此时需要使用#uid语句:

    sudo -u#1234 id -u
    

    该命令将返回“1234”。但是,sudo可以使用setresuid(2)和setreuid(2)这两个系统调用来在命令运行之前修改用户ID,并将用户ID修改为-1(或未签名的等价用户ID-4294967295):

    sudo -u#-1 id -u
    

    或:

    sudo -u#4294967295 id -u
    

    上述命令运行之后,将返回“0”。这是因为sudo命令本身已经在以用户ID“0”运行了,所以当sudo尝试将用户ID修改为“-1”时,不会发生任何变化。

    但是,sudo日志条目中记录下的命令运行用户的ID为“4294967295”,而并非root用户(或用户ID为“0”),除此之外,因为用户ID是通过-u选项指定的,并且不会在密码数据库中存储,所以PAM会话模块也不会运行。

    如果sudoer条目允许用户以任意用户身份运行命令(非root),那么攻击者就可以利用该漏洞来绕过这种限制了。比如说,我们有下列sudoer条目:

    bob myhost = (ALL, !root) /usr/bin/vi
    

    用户bob能够以除了root之外的其他任意用户身份来运行命令vi,但由于该漏洞的存在,bob实际上能够通过下列命令来以root权限运行vi命令,并绕过目标系统中的安全策略:

    sudo -u#-1 vi
    

    只有当包含了ALL关键词的sudoer条目存在于Runas规范中时,该漏洞才存在。比如说,如果规范中包含下列sudoer条目的话,目标系统是不会受到该漏洞影响的:

    alice myhost = /usr/bin/id

    在上述例子中,alice只能够以root权限运行id命令,任何以不同身份用户运行命令的尝试都将被拒绝。

    攻击场景截图:

    漏洞复现截图:

    受影响的Sudo版本:

    版本号 < 1.8.28的Sudo版本均将受到该漏洞的影响。
    

    漏洞修复

    Sudo v1.8.28版本已修复该漏洞,建议广大Linux用户尽快手动将sudo包更新至最新版本。

  • 相关阅读:
    小白学习-ElasticSearch教程(5) -批量操作之bulk | 条件查询 | 其它查询
    kotlin coroutine源码解析之Job取消以及异常的处理流程分析
    Redis最常见的5种应用场景
    JavaScript 33. Promise
    Python | 将字符串转换为列表的7种方法
    Redis学习笔记9
    docker 构建docker-compose
    将自己的代码发布成可以pip安装的包
    MindSpore Graph Learning
    『Java安全』Struts2 2.1.8.1 参数名OGNL注入漏洞S2-005(S2-003修复绕过)复现与浅析
  • 原文地址:https://blog.csdn.net/qq_35029061/article/details/126212119