Azienda Qualys quattro in OpenBSD, una delle quali consente di collegarsi da remoto senza autenticazione ad alcuni servizi di rete, mentre le altre tre aumentano i propri privilegi nel sistema. Nella relazione di Qualys è stata evidenziata la rapida reazione degli sviluppatori di OpenBSD: tutti i problemi sono stati in e risolti entro 40 ore dalla notifica privata.
La vulnerabilità sfruttabile da remoto è causata da un errore nell'organizzazione della chiamata del gestore di autenticazione nella libreria libc, che chiama
il programma /usr/libexec/auth/login_style passando argomenti nella riga di comando. In particolare, nella chiamata a login_style utilizzando il parametro opzionale «-s service», è consentito passare il nome del protocollo. Se all'inizio del nome utente viene utilizzato il carattere «-«, questo nome verrà interpretato come un'opzione durante l'esecuzione di login_style. Pertanto, se si specifica come nome utente «-schallenge» o «-schallenge:passwd» durante l'autenticazione, login_style interpreterà la richiesta come una richiesta di utilizzo del gestore .
Il problema è che il protocollo S/Key in login_style è supportato solo formalmente, mentre di fatto viene ignorato con l'emissione del segnale di autenticazione riuscita. Di conseguenza, un attaccante può, spacciandosi per l'utente «-schallenge», bypassare l'autenticazione e ottenere accesso senza fornire una password o chiavi. Potenzialmente, tutti i servizi di rete che utilizzano le chiamate standard di libc per l'autenticazione sono vulnerabili. Ad esempio, è stata confermata la possibilità di accesso bypassando l'autenticazione in smtpd (AUTH PLAIN), ldapd e radiusd.
In sshd la vulnerabilità non si manifesta, poiché è presente una protezione aggiuntiva con verifica della presenza dell'utente nel sistema. Tuttavia, sshd può essere utilizzato per verificare la vulnerabilità del sistema: quando si accede con il nome utente «-sresponse:passwd» la connessione si blocca, poiché sshd attende il ritorno dei parametri di chiamata (challenge) da login_passwd, e login_passwd attende la trasmissione dei parametri mancanti (il nome «-sresponse» viene interpretato come un'opzione). Potenzialmente, un attaccante locale potrebbe tentare di bypassare l'autenticazione nell'utilità su, ma la trasmissione del nome «-sresponse» provoca il crash del processo a causa del ritorno di un puntatore nullo durante l'esecuzione della funzione getpwnam_r(«-schallenge», …).
Altre vulnerabilità:
- CVE-2019-19520 — elevazione locale dei privilegi tramite manipolazioni dello strumento xlock, fornito con il flag sgid, che cambia il gruppo in «auth». Nel codice di xlock, la ridefinizione dei percorsi delle librerie è vietata solo quando si cambia l'identificativo utente (setuid), il che consente all'attaccante di modificare la variabile d'ambiente «LIBGL_DRIVERS_PATH» e caricare la propria libreria condivisa, il cui codice verrà eseguito dopo l'elevazione dei privilegi al gruppo «auth».
- CVE-2019-19522 — consente a un utente locale appartenente al gruppo «auth» di eseguire codice con i diritti di root quando si attiva l'autenticazione nel sistema tramite S/Key o YubiKey (disattivata di default). L'appartenenza al gruppo «auth», accessibile tramite l'exploitation della vulnerabilità sopra menzionata in xlock, consente di scrivere file nelle directory /etc/skey e /var/db/yubikey. Ad esempio, l'attaccante può aggiungere un nuovo file /etc/skey/root per generare chiavi monouso per l'autenticazione come utente root tramite S/Key.
- CVE-2019-19519 — possibilità di elevare i limiti delle risorse tramite manipolazioni dello strumento su. Specificando l'opzione «-L», che implica un tentativo ciclico di autenticazione in caso di fallimento, la classe utente viene impostata solo una volta e non viene ripristinata nei tentativi successivi. L'attaccante può eseguire «su -l -L» e al primo tentativo inserire il login di un altro utente con un'altra classe di account, ma al secondo tentativo autenticarsi con successo come se stesso. In questa situazione, all'utente verranno impostati limiti corrispondenti alla classe utente specificata al primo tentativo (ad esempio, il numero massimo di processi o la dimensione della memoria per processo). Questo metodo funziona solo per l'assunzione dei limiti da parte di utenti non privilegiati, poiché per l'utente root è necessaria la presenza nel gruppo wheel.
In aggiunta, si può notare in OpenBSD è stato introdotto un nuovo metodo di controllo dell'accesso ai sistemi di chiamata di sistema, che rende ulteriormente complessa l'exploitation delle vulnerabilità. Il metodo consente l'esecuzione delle chiamate di sistema solo se effettuate da aree di memoria precedentemente registrate. Per contrassegnare le aree di memoria nuova chiamata di sistema .
Fonte: opennet.ru
