还在加班吗?记得吃晚饭哦!

业界新闻

Linux、Unix、MacOS 存在 sudo 漏洞(CVE-2021-3156) 利用复现

2021年02月04日 12:21:24 · 本文共 1,016 字阅读时间约 3分钟 · 4,029 次浏览
Linux、Unix、MacOS 存在 sudo 漏洞(CVE-2021-3156) 利用复现

2021年1月26日在sudo中发现了严重的基于堆的缓冲区溢出,任何本地用户均可利用此溢出。它的发现者将其命名为 Baron Samedit。即使未在sudoers文件中列出用户,也可以利用该错误将特权提升为root用户。利用该漏洞不需要用户认证。

这是 Sudo 工具中存在十年之久的漏洞,可能会授予任意本地用户对基于 Unix 的系统(包括 macOS Big Sur 和早期版本)进行根访问。

可通过非法操作为任意本地用户授予 root 权限。用户要触发它,只需要重写 argv[0]或者创建一个符号链接。

  • 漏洞编号:CVE-2021-3156
  • 漏洞级别:高危
  • 受影响版本:sudo: 1.8.2 - 1.8.31p2、sudo: 1.9.0 - 1.9.5p1

检测方法

以非root用户登录系统,并运行如下命令:

sudoedit -s /

如果响应一个以 sudoedit: 开头的报错,那么表明存在漏洞。

如果响应一个以 usage: 开头的报错,那么表明补丁已经生效。

Sudo漏洞验证

漏洞细节

当sudo通过-s或-i命令行选项在shell模式下 运行命令时,它将在命令参数中使用反斜杠转义特殊字符。如果命令在shell模式下运行,那么sudoers策略插件将在评估sudoers策略(不希望使用转义字符)之前从参数中删除转义字符。

如果代码中的错误以未转义的反斜杠字符结尾,那么它将删除转义字符的错误会超出字符串的最后一个字符。在正常情况下,此错误将是无害的,因为sudo避免了命令参数中的所有反斜杠。但是,由于存在另一个错误,这次是在命令行解析代码中,因此可以 使用-s或-i选项运行sudoedit,并设置一个指示启用Shell模式的标志。因为实际上没有运行命令,所以sudo不会 转义特殊字符。最后,决定是否删除转义符的代码并没有检查命令是否正在实际运行,仅检查了设置了shell标志。

漏洞利用与复现

修改配置文件

vim /etc/sudoers

在root ALL=(ALL:ALL) ALL 下面添加一行配置:renfei ALL=(ALL,!root) ALL

Sudo配置

注意:需创建renfei用户:useradd renfei,修改密码:passwd renfei ,修改完配置文件保存退出::wq!

renfei   表示名字为renfei的用户

  • 第一个ALL   表示用户可以在任意地方使用sudo
  • 第二个(ALL,!root)   表示命令可以被除了root以外的任意用户执行
  • 最后面的ALL   表示被允许执行
  • 整体: renfei用户可以使用sudo,但是除了root以外的任意用户去执行命令

切换到renfei用户,执行 sudo id(查看root的id),发现是无权运行的:

Sudo无权运行

使用如下方法执行我们想要执行的命令

sudo -u# 数字 命令

其中数字范围:-1~4294967295,命令是系统命令

如果以root身份去执行命令,数字使用-1和4294967295

Sudo运行成功

修复方法

更新sudo版本。

商业用途请联系作者获得授权。
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.renfei.net/posts/1003448
评论与留言

以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。

微信搜一搜:任霏博客