linux sudo root 权限绕过漏洞(CVE-2019-14287)

一、sudo介绍

https://blog.csdn.net/hsj_csdn/article/details/102593827

二、sudo漏洞简介

who where=(whom:group) command

默认情况下,在大多数Linux发行版中,/etc /sudoers文件中,如果在括号中配置了ALL,表示以任意身份执行命令,ALL关键字允许admin或sudo组中的所有用户以系统上的任何有效用户身份运行任何命令。

但是,由于特权分离是Linux中的基本安全范例之一,因此管理员可以配置sudoers文件来定义哪些用户可以运行哪些命令。

在sudo版本小于1.8.28时,即使限制了用户以root用户身份运行特定命令或任何命令,该漏洞也可能允许用户绕过此安全策略并完全控制系统。

攻击者可以利用此漏洞,只需指定用户ID“ -1”或“4294967295”即可以root身份运行命令。这是因为将用户ID转换为用户名的函数将-1或其无符号等效4294967295误认为是0,该值始终是root用户的用户ID。

三、漏洞条件

在sudo版本小于1.8.28时,会有该漏洞。使用 sudo -V 可以查看版本。

利用该漏洞的条件是用户具有sudo配置,并且在配置项中可以以ALL身份执行命令。这样,用户可以以任意用户或任意uid运行命令。这是这个漏洞利用的前提,因为利用漏洞时,需要指定uid为-1。

例如,如下配置项允许 mkdir 命令以任意用户身份运行,因为它括号中指定了ALL,表示以任意的身份执行。

hao ALL=(ALL) /usr/bin/id,/usr/bin/mkdir

用户不仅能够以其它合法用户身份运行该 id,mkdir 命令,还能使用 #uid 语法以任意用户 ID 运行该命令,例如:

sudo -u#1234 id -u

可以看到,用户hao的id是1000。由于/etc/sudoers 中配置了用户hao可以以任何身份运行id命令。使用#uid指定身份为id=1234的用户,执行id命令,可以看到,输出的uid是1234,说明此时用户hao已经可以以uid=1234的用户身份执行命令了。

三、漏洞触发

根据(二)中的描述,当我们把uid改为 -1 或 4294967295 时,将uid转换为用户名的函数将出现bug,返回uid=0。这是因为 sudo命令本身就已经以用户 ID 为0 运行,因此当 sudo 试图将用户 ID 修改成 -1时,不会发生任何变化。

sudo -u#-1 id -u

sudo -u#4294967295 id -u

四、例子

sudo -V 查看我的centos里sudo 的版本是 1.8.23,是有漏洞的版本。

为了演示和测试方便,这里在 /etc/sudoers 中为用户hao配置一条策略,禁止其使用root身份执行mkdir命令。而通过该漏洞,可以让用户hao成功的以root身份运行mkdir命令。

配置 /etc/sudoers ,

hao ALL=(ALL,!root) /usr/bin/mkdir

切换为用户hao,在root根目录下执行mkdir命令,提示无权限:

执行该漏洞的payload,通过这个漏洞执行mkdir,

sudo -u#-1 mkdir test

命令执行成功,

可以看到已经在根目录下创建了一个test目录:

 

五、修复

1、及时升级到sudo1.8.28 版本。

2、检索/etc/sudoers是否存在 ALL 关键词的复合限制逻辑。

 

总结:

1、sudo版本小于1.8.28有此漏洞;使用sudo -V 命令查看版本信息。

2、默认的/etc/sudoers 配置是没有漏洞的。漏洞利用条件是在 /etc/sudoer 中配置了以ALL 身份执行。因为这里需要指定uid为-1。

3、还需要知道该普通用户的密码,因为sudo执行时需要密码。如果在/etc/sudoers中配置了免密,可不用知道密码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值