安全脚本--sudo内存溢出漏洞(CVE-2021-3156)修复

一、漏洞说明

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:这里的脚本不是重点,重点是从发现漏洞到后面的修复流程去考虑如何把平时的一些重复工作做到自动化执行,这也是作为运维人员必须考虑的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡定波007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值