Dnf5 daemon-server组件 CVE-2024-1929 Root权限升级,CVE-2024-1930 DOS攻击


Dnf5 daemon-server组件 CVE-2024-1929 Root权限升级,CVE-2024-1930 DOS攻击

1)简介

dnf5daemon-server组件是 D-Bus 接口的一部分,用于与系统上的 dnf5 包管理器进行交互。openSUSE 社区计划将额外的 D-Bus 组件添加到 openSUSE Tumbleweed 发行版中,需要 SUSE 安全团队审核。在审核中,我发现了以下问题。
我审查的 dnf5 版本是 5.1.9,引用的源代码基于上游 Git 存储库中的相应版本标记。

2)D-Bus 接口设计

dnf5daemon-server 提供了主接口 “org.rpm.dnf.v0.SessionManager”,客户端可在该接口上创建新会话,注册新的动态分配的 D-Bus 对象。会话对象提供一组附加的 D-Bus 接口,用于修改包管理器配置、安装或删除包,以及检查系统上包和存储库的元数据。
dnf5daemon-server 以 root 身份运行,可以通过 D-Bus 系统总线自动启动。任何有权访问 D-Bus 系统总线的用户都可以与其通信。
对于某些特权操作,D-Bus 服务实施了 Polkit 身份验证,涉及更改存储库配置、执行事务或确认密钥。这些操作需要 auth_admin Polkit 级别的权限,Polkit 授权逻辑的集成是正确的。

3) 本地Root漏洞利用 (CVE-2024-1929)

尽管 Polkit 正确保护特权操作,但在调用 Polkit 之前,D-Bus 接口存在问题。org.rpm.dnf.v0.SessionManager.open_session 方法采用配置条目的键/值映射,位于 “config” 键下。这些配置值作为配置覆盖传递到 libdnf5::Base 配置,影响所有 libdnf5 配置。这里的问题是没有对 “配置” 映射的内容进行健全性检查,是不可信的数据。
这种可能性可以被利用,最简单的方法是欺骗库在非特权用户的控制下加载插件共享库。需要提供 “pluginpath” 和 “pluginconfpath” 配置条目,指向用户控制的路径。非特权用户可在此处放置一个配置文件,指向用户控制的共享库。然后,该库将调用 dlopen() 打开用户控制的共享库,导致在根用户的上下文中执行完整的代码。

3.1) 概念验证

我进行的概念验证显示了此漏洞的实际情况。在 Fedora 39 上,使用 dnf5daemon-server 版本 5.1.10 成功测试了此漏洞。漏洞利用的唯一先决条件是系统上安装了 dnf5daemon-server 软件包,任何本地用户都可通过此方式获得 root 权限。

3.2) 错误修复

为解决此问题,建议强制执行允许被覆盖的配置参数的白名单,仅允许非特权客户端使用非常小的值子集。已在上游提交 e51bf2f0d 中实施了此类白名单强制执行。

3.3) CVE 分配

Red Hat 产品安全部门为此问题指定了 CVE-2024-1929。

4) 会话数量无限制/不良会话关闭行为 (CVE-2024-1930)

D-Bus 客户端通过 D-Bus 方法创建的会话数量没有限制,可能导致资源消耗和服务不可用。建议限制每个非特权用户的会话数量,并优化会话清理机制。

4.1) 错误修复

为解决此问题,建议限制每个非特权用户的会话数量为一个合理的值。此外,建议改进 ThreadsManager 的设计,使用条件变量通知清理线程新的工作。已在上游提交 c090ffeb79 中将最大会话数限制为三个会话,但线程连接行为尚未解决。

4.2) CVE 分配

Red Hat 产品安全部门为此问题指定了 CVE-2024-1930。

5) 每个会话的不可信设置

每个会话设置的一部分是 locale,传递到 C 库函数 newlocale()。存在风险,C 库可能处理任意用户控制的文件或符号链接,可能导致信息泄漏、拒绝服务甚至代码执行。建议对字符串执行健全性检查,防止使用 locale 包含斜杠字符的字符串。

6) dnfdaemon-client 需要完全 Root

虽然 D-Bus 服务实施了 Polkit 来进行特权操作,但 dnf5daemon-client 拒绝为非 root 用户执行特权操作。建议删除客户端中的根检查代码,依赖服务端身份验证逻辑。

Dnf5 daemon-server组件 CVE-2024-1929 Root权限升级,CVE-2024-1930 DOS攻击

7) exploit

#!/bin/bash
PATH=$PATH:/sbin:/usr/sbin
which dnf5daemon-server >/dev/nullif [ $? -ne 0 ]; then echo "You need to install dnf5daemon-server for this exploit to work" 1>&2 exit 1fi
g++ -g -Wall evil_client.cxx -oevil_client -lsdbus-c++if [ $? -ne 0 ]; then echo "Failed to compile evil_client.cxx" 1>&2 echo "Note: You need g++ and sdbus-c++ devel files" 1>&2 exit 1fig++ exploit_lib.cxx -Wall -oexploit.so -shared -fPICif [ $? -ne 0 ]; then echo "Failed to compile exploit.so" 1>&2 exit 1fi
./evil_client $PWD
if [ -e "/evil.file" ]; then echo "exploit succeeded, /evil.file exists"else echo "exploit failed?"fi


参考文章:
https://security.opensuse.org/2024/03/04/dnf5daemon-server-local-root.html



感谢您抽出

Dnf5 daemon-server组件 CVE-2024-1929 Root权限升级,CVE-2024-1930 DOS攻击

.

Dnf5 daemon-server组件 CVE-2024-1929 Root权限升级,CVE-2024-1930 DOS攻击

.

Dnf5 daemon-server组件 CVE-2024-1929 Root权限升级,CVE-2024-1930 DOS攻击

来阅读本文

Dnf5 daemon-server组件 CVE-2024-1929 Root权限升级,CVE-2024-1930 DOS攻击

点它,分享点赞在看都在这里

原文始发于微信公众号(Ots安全):Dnf5 daemon-server组件 CVE-2024-1929 Root权限升级,CVE-2024-1930 DOS攻击

版权声明:admin 发表于 2024年3月7日 下午12:02。
转载请注明:Dnf5 daemon-server组件 CVE-2024-1929 Root权限升级,CVE-2024-1930 DOS攻击 | CTF导航

相关文章