渗透测试——CVE-2021-3156 Linux sudo权限提升漏洞

女爷i 2021-07-25 17:35 530阅读 0赞

在这里插入图片描述


QQ 1274510382
Wechat JNZ_aming
商业联盟 QQ群538250800
技术搞事 QQ群599020441
解决方案 QQ群152889761
加入我们 QQ群649347320
共享学习 QQ群674240731
纪年科技aming
网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。

叮叮叮:产品已上线 —>关注 官方-微信公众号——济南纪年信息科技有限公司
民生项目:商城加盟/娱乐交友/创业商圈/外包兼职开发-项目发布/
安全项目:态势感知防御系统/内网巡查系统
云服项目:动态扩容云主机/域名/弹性存储-数据库-云盘/API-AIeverthing
产品咨询/服务售后(同)

纸上得来终觉浅,绝知此事要躬行 !!! 寻找志同道合伙伴创业中。。。抱团滴滴aming联系方式!!


#本文为广告系统自动投放广告

# 如有侵权 删改 请速速联系我们





Web安全

信息安全从业人员

计算机基础、计算机网络、Linux





预备知识

漏洞信息

漏洞编号:CVE-2021-3156

漏洞名称:Linux sudo权限提升漏洞

漏洞描述:

1月26日,sudo发布安全通告,
修复了一个类Unix操作系统在命令参数中,
转义反斜杠时存在基于堆的缓冲区溢出漏洞。

当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.5p1





实验目的
通过实验了解Linux sudo权限提升漏洞的起因,掌握漏洞利用的方法。

实验环境
操作系统:Ubuntu 18.04





任务描述:判断漏洞是否存在。

查看Ubuntu系统版本信息:
在这里插入图片描述

查看sudo版本:
在这里插入图片描述

sudoedit版本为1.8.21p2。
在这里插入图片描述

使用普通用户执行下面的命令:
如果返回以sudoedit:开头的错误,则当前系统可能存在安全风险;
在这里插入图片描述
不受影响的系统将显示以usage:开头的错误。
在这里插入图片描述

任务描述:sudo权限提升漏洞利用。
在这里插入图片描述

下载实验所需PoC并解压:
在这里插入图片描述

进入目录并执行:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其中0)、1)、2)显示的是可以进行漏洞利用的版本。

根据我们的sudoedit版本选择0:
在这里插入图片描述

发现可以成功提权至root。





任务描述:漏洞原理简单分析。

攻击者可以通过在给sudo的任何argv或env参数末尾,
插入一个反斜杠来使堆块溢出,从而导致参数超出范围。

下面来看一下简化版的代码片段:
在这里插入图片描述

第一个for循环在遍历每个参数,
在这里插入图片描述

并使用strlen判断其大小(加上空终止符)。
假设我们有一个空字符串AAAA\(\是一个字符),
大小为5,
并且假设这是唯一的参数,仅分配5个字节。

在下一部分中有一个用于参数的外部for循环,
在这里插入图片描述

和一个将所有参数的内容复制到

单个缓冲区user_args中的内部循环,

本质上是将所有参数串联在一起。





考虑到与前面相同的字符串AAAA\一样,
当[0]==\成立时,进入if并从from++递增,
因为它指向空休止符,
所以导致递增。

之后执行下一条语句*to++=*from++;继续循环,复制空终止符的语句,
并再次递增from以继续复制空终止符之后的字节,最终超出界限。





调试分析见:https://www.cnblogs.com/hac425/p/14336484.html

漏洞修复
目前官方已在sudo新版本1.9.5p2中修复了该漏洞,
官方下载链接:https://www.sudo.ws/download.html

注:建议用户在升级前做好数据备份工作,避免出现意外。





临时防护措施

1、安装所需的systemtap软件包和依赖项:
RHEL7安装kernel debuginfo:debuginfo-install -y kernel-“$(uname -r)”

RHEL 8安装sudo debuginfo:debuginfo-install sudo

2、使用root安装脚本:

#nohup stap -g sudoedit-block.stap&

将输出systemtap脚本的PID编号,
该脚本会导致易受攻击的sudoedit二进制文件停止工作,sudo命令仍照常工作。

注:上述命令会在重启后失效。

3、一旦安装了补丁程序,就可以通过终止systemtap进程来删除systemtap脚本。
例如执行以下命令终止systemtap进程,其中7590是systemtap进程的PID:

kill -s SIGTERM 7590

分析与思考
更多漏洞分析见:https://www.kalmarunionen.dk/writeups/sudo/

参考
1、 https://www.venustech.com.cn/new\_type/aqtg/20210127/22339.html

发表评论

表情:
评论列表 (有 0 条评论,530人围观)

还没有评论,来说两句吧...

相关阅读