概述
近日Linux Sudo 被曝出存在一个提权漏洞CVE-2019-14287,可以让sudo功能受限的用户绕过Sudo 的安全策略以root权限执行。该漏洞被列为严重等级,请及时修补更新。
Sudo介绍
sudo是linux下常用的普通用户利用特权执行的安全工具,可以允许普通用户执行部分或者全部的需要root权限的命令,如iptables,service fdisk,halt等。通过sudo可以减少使用root账号进行操作和管理,限制用户滥用权限,也避免不必要的误操作,可以提高系统安全性和特权操作的便利。
visudo
sudo权限配置通过visudo命令打开系统默认编辑器打开/etc/sudoer文件来配置,(建议不要自己手动修改此配置文件)。
sudo的权限配置条目的格式为:
授权用户 主机=命令动作
注意命令可以多列个,所以一个更复杂的公式如下:
授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1,[(切换到哪些用户或用户组)] [是否需要密码验证] [命令2],[(切换到哪些用户或用户组)] [是否需要密码验证] [命令3]......
注意:
[ ]内容都可以省略;命令之间通过逗号分开。
如果[(切换到哪些用户或用户组)]省略,则默认为root用户;如果是ALL ,则代表能切换到所有用户;(本文涉及漏洞就是发在该处限制)
要切换的用户和组要用()号括起来,比如(ALL)、(Chongchong):
比如授予Chongchong用户可以执行一些系统命令的配置:
Chongchong ALL=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,/sbin/parted,/sbin/fdisk
漏洞详情细
该漏洞的需利用要用户具有Sudo特权,该特权使他们能够使用任意用户ID运行命令。通常,这意味着用户的sudoers条目在Runas设置中设置值为ALL。
如果sudoers策略设置了允许Sudo用户可以指定的用户名或用户ID运行命令。例如,以下sudoers条目允许id命令以任何用户身份运行,因为它在Runas配置了ALL关键字。
Chongchong ALL=(ALL) /usr/bin/id
用户Chongchong不仅可以以任何有效用户的身份运行id命令,而且还可以使用#uid语法作为任意用户ID来运行它,例如:
sudo -u#1234 id -u
将返回1234。
但是,Sudo在运行命令之前用于更改用户ID的setresuid(2)和setreuid(2)系统调用。
漏洞片段:
漏洞CVE-2019-14287的源于sudo调用的系统函数setresuid()和setreuid()在参数处理中会将 -1(或其等效的无符号整数4294967295)误认为是 0,而这正好是 root 用户的UserID 。这样:
sudo -u#-1 id -u
或者
sudo -u#4294967295 id -u
实际上会返回0。因为Sudo命令本身已经以用户ID 0的身份运行,因此当Sudo尝试更改UserID为-1时,不会发生任何更改。
但是Sudo日志条中会报告命令是由用户ID 4294967295(而不是root(或UserID 0))运行的。另外,由于通过-u选项指定的UserID在密码数据库中不存在,因此不会触发任何PAM模块权限检查。
如果Sudo配置中有Sudoers条目以允许用户以除root以外的任何用户身份运行命令,则可以使用该错误来避免此限制。例如,给定以下Sudoers条目:
cc ALL =(ALL,!root)/usr/bin/ vi
允许用户cc以root身份以外的任何用户身份运行vi。但是,由于该漏洞,cc实际上可以通过运行Sudo -u#-1 vi以root身份运行vi,这跨过了安全策略。
注意该漏洞影响只有在Runas说明符中存在ALL关键字的sudoers配置项会受到影响。例如,以下sudoers条目不受影响:
chongc host = /usr/bin/id
在上面的示例中,只允许chongc以root身份运行id命令。以其他用户身份运行命令的任何尝试都会被拒绝。
漏洞影响和修补
该漏洞影响面广,该漏洞会任何发行版本影响1.8.28之前的所有版本,包括Centos6,7,Ubuntu等。
目前各发行版本均已经陆续放出漏洞补丁:
Ubuntu版本:
Ubuntu 19.04 升级到sudo 1.8.27-1ubuntu1.1
Ubuntu 18.04 LTS 升级到sudo 1.8.21p2-3ubuntu1.1
Ubuntu 16.04 LTS 升级到 sudo 1.8.16-0ubuntu1.8
Ubuntu 14.04 ESM 升级到 sudo 1.8.9p5-1ubuntu1.5+esm2
Ubuntu 12.04 ESM 升级到 sudo 1.8.3p1-1ubuntu3.8
Debian GNU/Linux 9 Stretch升级到sudo 1.8.19p1-2.1+deb9u1
Debian GNU/Linux 10 Buster升级到 sudo 1.8.27-1+deb10u1。
其他未提供升级包的版本或者超出服务支持的老系统请自行编译安装版本到sudo-1.8.28。