一、漏洞说明
Sudo是一个强大的实用程序,它包含在大多数(如果不是所有的Unix)和基于Linux 的操作系统中。它允许用户使用其他用户的安全权限运行程序。绝大多数基于Unix和Linux的操作系统都包含Sudo。
在sudo解析命令行参数的方式中发现了基于堆的缓冲区溢出。任何本地用户(普通用户和系统用户,sudoer和非sudoers)都可以利用此漏洞,而无需进行身份验证,攻击者不需要知道用户的密码。成功利用此漏洞可以获得root权限。
漏洞验证截图:
二、影响范围:
漏洞影响版本:
Debian已修复此漏洞,CentOS仍受影响,其他Unix和Linux的操作系统大概率受影响。是否受此漏洞影响可通过以下命令确认:
1)非root用户执行sudoedit -s
2)受影响的系统启动程序会提示“sudoedit:”开头的错误作为响应,安装补丁后启动会提示“usage: ”开头的错误作为响应。
Sudo 1.9.0 - 1.9.5p1
Sudo 1.8.2 - 1.8.31p2
三、修复漏洞(升级sudo版本至1.9.5p2版本)
1、脚本自动修复
这里简单写了个脚本做修复用。
#!/bin/bash
#################################
# copyright by hwb
# DATE:2021-02-03
#
# sudo升级
#################################
#参数定义
date=`date +"%Y-%m-%d-%H:%M:%S"`
ipaddr=`ifconfig | grep 172 |awk '{print $2}'`
webhook='https://oapi.dingtalk.com/robot/send?access_token=18b060d781a5fc9226e7xxx'
#调用函数库
[ -f /etc/init.d/functions ] && source /etc/init.d/functions
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
source /etc/profile
#Require root to run this script.
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1
function SendMsgToDingding() {
curl $webhook -H 'Content-Type: application/json' -d "
{
'msgtype': 'text',
'text': {
'content': ' [通知] $ipaddr \n $message \n 时间:$date \n '
},
'at': {
'atMobiles': [
"1882xxx0",
"1882xx"
],
"isAtAll": false
}
}"
}
sudo_repair(){
echo ""
echo -e "\033[33m************************************************升级sudo版本*****************************************************\033[0m"
#判断是否已升级sudo
sudo_version_num=`sudo -V | grep 1.9.5 | wc -l`
if [ "$sudo_version_num" == "0" ] ; then
if [ -f /opt/sudo-1.9.5p2.tar.gz ];then
echo "*****存在这个sudo压缩包,无需下载*****"
else
ping -c 4 app.fslgz.com >/dev/null 2>&1
if [ $? -eq 0 ];then
#wget -c ttps://www.sudo.ws/dist/sudo-1.9.5p2.tar.gz -O /opt/sudo-1.9.5p2.tar.gz
wget -q https://app.fslgz.com/portal/api/public/fs/association/file/downLoad?uploadId=806571577016647680 -O /opt/sudo-1.9.5p2.tar.gz
action "*****下载sudo1.9.5p2安装包完成******" /bin/true
else
echo "please download sudo package manual !"
exit $?
fi
tar -xvf /opt/sudo-1.9.5p2.tar.gz -C /opt &>/dev/null
cd /opt/sudo-1.9.5p2
./configure --prefix=/usr --libexecdir=/usr/lib --with-secure-path --with-all-insults --with-env-editor --docdir=/usr/share/doc/sudo-1.9.5.p1 --with-passprmpt="[sudo] password for %p: " &>/dev/null
make &>/dev/null
make install
action "[$date]sudo编译安装升级完成!" /bin/true
fi
else
action "sudo已升级到1.9.5p2版本!" /bin/false
fi
sudo_version=`sudo -V | grep 1.9.5p2 | wc -l `
if [ "$sudo_version" > "0" ] ; then
message="sudo升级成功到1.9.5p2版本,sudo内存溢出漏洞(CVE-2021-3156)修复完成!"
SendMsgToDingding
else
message="[修复失败]sudo未升级成功!"
SendMsgToDingding
fi
echo ""
echo -e "\033[33m*************************************************已完成sudo升级**************************************************\033[0m"
echo ""
sleep 1
}
sudo_repair
2、批量执行
因为我这边主要提供公共脚本,各运维人员基于蓝鲸平台批量执行修复脚本即可。
3、钉钉提醒
修复成功后钉钉提醒如下:
ps:这里的脚本不是重点,重点是从发现漏洞到后面的修复流程去考虑如何把平时的一些重复工作做到自动化执行,这也是作为运维人员必须考虑的。