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