Se ha identificado una serie de vulnerabilidades en swhkd (Simple Wayland HotKey Daemon) causadas por un manejo incorrecto de archivos temporales, parámetros de línea de comandos y sockets Unix. El programa está escrito en Rust y se encarga de procesar las pulsaciones de teclas en entornos basados en el protocolo Wayland (similar a nivel de archivos de configuración al proceso sxhkd, utilizado en entornos basados en X11).
El paquete incluye un proceso no privilegiado swhks, que realiza acciones para las teclas de acceso rápido, y un proceso en segundo plano swhkd, que se ejecuta con privilegios de root e interactúa con dispositivos de entrada a nivel de API de uinput. Para organizar la interacción entre swhks y swhkd se utiliza un socket Unix. A través de las reglas de Polkit, se permite a cualquier usuario local iniciar el proceso /usr/bin/swhkd con privilegios de root y pasarle cualquier parámetro.
Vulnerabilidades detectadas:
- CVE-2022-27815 — almacenamiento del PID de un proceso en un archivo con un nombre predecible y en un directorio accesible para escribir por otros usuarios (/tmp/swhkd.pid). Cualquier usuario puede crear el archivo /tmp/swhkd.pid y colocar en él el PID de un proceso existente, lo que llevará a la imposibilidad de iniciar swhkd. Sin una protección contra la creación de enlaces simbólicos en /tmp, la vulnerabilidad puede ser usada para crear o sobrescribir archivos en cualquier directorio del sistema (se registra el PID en el archivo) o para determinar el contenido de cualquier archivo en el sistema (swhkd imprime en stdout todo el contenido del archivo PID). Es notable que en la corrección emitida el archivo PID se trasladó no al directorio /run, sino al directorio /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), donde tampoco debería estar.
- CVE-2022-27814 — manipulando el parámetro de línea de comandos «-c», que se utiliza para especificar el archivo de configuración, se puede determinar la existencia de cualquier archivo en el sistema. Por ejemplo, para verificar /root/.somefile se puede ejecutar «pkexec /usr/bin/swhkd -d -c /root/.somefile» y si el archivo no existe se mostrará el error «/root/.somefile doesn’t exist». Al igual que en el caso de la primera vulnerabilidad, la solución al problema genera perplejidad: la corrección consiste en que para leer el archivo de configuración ahora se utiliza la herramienta externa «cat» (‘Command::new(“/bin/cat”).arg(path).output()’).
- CVE-2022-27819 — el problema también está relacionado con el uso de la opción "-c", a través de la cual se carga y analiza el archivo de configuración completo sin verificar el tamaño y el tipo de archivo. Por ejemplo, para provocar una denegación de servicio mediante el agotamiento de la memoria libre y crear entradas/salidas parásitas, se puede especificar al iniciar un dispositivo de bloque ("pkexec /usr/bin/swhkd -d -c /dev/sda") o un dispositivo de caracteres que emita un flujo infinito de datos. El problema se resolvió restableciendo los privilegios antes de abrir el archivo, pero la solución no fue completa, ya que solo se restablece el identificador de usuario (UID) mientras que el identificador de grupo (GID) permanece sin cambios.
- CVE-2022-27818 — se usa el archivo /tmp/swhkd.sock para crear un socket Unix, que se crea en un directorio público y escribible, lo que lleva a problemas similares a la primera vulnerabilidad (cualquier usuario puede crear /tmp/swhkd.sock y generar o interceptar eventos de pulsaciones de teclas).
- CVE-2022-27817 — los eventos de entrada se aceptan de todos los dispositivos y en todas las sesiones, es decir, un usuario de otra sesión de Wayland o desde la consola puede interceptar eventos de pulsaciones de teclas de otros usuarios.
- CVE-2022-27816 — el proceso swhks, al igual que swhkd, utiliza un archivo PID /tmp/swhks.pid en un directorio público y escribible /tmp. El problema es similar a la primera vulnerabilidad, pero no es tan grave, ya que swhks se ejecuta bajo un usuario no privilegiado.
Fuente: opennet.ru
