Vulnerabilità in swkd, un gestore di scorciatoie per Wayland

Sono state identificate una serie di vulnerabilità in swhkd (Simple Wayland HotKey Daemon) causate da un lavoro errato con file temporanei, parametri della riga di comando e socket Unix. Il programma è scritto in Rust e gestisce la pressione dei tasti di scelta rapida in ambienti basati sul protocollo Wayland (un analogo compatibile con i file di configurazione del processo sxhkd utilizzato negli ambienti basati su X11).

Il pacchetto include un processo swhks non privilegiato che esegue azioni di tasti di scelta rapida e un processo swhkd in background che viene eseguito come root e interagisce con i dispositivi di input a livello API uinput. Un socket Unix viene utilizzato per organizzare l'interazione tra swhks e swhkd. Usando le regole Polkit, qualsiasi utente locale può eseguire il processo /usr/bin/swhkd come root e passargli parametri arbitrari.

Vulnerabilità identificate:

  • CVE-2022-27815 – Salvataggio di un PID di processo in un file con un nome prevedibile e in una directory scrivibile da altri utenti (/tmp/swhkd.pid). Qualsiasi utente può creare un file /tmp/swhkd.pid e inserirvi il pid di un processo esistente, il che impedirà l'avvio di swhkd. Se non esiste protezione contro la creazione di collegamenti simbolici in /tmp, la vulnerabilità può essere utilizzata per creare o sovrascrivere file in qualsiasi directory di sistema (il PID viene scritto nel file) o determinare il contenuto di qualsiasi file sul sistema (swhkd stampa il file l'intero contenuto del file PID su stdout). È interessante notare che nella correzione rilasciata il file PID è stato spostato non nella directory /run, ma nella directory /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), a cui non appartiene.
  • CVE-2022-27814 – Manipolando l'opzione della riga di comando “-c” utilizzata per specificare un file di configurazione, è possibile determinare l'esistenza di qualsiasi file nel sistema. Ad esempio, per controllare /root/.somefile puoi eseguire “pkexec /usr/bin/swhkd -d -c /root/.somefile” e se il file manca, l'errore “/root/.somefile non esiste " sarà mostrato. Come nel caso della prima vulnerabilità, risolvere il problema è sconcertante: risolvere il problema si riduce al fatto che l'utilità esterna “cat” ('Command::new(“/bin/cat”)).arg(path) viene ora avviato per leggere il file di configurazione.output()').
  • CVE-2022-27819 – Il problema è legato anche all'uso dell'opzione "-c", che fa sì che l'intero file di configurazione venga caricato e analizzato senza controllare la dimensione e il tipo del file. Ad esempio, per causare un rifiuto del servizio esaurendo la memoria libera e creando I/O spuri, è possibile specificare un dispositivo a blocchi all'avvio ("pkexec /usr/bin/swhkd -d -c /dev/sda") o un dispositivo a caratteri che produce un flusso infinito di dati. Il problema è stato risolto reimpostando i privilegi prima di aprire il file, ma la correzione non è stata completa, poiché viene reimpostato solo l'ID utente (UID), ma l'ID gruppo (GID) rimane lo stesso.
  • CVE-2022-27818 – Viene creato un socket Unix utilizzando il file /tmp/swhkd.sock creato in una directory scrivibile, il che porta a problemi simili a quelli della prima vulnerabilità (qualsiasi utente può creare /tmp/swhkd.sock e generare o intercettare eventi di pressione dei tasti).
  • CVE-2022-27817 - Gli eventi di input sono accettati da tutti i dispositivi e in tutte le sessioni, ad es. un utente da un'altra sessione Wayland o dalla console può intercettare eventi quando i tasti di scelta rapida vengono premuti da altri utenti.
  • CVE-2022-27816 Il processo swhks, come swhkd, utilizza il file PID /tmp/swhks.pid nella directory scrivibile /tmp. Il problema è simile alla prima vulnerabilità, ma non è così pericoloso perché swhks viene eseguito da un utente non privilegiato.

Fonte: opennet.ru

Aggiungi un commento