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
sudo提权(CVE-2019-14287)复现及原理分析

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

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

sudo提权(CVE-2019-14287)复现及原理分析
提权:
sudo -u#-1 mkdir test

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

可见目录成功以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会话模块。

有什么问题还望各位老大指正,欢迎发言

原创文章,作者:two pan,如若转载,请注明出处:http://absec.cn/?p=1207

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

010-61943626

在线咨询:点击这里给我发消息

邮件:marketing@anbai.com

工作时间:电话:周一至周五,10:00-18:30,节假日休息,邮件随时发哦~