L'escalation dei privilegi e l'autenticazione di OpenBSD aggirano le vulnerabilità in smtpd, ldapd e raggiod

Azienda Qualys rivelato четыре vulnerabilità in OpenBSD, uno dei quali ti consente di connetterti in remoto senza autenticazione ad alcuni servizi di rete, e gli altri tre aumentano i tuoi privilegi nel sistema. Il rapporto Qualys ha notato la rapida risposta degli sviluppatori di OpenBSD: tutti i problemi lo sono stati eliminato в OpenBSD6.5 и OpenBSD6.6 entro 40 ore dalla notifica privata.

La vulnerabilità sfruttabile da remoto è causata da un errore nel chiamare il gestore di autenticazione nella libreria libc, che chiama
programma /usr/libexec/auth/login_style che passa argomenti sulla riga di comando. Anche quando si chiama login_style utilizzando il parametro opzionale “-s service”, è possibile trasferire il nome del protocollo. Se usi un carattere "-" all'inizio di un nome utente, questo nome verrà trattato come un'opzione durante l'esecuzione di login_style. Di conseguenza, se specifichi "-schallenge" o "-schallenge:passwd" come nome utente durante l'autenticazione, login_style percepirà la richiesta come una richiesta di utilizzo del gestore S/Chiave.

Il problema è che il protocollo S/Key in login_style è supportato solo formalmente, ma in realtà viene ignorato con l'output di un segno di autenticazione riuscita. Pertanto, un utente malintenzionato può, fingendosi l'utente "-challenge", ignorare l'autenticazione e ottenere l'accesso senza fornire una password o chiavi. Tutti i servizi di rete che utilizzano chiamate libc standard per l'autenticazione sono potenzialmente interessati dal problema. Ad esempio, la possibilità di ignorare l'autenticazione è supportata in smtpd (AUTH PLAIN), ldapd e radiad.

La vulnerabilità non appare in sshd, poiché dispone di una protezione aggiuntiva che verifica la presenza dell'utente nel sistema. Tuttavia, sshd può essere utilizzato per testare la vulnerabilità di un sistema: quando si accede al nome utente "-sresponse:passwd", la connessione si blocca, poiché sshd attende che login_passwd restituisca i parametri di verifica e login_passwd attende che i parametri mancanti vengano restituiti. essere inviato (il nome "- sresponse" viene considerato un'opzione). Un utente malintenzionato locale potrebbe potenzialmente tentare di ignorare l'autenticazione nell'utilità su, ma il passaggio del nome "-sresponse" provoca l'arresto anomalo del processo restituendo un puntatore nullo durante l'esecuzione della funzione getpwnam_r("-schallenge", ...).

Altre vulnerabilità:

  • CVE-2019-19520 Escalation dei privilegi locali tramite manipolazione dell'utilità xlock fornita con il flag sgid modificando il gruppo in "auth". Nel codice xlock, la ridefinizione dei percorsi delle librerie è vietata solo quando viene modificato l'identificatore dell'utente (setuid), che consente all'aggressore di modificare la variabile d'ambiente “LIBGL_DRIVERS_PATH” e organizzare il caricamento della sua libreria condivisa, il cui codice verrà eseguito dopo aver aumentato i privilegi al gruppo "auth".
  • CVE-2019-19522 - Consente a un utente locale membro del gruppo "auth" di eseguire il codice come root quando l'autenticazione S/Key o YubiKey è abilitata sul sistema (non attiva per impostazione predefinita). L'adesione al gruppo “auth”, a cui è possibile accedere sfruttando la vulnerabilità di xlock sopra menzionata, consente di scrivere file nelle directory /etc/skey e /var/db/yubikey. Ad esempio, un utente malintenzionato potrebbe aggiungere un nuovo file /etc/skey/root per generare chiavi monouso per l'autenticazione come utente root tramite S/Key.
  • CVE-2019-19519 - la possibilità di aumentare i limiti delle risorse attraverso la manipolazione dell'utilità su. Quando viene specificata l'opzione "-L", che fa sì che i tentativi di autenticazione vengano ripetuti ciclicamente se falliti, la classe utente viene impostata una sola volta e non viene reimpostata nei tentativi successivi. Un utente malintenzionato può eseguire "su -l -L" al primo tentativo di accedere al login di qualcun altro con una classe di account diversa, ma al secondo tentativo può autenticarsi con successo come se stesso. In questa situazione, l'utente sarà soggetto a limiti basati sulla classe utente specificata al primo tentativo (ad esempio, il numero massimo di processi o la dimensione della memoria per un processo). Il metodo funziona solo per prendere in prestito limiti da utenti non privilegiati, poiché l'utente root deve trovarsi nel gruppo wheel).

Inoltre si può notare implementazione in OpenBSD, un nuovo metodo per verificare la validità delle chiamate di sistema, che complica ulteriormente lo sfruttamento delle vulnerabilità. Il metodo consente di eseguire chiamate di sistema solo se si accede ad esse da aree di memoria precedentemente registrate. Per contrassegnare le aree di memoria proposto nuova chiamata di sistema chiamata di sistema().

Fonte: opennet.ru