Identificáronse unha serie de vulnerabilidades en swhkd (Simple Wayland HotKey Daemon) causadas por un traballo incorrecto con ficheiros temporais, parámetros de liña de comandos e sockets Unix. O programa está escrito en Rust e xestiona a pulsación de teclas rápidas en ambientes baseados no protocolo Wayland (un análogo compatible con ficheiros de configuración do proceso sxhkd usado en ambientes baseados en X11).
O paquete inclúe un proceso swhks sen privilexios que realiza accións de teclas rápidas e un proceso swhkd en segundo plano que se executa como root e interactúa cos dispositivos de entrada no nivel da API uinput. Un socket Unix úsase para organizar a interacción entre swhks e swhkd. Usando as regras de Polkit, calquera usuario local pode executar o proceso /usr/bin/swhkd como root e pasarlle parámetros arbitrarios.
Vulnerabilidades identificadas:
- CVE-2022-27815: gardando un PID de proceso nun ficheiro cun nome previsible e nun directorio que poden escribir outros usuarios (/tmp/swhkd.pid). Calquera usuario pode crear un ficheiro /tmp/swhkd.pid e poñer nel o pid dun proceso existente, o que fará que swhkd non poida iniciarse. Se non hai protección contra a creación de ligazóns simbólicas en /tmp, a vulnerabilidade pódese usar para crear ou sobrescribir ficheiros en calquera directorio do sistema (o PID escríbese no ficheiro) ou determinar o contido de calquera ficheiro no sistema (swhkd imprime o contido completo do ficheiro PID a stdout). Cabe destacar que na corrección publicada o ficheiro PID non se moveu ao directorio /run, senón ao directorio /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), onde tampouco pertence.
- CVE-2022-27814: manipulando a opción de liña de comandos "-c" utilizada para especificar un ficheiro de configuración, é posible determinar a existencia de calquera ficheiro no sistema. Por exemplo, para comprobar /root/.somefile pode executar "pkexec /usr/bin/swhkd -d -c /root/.somefile" e se falta o ficheiro, o erro "/root/.somefile non existe ” aparecerá. Como no caso da primeira vulnerabilidade, solucionar o problema é desconcertante: a resolución do problema redúcese ao feito de que a utilidade externa "cat" ("Command::new ("/bin/cat")).arg(path) lánzase agora para ler o ficheiro de configuración.output()').
- CVE-2022-27819: o problema tamén está relacionado co uso da opción "-c", que fai que se cargue e analice todo o ficheiro de configuración sen comprobar o tamaño e o tipo do ficheiro. Por exemplo, para provocar unha denegación de servizo ao quedar sen memoria libre e crear E/S espurias, pode especificar un dispositivo de bloque ao iniciar ("pkexec /usr/bin/swhkd -d -c /dev/sda") ou un dispositivo de carácter que produce un fluxo infinito de datos. O problema resolveuse restablecendo os privilexios antes de abrir o ficheiro, pero a corrección non foi completa, xa que só se restablece o ID de usuario (UID), pero o ID de grupo (GID) segue sendo o mesmo.
- CVE-2022-27818: créase un socket Unix usando o ficheiro /tmp/swhkd.sock creado nun directorio escribible, o que leva a problemas similares aos da primeira vulnerabilidade (calquera usuario pode crear /tmp/swhkd.sock e xerar ou interceptar). eventos de pulsación de tecla).
- CVE-2022-27817: acéptanse eventos de entrada de todos os dispositivos e en todas as sesións, é dicir. un usuario doutra sesión de Wayland ou desde a consola pode interceptar eventos cando outros usuarios premen as teclas de acceso rápido.
- CVE-2022-27816 O proceso swhks, como swhkd, usa o ficheiro PID /tmp/swhks.pid no directorio escribible /tmp. O problema é semellante ao da primeira vulnerabilidade, pero non é tan perigoso porque swhks está a executarse baixo un usuario sen privilexios.
Fonte: opennet.ru