Loader dinamico , che fa parte di OpenBSD, in determinate condizioni può per -applicazioni lasciare la variabile d'ambiente LD_LIBRARY_PATH e in questo modo consentire il caricamento di codice di terze parti nel contesto di un processo eseguito con privilegi elevati. Le patch correttive per la vulnerabilità sono disponibili per le versioni e . Patch binarie () per le piattaforme amd64, i386 e arm64 sono già state messe in produzione e dovrebbero essere disponibili per il download al momento della pubblicazione di questa notizia.
Il problema: durante l'esecuzione, ld.so prima estrae dal ambiente il valore della variabile LD_LIBRARY_PATH, e tramite la funzione _dl_split_path() lo trasforma in un array di stringhe — percorsi a directory. Se in seguito si scopre che il processo corrente è eseguito da un'applicazione SUID/SGID, l'array creato e, di fatto, la variabile LD_LIBRARY_PATH vengono svuotati. Inoltre, se durante l'esecuzione di _dl_split_path() si verifica una carenza di memoria (cosa difficile a causa del limite esplicito sulla dimensione delle variabili d'ambiente di 256 kByte, ma teoricamente possibile), la variabile _dl_libpath riceverà il valore NULL, e il successivo controllo di questo valore farà saltare la chiamata a _dl_unsetenv(«LD_LIBRARY_PATH»).
La vulnerabilità è stata scoperta dagli esperti , così come I ricercatori di sicurezza che hanno identificato la vulnerabilità hanno notato la rapidità nella risoluzione del problema: la patch è stata preparata e gli aggiornamenti rilasciati entro tre ore dalla notifica ricevuta dal progetto OpenBSD.
Integrazione: il problema ha ricevuto il numero . È stato fatto un sulla mailing list oss-security, inclusivo di un prototipo di exploit che funziona su OpenBSD 6.6, 6.5, 6.2 e 6.1 su architetture
amd64 e i386 (l'exploit può essere adattato anche per altre architetture).
Il problema è sfruttabile nell'installazione predefinita e consente a un utente locale non privilegiato di eseguire codice con diritti di root mediante la sostituzione delle librerie durante l'esecuzione degli strumenti suid chpass o passwd. Per creare le condizioni necessarie allo sfruttamento della carenza di memoria, si utilizza l'impostazione del limite RLIMIT_DATA tramite setrlimit.
Fonte: opennet.ru
