Hace pocos dias se dio a conocer la noticia de que fueron encontradas una serie de vulnerabilidades en swhkd (Simple Wayland HotKey Daemon) provocadas por un manejo incorrecto de archivos temporales, opciones de línea de comandos y sockets unix.
El programa está escrito en Rust y maneja 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 para las teclas de acceso rápido y un proceso en segundo plano swhkd que se ejecuta como root e interactúa con los dispositivos de entrada en el nivel de la API uinput . Para organizar la interacción entre swhks y swhkd, se utiliza un socket Unix.
Las reglas de Polkit permiten que cualquier usuario local ejecute el proceso /usr/bin/swhkd como root y le pase parámetros arbitrarios.
La integración del paquete RPM presentado para openSUSE Tumbleweed contenía reglas de Polkit inusuales en el archivo de definición que requirió una revisión por parte del equipo de seguridad de SUSE.
Como resultado de la revisión, se identificaron múltiples problemas de seguridad. Los problemas individuales se describen en el siguiente informe detallado.
De las vulnerabilidades que fueron identificadas, se mencionan las siguientes:
Tabla de contenidos
CVE-2022-27815
Esta vulnerabilidad permite poder guardar un PID de proceso en un archivo con un nombre predecible y en un directorio que otros usuarios puedan escribir (/tmp/swhkd.pid), con lo cual cualquier usuario puede crear un archivo /tmp/swhkd.pid y poner el pid de un proceso existente en él, lo que hará que sea imposible iniciar swhkd.
En ausencia de 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 genera el todo el contenido del archivo PID a stdout). Cabe señalar que en la correcció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
Esta vulnerabilidad permite manipular la opción de línea de comando «-c» para especificar un archivo de configuración puede determinar la existencia de cualquier archivo en el sistema.
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(ruta) es ahora lanzado para leer el archivo de configuración.output()’).
CVE-2022-27819
Este problema también está relacionado con el uso de la opción «-c», que carga y analiza todo el archivo de configuración sin verificar el tamaño y el tipo del archivo.
Por ejemplo, para provocar una denegación de servicio debido al agotamiento de la memoria libre y la creación de E/S parásitas, puede especificar un dispositivo de bloque al inicio («pkexec /usr/bin/swhkd -d -c /dev/sda») o un dispositivo de caracteres que emite un flujo infinito de datos.
El problema se resolvió restableciendo los privilegios antes de abrir el archivo, pero la solución no estaba completa, ya que solo se restablece la ID de usuario (UID), pero la ID de grupo (GID) sigue siendo la misma.
CVE-2022-27818
Esta vulnerabilidad permite poder usar un archivo /tmp/swhkd.sock para crear un socket Unix, que se crea en un directorio público 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 teclas).
CVE-2022-27817
En esta vulnerabilidad, los eventos de entrada se reciben de 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, usa el archivo PID /tmp/swhks.pid en el directorio /tmp de escritura pública. El problema es similar a la primera vulnerabilidad, pero no tan peligroso, ya que swhks se ejecuta bajo un usuario sin privilegios.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.