Wayland 快捷方式管理器 swhkd 中的漏洞

swhkd(Simple Wayland HotKey Daemon)中已发现一系列漏洞,这些漏洞是由于临时文件、命令行参数和 Unix 套接字的错误使用而引起的。 该程序是用 Rust 编写的,并在基于 Wayland 协议的环境中处理热键按下(基于 X11 的环境中使用的 sxhkd 进程的配置文件兼容模拟)。

该软件包包括一个执行热键操作的非特权 swhks 进程,以及一个以 root 身份运行并在 uinput API 级别与输入设备交互的后台 swhkd 进程。 Unix 套接字用于组织 swhks 和 swhkd 之间的交互。 使用 Polkit 规则,任何本地用户都可以以 root 身份运行 /usr/bin/swhkd 进程并向其传递任意参数。

已发现的漏洞:

  • CVE-2022-27815 – 将进程 PID 保存到具有可预测名称的文件和其他用户可写入的目录中 (/tmp/swhkd.pid)。 任何用户都可以创建一个文件/tmp/swhkd.pid,并将现有进程的pid放入其中,这将导致swhkd无法启动。 如果没有针对在 /tmp 中创建符号链接的保护,该漏洞可用于在任何系统目录中创建或覆盖文件(PID 被写入文件)或确定系统上任何文件的内容(swhkd 打印PID 文件的全部内容到标准输出)。 值得注意的是,在发布的修复程序中,PID 文件没有移动到 /run 目录,而是移动到 /etc 目录 (/etc/swhkd/runtime/swhkd_{uid}.pid),而它也不属于该目录。
  • CVE-2022-27814 – 通过操作用于指定配置文件的“-c”命令行选项,可以确定系统上任何文件的存在。 例如,要检查 /root/.somefile,您可以运行“pkexec /usr/bin/swhkd -d -c /root/.somefile”,如果该文件丢失,则会出现错误“/root/.somefile 不存在”将显示”。 与第一个漏洞的情况一样,解决问题是令人费解的 - 解决问题归结为外部实用程序“cat”('Command::new(“/bin/cat”)).arg(path)现在启动读取配置文件。output()')。
  • CVE-2022-27819 – 该问题还与“-c”选项的使用有关,该选项会导致加载和解析整个配置文件而不检查文件的大小和类型。 例如,要通过耗尽可用内存并创建虚假 I/O 来导致拒绝服务,您可以在启动时指定块设备(“pkexec /usr/bin/swhkd -d -c /dev/sda”)或产生无限数据流的字符设备。 通过在打开文件之前重置权限解决了该问题,但修复并不完整,因为仅重置了用户 ID (UID),但组 ID (GID) 保持不变。
  • CVE-2022-27818 – 使用在可写目录中创建的 /tmp/swhkd.sock 文件创建 Unix 套接字,这会导致与第一个漏洞类似的问题(任何用户都可以创建 /tmp/swhkd.sock 并生成或拦截按键事件)。
  • CVE-2022-27817 - 从所有设备和所有会话中接受输入事件,即来自另一个 Wayland 会话或控制台的用户可以在其他用户按下热键时拦截事件。
  • CVE-2022-27816 swhks 进程与 swhkd 一样,使用可写 /tmp 目录中的 PID 文件 /tmp/swhks.pid。 该问题与第一个漏洞类似,但没有那么危险,因为 swhks 在非特权用户下运行。

来源: opennet.ru

添加评论