点击上方“凌天实验室”,“星标或置顶公众号”
漏洞、技术还是其他,我都想第一时间和你分享
前言
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命令:将当前用户切换到超级用户下,或切换到指定的用户下,然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户。
具体工作过程如下:
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会话模块。
有什么问题还望各位老大指正,欢迎发言
凌天实验室,是安百科技旗下针对应用安全领域进行攻防研究的专业技术团队,其核心成员来自原乌云创始团队及社区知名白帽子,团队专业性强、技术层次高且富有实战经验。实验室成立于2016年,发展至今团队成员已达35人,在应用安全领域深耕不辍,向网络安全行业顶尖水平攻防技术团队的方向夯实迈进。