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