14号外媒曝出的sudo安全策略隐患,Security Bypass:CVE-2019-14287具体情况如下:
sudo,是linux系统下,以超级管理员身份运行得意思,配置了某用户拥有sudo执行某些命令得权限,该用户可通过在命令前添加sudo来以root用户执行当前用户没有权限得命令,而不需要切换用户。
root用户可通过/etc/sudoers文件来配置其他用户的sudo权限
sudo用户可以通过sudo -l查看自己的权限
大概说下sudoers文件的规则,在sudoers文件中,每行算一个规则,前面带#号的是说明内容,也就是注释,不执行,剩下的就是规则
sudoers规则大致分两类:一类是别名定义,另外一类是授权规则。别名定义并不是必须的,但是授权规则是必须的
别名规则定义格式如下:
Alias_Type NAME = item1, item2, ...
或Alias_Type NAME = item1, item2, item3: NAME = item4, item5 ...
别名类型(Alias_Type)包括以下四种:
Host_Alias 定义主机别名:
User_Alias 用户别名,可以是用户或者用户组,用户组要在前面加%
Runas_Alias 用来定义runas别名,就是目标用户,即sudo允许切换至的用户
Cmnd_Alias 定义命令别名
Name就是别名了,你可以自定义名称
item就是成员,用户成员,或者命令成员,
sudoers的授权规则是分配权限的执行规则,前面定义的别名就是为了更方便的授权引用别名
授权规则主要的三个要素是“授权用户”、“主机”、“命令动作”,这三个要素缺一不可,在动作之前也可以指定切换到的特定用户,切换的用户要用括号括起来,如果不需要密码直接允许命令的,需要添加NOPASSWD参数,但是这些可以省略
格式如下:
授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1,[(切换到哪些用户或用户组)] [是否需要密码验证] [命令2],[(切换到哪些用户或用户组)] [是否需要密码验证] [命令3]......
举例来说:
www ALL=/bin/chown,/bin/chmod
这条表示,www用户可以在任何主机名的系统中,切换到root用户下执行chown和chmod命令,这里省略了指定切换到的用户和是否需要密码验证,默认切换到的是root用户,默认需要密码验证
而由苹果信息安全部门的Joe Vennix发现的CVE-2019-14287漏洞,就是在授权规则的时候,以(All, !root)权限来制定权限的前提下,可以通过以下两种方式以root身份执行授权命令,如果你是ALL,或者是默认的话,那本身你给的就是root权限,那就没啥好说的了,如果是指定了某个组,或者某个用户,这个漏洞也没有办法利用
而漏洞的原因是,将用户ID转换为用户名的函数会将-1(或无效等效的4294967295)误认为是0,而0正好是root用户的User ID,此外由于通过-u参数指定的User ID在密码数据库中不存在,因此不会触发任何PAM会话模块,从而能够执行任意命令,因为要去查询用户ID,所以,如果指定了用户或组的话,也就不存在被利用的情况
下面简单演示:
登陆nginx用户,并查看其拥有的sudo权限
这边只授权了nginx可以sudo到ftp用户的权限,所以我们正常执行vi命令是无法执行的
然后利用上面说的漏洞,也是无法执行的
然后我们改下sudoers配置,给nginx用户(ALL, !root)权限,然后再尝试
可以以root用户去执行授权命令,只是执行授权命令,并不是任意命令
所以根据以上信息,判断你的配置,不过最好的方式是更新sudo到1.8.28版本
ubuntu的目前可以通过apt直接更新sudo,如果是centos或redhat写文章的时候还是无法直接通过yum更新的,需要从sudo官网下rpm包来更新
下载地址:https://www.sudo.ws/download.html
温馨提示
如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。