PolKit 漏洞允许在大多数 Linux 发行版上获得 root 访问权限

最近 Qualys公司 发布消息称 发现了一个漏洞 (CVE-2021-4034) en 系统组件 波尔基特 (以前称为 PolicyKit),用于分发中以允许非特权用户执行需要提升访问权限的操作。

脆弱性 允许非特权本地用户将他们的特权提升到 root 用户 并获得对系统的完全控制。 该问题的代号为 PwnKit,值得注意的是产生了一个在大多数 Linux 发行版上以默认设置运行的有效漏洞利用。

有人提到 PolKit 附带的 pkexec 实用程序中存在问题,它带有 SUID root 标志,旨在根据 PolKit 规则以其他用户的权限运行命令。

由于错误处理参数 从传递给 pkexec 的命令行,一个 非特权用户可以绕过身份验证并让您的代码以 root 身份运行,无论已建立的访问规则如何。 对于攻击,无论在 PolKit 中设置什么设置和限制,使用 pkexec 实用程序设置可执行文件的 SUID 根属性就足够了。

Pkex​​ec 不检查正确性 启动进程时传递的命令行参数 (argc) 的计数。 pkexec 开发人员假设 argv 数组中的第一个条目始终包含进程的名称 (pkexec),第二个条目要么是 NULL,要么是通过 pkexec 执行的命令的名称。

由于参数计数未与数组的实际内容进行比较,并且假定始终大于 1,因此如果将空的 argv 数组传递给进程,Linux 的 execve 函数允许,pkexec 将 NULL 作为第一个参数(进程name),以及下一个超出缓冲存储器后,作为下一个数组内容。

问题是内存中的 argv 数组之后是包含环境变量的 envp 数组。 因此,对于一个空的 argv 数组,pkexec 从具有环境变量的数组的第一个元素(argv[1] 变得与 envp[0] 相同)中提取有关以提升的权限执行的命令的数据,其内容可以通过以下方式控制攻击者。

收到值 argv[1] 后,pkexec 尝试使用 PATH 中的文件路径确定可执行文件的完整路径,并将指向具有完整路径的字符串的指针写回 argv[1],这会导致覆盖该值第一个环境变量也是如此,因为 argv[1] 与 envp[0] 相同。 通过操纵第一个环境变量的名称,攻击者可以在 pkexec 中替换另一个环境变量,例如替换 suid 程序中不允许的“LD_PRELOAD”环境变量,并让进程在进程中加载​​其共享库.

工作漏洞利用 GCONV_PATH 变量替换, 它用于确定调用 g_printerr() 函数时动态加载的符号转码库的路径,该函数在其代码中使用 iconv_open()。

通过重新定义 GCONV_PATH 中的路径,攻击者可以设法加载的不是普通的 iconv 库,而是他自己的库,其驱动程序将在 pkexec 仍以 root 身份运行的阶段和启动权限验证之前的错误消息期间执行。

据观察, 尽管问题是由于内存损坏造成的,但它可以被可靠且可重复地利用,无论使用何种硬件架构。

漏洞利用已准备就绪 在 Ubuntu、Debian、Fedora 和 CentOS 上成功测试, 但也可以用于其他发行版。 原始漏洞利用尚未公开,这表明它是微不足道的,可以很容易地被其他研究人员重新创建,因此在多用户系统上尽快安装修补程序更新非常重要。

Polkit 也可用于 BSD 和 Solaris 系统,但尚未探索利用。 众所周知,该攻击无法在 OpenBSD 上执行,因为 OpenBSD 内核不允许在调用 execve() 时传递空 argc 值。

自 2009 年 XNUMX 月添加 pkexec 命令以来,该问题一直存在。 PolKit 中漏洞的修复仍然以补丁的形式提供(修复版本尚未形成),但由于提前通知了发行版的开发人员,因此大多数发行版同时发布了更新。漏洞信息。

最后 如果您有兴趣了解更多信息,您可以在中查看详细信息 以下链接。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。