Nel componente Polkit, utilizzato nelle distribuzioni per consentire agli utenti non privilegiati di eseguire azioni che richiedono diritti di accesso elevati (ad esempio, il montaggio di dispositivi USB), è stata identificata una vulnerabilità (CVE-2021-3560) che consente a un utente locale di ottenere i diritti di root nel sistema. La vulnerabilità è stata risolta nella versione Polkit 0.119.
Il problema si manifesta a partire dalla versione 0.113, ma molte distribuzioni, tra cui RHEL, Ubuntu, Debian e SUSE, hanno retroportato la funzionalità vulnerabile in pacchetti basati su versioni precedenti di Polkit (le correzioni dei pacchetti sono già disponibili nelle distribuzioni).
Il problema si manifesta nella funzione polkit_system_bus_name_get_creds_sync(), che ottiene gli identificativi (uid e pid) del processo che richiede l'elevazione dei privilegi. Il processo è identificato da Polkit attraverso l'assegnazione di un nome unico in DBus, che viene poi utilizzato per la verifica dei privilegi. Se il processo si disconnette da dbus-daemon prima dell'esecuzione del gestore polkit_system_bus_name_get_creds_sync, il gestore riceve un codice di errore anziché il nome unico.
La vulnerabilità è causata dal fatto che il codice di errore restituito non viene gestito correttamente e la funzione polkit_system_bus_name_get_creds_sync() restituisce TRUE invece di FALSE, nonostante non sia riuscita a mappare il processo con uid/pid e a verificare i privilegi richiesti per il processo. Il codice da cui è stata chiamata la funzione polkit_system_bus_name_get_creds_sync() presume che la verifica sia andata a buon fine e che la richiesta di elevazione dei privilegi provenga da root, anziché da un utente non privilegiato, consentendo così di eseguire azioni privilegiate senza ulteriori autenticazioni e conferme di autorizzazione.
Fonte: opennet.ru
