Vulnerabilità in swhkd, gestore di scorciatoie per Wayland

In swhkd (Simple Wayland HotKey Daemon) è stata identificata una serie di vulnerabilità derivate da una gestione inadeguata dei file temporanei, dei parametri della riga di comando e dei socket unix. Il programma è scritto in Rust e gestisce l'elaborazione delle combinazioni di tasti in ambienti basati sul protocollo Wayland (simile per configurazione al processo sxhkd utilizzato negli ambienti basati su X11).

Il pacchetto comprende un processo swhks non privilegiato, che esegue azioni per le combinazioni di tasti, e un processo in background swhkd, eseguito con privilegi di root e che interagisce con i dispositivi di input a livello API uinput. Per facilitare l'interazione tra swhks e swhkd viene utilizzato un socket Unix. Attraverso le regole di Polkit, a qualsiasi utente locale è data la possibilità di avviare con privilegi di root il processo /usr/bin/swhkd e di passargli parametri arbitrari.

Vulnerabilità identificate:

  • CVE-2022-27815 — salvataggio del PID del processo in un file con nome prevedibile e in una directory scrivibile da altri utenti (/tmp/swhkd.pid). Qualsiasi utente può creare il file /tmp/swhkd.pid e inserire al suo interno il PID di un processo esistente, il che impedirà l'avvio di swhkd. In assenza di protezioni contro la creazione di link simbolici in /tmp, la vulnerabilità può essere sfruttata per creare o sovrascrivere file in qualsiasi directory di sistema (il PID viene scritto nel file) o per rivelare il contenuto di qualsiasi file nel sistema (swhkd stampa su stdout tutto il contenuto del file PID). È interessante notare che nella patch rilasciata il file PID è stato spostato non nella directory /run, ma nella directory /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), dove non dovrebbe trovarsi nemmeno.
  • CVE-2022-27814 — manipolando il parametro della riga di comando '-c', utilizzato per specificare il file di configurazione, è possibile determinare l'esistenza di qualsiasi file nel sistema. Ad esempio, per controllare /root/.somefile, è possibile eseguire 'pkexec /usr/bin/swhkd -d -c /root/.somefile' e se il file è assente verrà restituito l'errore '/root/.somefile doesn’t exist'. Come nel caso della prima vulnerabilità, la correzione del problema suscita perplessità: la soluzione consiste semplicemente nel far sì che per leggere il file di configurazione venga ora eseguita l'utilità esterna 'cat' (‘Command::new(‘/bin/cat’).arg(path).output()’).
  • CVE-2022-27819 — il problema è anche collegato all'uso dell'opzione «-c», tramite la quale il file di configurazione viene caricato e analizzato integralmente senza verificare la dimensione e il tipo di file. Ad esempio, per eseguire un attacco di denial of service attraverso l'esaurimento della memoria libera e la creazione di input/output parassitici, è possibile specificare durante l'avvio un dispositivo a blocchi («pkexec /usr/bin/swhkd -d -c /dev/sda») o un dispositivo a caratteri che emette un flusso infinito di dati. Il problema è stato risolto azzerando i privilegi prima dell'apertura del file, ma la correzione si è rivelata incompleta, poiché viene azzerato solo l'identificativo utente (UID), mentre l'identificativo gruppo (GID) rimane invariato.
  • CVE-2022-27818 — per la creazione di un socket Unix viene utilizzato il file /tmp/swhkd.sock, creato in una directory pubblica scrivibile, il che porta a problemi simili a quelli della prima vulnerabilità (chiunque può creare /tmp/swhkd.sock e generare o intercettare eventi di pressione dei tasti).
  • CVE-2022-27817 — gli eventi di input vengono accettati da tutti i dispositivi e in tutte le sessioni, cioè un utente di un'altra sessione Wayland o dalla console può intercettare eventi quando altri utenti premendo combinazioni di tasti.
  • CVE-2022-27816 — il processo swhks, come swhkd, utilizza un file PID /tmp/swhks.pid in una directory pubblica scrivibile /tmp. Il problema è simile alla prima vulnerabilità, ma meno grave, poiché swhks viene eseguito con un utente non privilegiato.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster