Vulnerabilidades en swhkd, un gestor de accesos directos para Wayland

Se han identificado una serie de vulnerabilidades en swhkd (Simple Wayland HotKey Daemon) provocadas por un trabajo incorrecto con archivos temporales, parámetros de línea de comandos y sockets Unix. El programa está escrito en Rust y maneja la pulsación de teclas de acceso rápido en entornos basados ​​en el protocolo Wayland (un análogo compatible con archivos de configuración del proceso sxhkd utilizado en entornos basados ​​en X11).

El paquete incluye un proceso swhks sin privilegios que realiza acciones de teclas de acceso rápido y un proceso swhkd en segundo plano que se ejecuta como root e interactúa con dispositivos de entrada en el nivel de API de uinput. Se utiliza un socket Unix para organizar la interacción entre swhks y swhkd. Usando las reglas de Polkit, cualquier usuario local puede ejecutar el proceso /usr/bin/swhkd como root y pasarle parámetros arbitrarios.

Vulnerabilidades identificadas:

  • CVE-2022-27815: guardar un PID de proceso en un archivo con un nombre predecible y en un directorio en el que otros usuarios pueden escribir (/tmp/swhkd.pid). Cualquier usuario puede crear un archivo /tmp/swhkd.pid y colocar en él el pid de un proceso existente, lo que hará que swhkd no pueda iniciarse. Si no hay protección contra la creación de enlaces simbólicos en /tmp, la vulnerabilidad se puede utilizar para crear o sobrescribir archivos en cualquier directorio del sistema (el PID se escribe en el archivo) o determinar el contenido de cualquier archivo en el sistema (swhkd imprime el todo el contenido del archivo PID a la salida estándar). Es de destacar que en la solución publicada el archivo PID no se movió al directorio /run, sino al directorio /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), donde tampoco pertenece.
  • CVE-2022-27814: manipulando la opción de línea de comando “-c” utilizada para especificar un archivo de configuración, es posible determinar la existencia de cualquier archivo en el sistema. Por ejemplo, para verificar /root/.somefile puede ejecutar “pkexec /usr/bin/swhkd -d -c /root/.somefile” y si falta el archivo, aparecerá el error “/root/.somefile no existe " será mostrado. Como en el caso de la primera vulnerabilidad, solucionar el problema es desconcertante: solucionar el problema se reduce al hecho de que la utilidad externa “cat” ('Command::new(“/bin/cat”)).arg(path) Ahora se inicia para leer el archivo de configuración.output()').
  • CVE-2022-27819: el problema también está relacionado con el uso de la opción “-c”, que hace que todo el archivo de configuración se cargue y analice sin verificar el tamaño y el tipo del archivo. Por ejemplo, para provocar una denegación de servicio al quedarse sin memoria libre y crear E/S falsas, puede especificar un dispositivo de bloque al inicio ("pkexec /usr/bin/swhkd -d -c /dev/sda") o un dispositivo de caracteres que produce 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 ID de usuario (UID), pero el ID de grupo (GID) sigue siendo el mismo.
  • CVE-2022-27818: se crea un socket Unix utilizando el archivo /tmp/swhkd.sock creado en un directorio grabable, lo que genera problemas similares a los de la primera vulnerabilidad (cualquier usuario puede crear /tmp/swhkd.sock y generar o interceptar eventos de pulsación de tecla).
  • CVE-2022-27817: los eventos de entrada se aceptan desde todos los dispositivos y en todas las sesiones, es decir, un usuario de otra sesión de Wayland o de la consola puede interceptar eventos cuando otros usuarios presionan teclas de acceso rápido.
  • CVE-2022-27816 El proceso swhks, como swhkd, utiliza el archivo PID /tmp/swhks.pid en el directorio grabable /tmp. El problema es similar a la primera vulnerabilidad, pero no es tan peligroso porque swhks se ejecuta bajo un usuario sin privilegios.

Fuente: opennet.ru

Añadir un comentario