背景
当sudo通过-s或-i命令⾏选项在shell模式下运⾏命令时,它将在命令参数中使⽤反斜杠转义特殊字
符。但使⽤-s或 -i标志运⾏sudoedit时,实际上并未进⾏转义,从⽽可能导致缓冲区溢出。只要存在
sudoers⽂件(通常是 /etc/sudoers),攻击者就可以使⽤本地普通⽤户利⽤sudo获得系统root权限。
漏洞等级:高危
影响范围:Sudo 1.8.2 - 1.8.31p2、Sudo 1.9.0 - 1.9.5p
处理
⽬前官⽅已在sudo新版本1.9.5p2中修复了该漏洞,下面进行升级操作。
1、 升级前准备
wget https://www.sudo.ws/dist/sudo-1.9.5p2.tar.gz或直接yum upgrade sudo也可。
sha:539e2ef43c8a55026697fb0474ab6a925a11206b5aa58710cb42a0e1c81f0978
检查当前版本;sudo -V|head -5
备份库文件:
1)find / -name sudo*.so*
/usr/libexec/sudo/sudoers.so
/usr/libexec/sudo/sudo_noexec.so
2)find / -name libsudo_util.so.0
/usr/libexec/sudo/libsudo_util.so.0
3)备份:cp -pr /usr/libexec/sudo /home/ygcg/libbak/
4)环境动态链接库配置:
ls etc/ld.so.conf.d/
2、解压后,编译:
./configure --prefix=/usr --libexecdir=/usr/lib --with-secure-path --with-all-insults --with-env-editor --docdir=/usr/share/doc/sudo-1.8.6p7 --with-passprmpt="[sudo] password for %p: "
注:–prefix选项是配置安装目录,如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share;指定后,安装后的所有资源文件都会被放在指定的目录下,这样也方便卸载软件或移植软件,当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载干净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统下)。
#make
3、编译:
sudo make install
sudo ln -sfv libsudo_util.so.0.0.0 /usr/lib/sudo/libsudo_util.so.0 ##执行操作前备份/usr/lib/sudo/libsudo_util.so.0文件
建议,可选择跳过该步骤:安装完毕,应清除编译过程中产生的临时文件和配置过程中产生的文件。执行:
#make clean
#make distclean
4、验证:
sudo -V
5、yum upgrade sudo
升级:Sudo version 1.8.19p2----->Sudo version 1.8.23,经验证这种方式只升级了小版本,未升级到Sudo version 1.9.5p2;未能满足安全修复需求。
临时缓解措施
1、安装所需的systemtap软件包和依赖项:
systemtap yum-utils kernel-devel-"$(uname -r)" ##RHEL 7:使用命令安装 kernel debuginfo:
debuginfo-install -y kernel-"$(uname -r)"
RHEL 8:使用命令安装 sudo debuginfo: debuginfo-install sudo
2、创建以下systemtap脚本(将文件命名为sudoedit-block.stap):
probe process("/usr/bin/sudo").function("main") {
command = cmdline_args(0,0,"");
if (strpos(command, "edit") >= 0) {
raise(9);
}
}
3、执行以下命令安装脚本:(使用root权限)
nohup stap -g sudoedit-block.stap &
注:该脚本将使得易受攻击的sudoedit二进制文件停止工作。sudo命令仍将照常执行。
卸载/回退
1、解压目录下检查Makefile文件是否有uninstall命令
2、执行:make uninstall
3、验证:执行sudo,提示找不到libsudo_util.so.0文件
4、打开:/etc/ld.so.conf文件,里面只有一行文件
写入:/usr/local/lib;运行ldconfig,以更新/etc/ld.so.cache文件;cd /etc/ld.so.conf.d/
注:回退过程有问题,sudouninstall会失败,执行后会报找不到libsudo_util.so.0;
5、如只是应付领导,回退到以前版本,rpm 卸载掉以前的版本,在yum重新安装;