CVE-2021-3156:破坏互联网的 Sudo 错误

最近, 质量 获释 CVE-2021-3156: 致命的 sudo 存在 10 年的错误不仅影响 Linux,还影响 macOS、AIX 和 Solaris。 在本模块中,我们将以非常易于理解的方式介绍它的一些关键方面。

什么是 CVE-2021-3156?

CVE-2021-3156 是一个堆漏洞利用 sudo 二进制文件在所有类 Unix 操作系统上几乎无处不在。

分解它,堆中的缓冲区溢出可以被利用 任何本地用户,无论什么权限级别,都能获得对系统的root访问权限。

哪些版本的 Sudo 受此影响?

该漏洞影响以下所有内容 sudo 版本:

  • 所有旧版本来自 1.8.21.8.31p2
  • 所有稳定版本来自 1.9.01.9.5p1

这个错误似乎已经存在大约 10 年了! 它于 2011 年 7 月推出(提交 8255ed69)。 该漏洞还存在于 MacOS 大苏尔 以及许多其他类似 UNIX 的系统。

是什么导致了这个错误?

在这个演示中,我们需要 须藤编辑 这只是一个 符号链接 sudo

$ file /usr/bin/sudoedit /usr/bin/sudoedit: symbolic link to sudo 

根据巴伦萨姆迪特的说法:

  1. 执行 sudo 在 ”” 模式(壳 -C 命令)
  2. 执行 须藤编辑-s (MODE_SHELL) 标志或 -i (MODE_LOGIN_SHELL)
  3. 错误在 sudo,关于 须藤编辑 命令,可用于避免转义序列字符并通过以单个反斜杠字符结尾的命令行参数溢出基于堆的缓冲区。

攻击者可以利用此特定漏洞来溢出缓冲区并控制其大小(通常使用 没有 下一个 ) 这可能会导致以 root 权限执行命令。

如何检查您的 Sudo 版本是否存在漏洞?

检查您是否 sudo 版本易受攻击,您可以输入:

$ sudoedit -s '' 

如果您收到这样的错误消息,请知道您的 sudo 版本易受攻击:

$ sudoedit -s '' Segmentation Fault (core dumped) 

我们如何修复这个错误?

为了解决这个问题,我们需要升级我们的 sudo 版本。 这可以通过使用您的发行版的包管理器来完成。 例如,在 Ubuntu/Debian 上,您可以使用 apt 包管理器:

$ sudo apt update && sudo apt --only-upgrade install sudo 

在基于 Arch 的系统上,这可以通过以下方式解决:

$ sudo pacman -Syu 

为了 Fedora/红帽/CentOS:

$ sudo dnf update 

对于 SUSE 和 OpenSUSE:

$ sudo zypper lp -a | grep -i sudo $ sudo zypper up 

更新后,你可以检查你的 sudo 版本:

$ sudo --version Sudo version 1.9.5p2 

如果你的版本是 1.9.5p2 或稍后,恭喜! 您已修补系统。 请注意,上述错误已在稳定的 Debian 发行版 (buster) 中修复 1.8.27-1+deb10u3

进行后续检查,我们得到:

$ sudoedit -s  '' usage: sudoedit [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ... 

因此我们不再得到 分段故障! 因此我们的错误已被修复! CVE-2021-3156? 不再脆弱!

结论

CVE-2021-3156 是最臭名昭著的错误之一,因为它的性质可以允许任何用户获得 root 访问权限。 这意味着,如果攻击者在您的系统上立足,即使是像这样的低优先级用户 万维网数据,他们可以通过破坏 root 来破坏整个机器。 此外,该 sudo 二进制文件相当臃肿,用户倾向于转向 多阿斯 作为执行需要 root 权限的命令的新方法。 您可以阅读完整的 Qualy 报告 这里