SUSE 安全团队聚焦 2024 年夏季
#spotlight目录
- 引言
- Deepin 文件管理器 D-Bus 服务
- Deepin 应用服务 (配置管理器)
- KDE6 发布最终润色和改进
- SUSE OpenSSH 下游补丁审查
- Croc 上游错误修复审查
- 重新审视 Backintime D-Bus 服务
- KDE Plasma Kameleonhelper 服务用于 RGB LED 控制
- OpenVPN 数据通道卸载 (dco) Linux 内核模块
- Emacs 游戏 setuid/setgid 高分共享助手
- 总结与展望
引言
我们的博客已经有几个月没有更新了,因为这段时间我们没有发现任何重大的安全问题。但我们的团队并没有闲着。我们花费了大量时间研究那些没有发现重大安全问题,或者与上游开发者讨论改进他们的软件。这是 SUSE 安全聚焦系列的第一篇文章,旨在快速概述我们团队在代码审查和积极安全工作方面的最新活动。
Deepin 文件管理器 D-Bus 服务
Deepin 是一个专注于支持中文的 Linux 桌面环境。Deepin 的许多部分已经由我们审查过,并已被纳入 openSUSE 发行版,通常是在 各种 安全问题得到解决之后。然而,对 Deepin 文件管理器 D-Bus 服务的审查已经进行了数年,但收效甚微。
这次审查有点像移动目标,因为上游只部分修复我们报告的问题,抛弃了一些有问题代码,但同时也发布了新代码,这些新代码有时甚至包含新的问题。文件管理器服务最初缺少任何形式的 Polkit 认证,允许系统中的任何参与者执行危险操作。当时我们决定不申请 CVE,因为该服务存在无休止的问题,而且跟踪所有这些问题对于这样一个有缺陷的服务来说似乎是在浪费宝贵的时间。然而,在此期间,一个我们不认识的第三方获得了针对缺失 Polkit 认证部分的 CVE-2023-50700。
我们最近重新审视了该服务,因为软件包维护者告诉我们,一个包含修复的新版本已经可用。遗憾的是,仍然存在过多的问题,无法将该软件包纳入 openSUSE。
Deepin 应用服务 (配置管理器)
另一个等待被允许纳入 openSUSE 的 Deepin 组件是配置管理器 D-Bus 服务,这是名为 Deepin 应用服务项目的一部分。有一个 审查正在进行中,并且我们已经重新审视了几次。到目前为止,我们发现了三种不同的方法来实现路径遍历,从而欺骗 D-Bus 服务处理非预期的系统配置文件目录之外的文件。
上游在收到我们报告这些问题后逐一修复了它们,目前我们仍在等待打包方面的清理工作,否则我们相信该服务很快就可以添加到 openSUSE Tumbleweed 中了。
KDE6 发布最终润色和改进
自我们发布关于 KDE6 发布的大篇博文以来,已经取得了一些改进。DrKonqi D-Bus 组件 已得到上游改进,新版本现在也已包含在 openSUSE Tumbleweed 中。此外,经过长时间的讨论和测试,上游 合并了对 KAuth 的更改,允许将打开的文件描述符传递给 KAuth 助手。最终,必要的更改相当小,而且这些更改应该允许在未来实现更健壮的 KDE 身份验证助手。
SUSE OpenSSH 下游补丁审查
鉴于 XZ 库后门在 OpenSSH 中的发现,我们决定仔细研究 OpenSSH 与我们产品集成的方式。作为这项工作的一部分,我们详细审查了我们目前应用于上游 OpenSSH 代码库的 所有补丁。
由于 OpenSSH 是一个敏感、有时复杂且历史悠久的组件,至今已经积累了大量的补丁。好消息是,在审查过程中,我们在补丁中没有发现任何真正有问题的地方。我们将尽可能将这些补丁上游化,以避免我们自己维护它们,并让所有 OpenSSH 用户都能从这些更改中受益。然而,这是一个长期的努力,需要时间。
Croc 上游错误修复审查
Croc 是一个文件共享工具,允许任意方“轻松安全地”交换数据。2023 年 9 月,我们 发布了一系列在我们发现的该工具中的安全问题。与上游作者的合作有点困难,直到 2024 年 5 月才收到错误修复。我们只晚了一点点时间才检查了这些修复。大多数问题现在已经得到解决,除了两个。
- 虽然现在已经检测到文件名中的转义和控制序列,并中止了传输,但有问题的文件名仍然输出到终端。不过,这个遗留问题很容易修复。
- 为了防止接收到的文件最终出现在危险的主目录位置,已经进行了一些改进。尽管如此,仍然存在不少问题。我们建议我们的 Croc 软件包维护者 添加一个沙箱包装脚本,使用容器技术,以使该软件包可以被 openSUSE 接受。
重新审视 Backintime D-Bus 服务
Backintime 是一个备份软件,提供一个 D-Bus 辅助服务。我们在 2017 年很久以前就对其进行了审查。D-Bus 配置路径最近在 软件包中发生了变化,这促使我们重新审视该软件并检查它是否仍然安全。D-Bus 组件本身没有发生任何相关变化,因此我们继续调整该服务的白名单。
KDE Plasma Kameleonhelper 服务用于 RGB LED 控制
Kameleonhelper 是一个 KDE6 附加组件 D-Bus 服务,它配置 RGB LED(例如游戏键盘上的 LED)以匹配 KDE 桌面的配色方案。我们 对该服务进行了审查,因为有人请求将其添加到 openSUSE。该服务基本上只是调整 SYSFS 中的一些文件,以调整兼容设备的 RGB 值。唯一暴露的 D-Bus 方法可以被本地登录的用户访问,而无需进一步身份验证。
这类服务中典型的危险是路径遍历攻击,也就是说,可以写入到所需的 SYSFS 位置之外的路径。幸运的是,在这个 D-Bus 服务中没有发现此类问题。不过,代码中确实存在 一些怪癖,这些问题现已通过 一个合并请求得到解决。
OpenVPN 数据通道卸载 (dco) Linux 内核模块
OpenVPN 的一个非核心(out-of-tree)内核模块已添加到 openSUSE,这 引发了安全担忧。该内核模块的目的是通过在内核空间执行任务来加速 OpenVPN 网络 I/O 和加密操作。
该模块的代码库规模中等。只有具有 root 权限的用户才能使用该内核模块暴露的套接字 API。本地系统安全不应因此受到削弱。关于处理来自远程方的网络数据包,代码也看起来很合理。所涉及的内核框架提供了一个良好的基础来防止大多数不良情况的发生。尽管在某些地方直接触及 IP、TCP 和 UDP 的数据包头,但大部分代码仅用于不透明地处理数据以进行加密/解密,并将其在相关方之间转发。我们未能识别出该模块代码中的任何问题。
Emacs 游戏 setuid/setgid 高分共享助手
在您喜欢的编辑器中玩游戏,并与其他用户共享您的最高分数?如果您对此勾起了美好的回忆,那么这篇审查就是为您准备的。我们被要求 接受一个 setgid-games 的高分助手程序 到 Emacs 编辑器的发行版中。我们一直认为使用 setuid 二进制文件来共享最高分数只是 UNIX 编程教科书中的一个学术例子。但 这样一个程序实际上是存在的,而且它已经有 20 多年的历史了。
该程序的源代码相当简陋,未能有效防范 setuid/setgid 程序许多方面的问题:环境变量清理、进程 umask 清理、输入路径参数未经 proper 验证以及其他问题。即使所有这些问题都得到修复,当前的程序设计也无法提供任何保护,使其免受任意修改游戏分数,或用巨大的高分文件填满文件系统的侵害。
我们认为地球上很少有用户仍然希望以这种方式在多用户系统上共享最高分数。因此,我们拒绝了包含此带 setgid-games 位程序的请求。任何希望使用此功能的用户都可以手动分配所需的位,例如使用 openSUSE 权限设置。
总结与展望
通过这篇博文,我们希望让大家了解 SUSE 主动产品安全团队的日常工作。即使我们没有实际的 CVE 报告,我们也在以各种方式持续投入资源于开源安全:通过重新审视我们过去审查过的软件,通过执行不会产生重大问题的代码审查,通过与上游就错误修复进行后续讨论,或者通过拒绝那些对我们产品的安全状况不利的组件。
我们计划在未来发布一系列类似的博文,以突出我们的一些不易为人所知的努力。请注意,本系列专注于 SUSE 主动安全团队的工作,而 SUSE 还有一个被动安全团队,负责监控和管理 SUSE 产品中的 CVE 和安全问题,以确保 SUSE 客户和 openSUSE 用户始终获得最新的安全修复,这个领域值得拥有自己的博文系列;事实上,我们也在考虑未来在这方面提供一些内容。