Vulnerabilità in ld.so OpenBSD

Caricatore dinamico ld.so, incluso in OpenBSD, può, in determinate condizioni, SUID/SGID- le applicazioni lasciano la variabile d'ambiente LD_LIBRARY_PATH e quindi consentono il caricamento di codice di terze parti nel contesto di un processo in esecuzione con privilegi elevati. Le patch che risolvono la vulnerabilità sono disponibili per i rilasci 6.5 и 6.6. Patch binarie (syspatch) per le piattaforme amd64, i386 e arm64 sono già in produzione e dovrebbero essere disponibili per il download nel momento in cui questa notizia verrà pubblicata.

L'essenza del problema: durante il funzionamento, ld.so estrae prima il valore della variabile LD_LIBRARY_PATH dall'ambiente e, utilizzando la funzione _dl_split_path(), lo trasforma in un array di stringhe - percorsi di directory. Se in seguito si scopre che il processo corrente è stato avviato da un'applicazione SUID/SGID, l'array creato e, di fatto, la variabile LD_LIBRARY_PATH vengono cancellati. Allo stesso tempo, se _dl_split_path() esaurisce la memoria (cosa difficile a causa del limite esplicito di 256 kB sulla dimensione delle variabili d'ambiente, ma teoricamente possibile), allora la variabile _dl_libpath riceverà il valore NULL, e i successivi controlli di il valore di questa variabile forzerà il salto della chiamata a _dl_unsetenv("LD_LIBRARY_PATH").

Vulnerabilità rilevata dagli esperti Qualys, così come diversi precedentemente rivelati i problemi. I ricercatori di sicurezza che hanno identificato la vulnerabilità hanno notato la rapidità con cui il problema è stato risolto: è stata preparata una patch e gli aggiornamenti sono stati rilasciati entro tre ore dalla notifica al progetto OpenBSD.

Aggiunta: al problema è stato assegnato un numero CVE-2019-19726. Realizzato sulla mailing list di oss-security annuncio ufficiale, incluso un prototipo di exploit in esecuzione sulle architetture OpenBSD 6.6, 6.5, 6.2 e 6.1
amd64 e i386 (l'exploit può essere adattato per altre architetture).
Il problema è sfruttabile nell'installazione predefinita e consente a un utente locale non privilegiato di eseguire codice come root tramite la sostituzione della libreria durante l'esecuzione delle utilità suid chpass o passwd. Per creare le condizioni di memoria insufficiente necessarie per il funzionamento, impostare il limite RLIMIT_DATA tramite setrlimit.

Fonte: opennet.ru

Aggiungi un commento