Caricatore dinamico , incluso in OpenBSD, può in determinate condizioni consentire a -applicazioni di lasciare la variabile d'ambiente LD_LIBRARY_PATH e pertanto consentire di caricare codice di terze parti nel contesto di un processo eseguito con privilegi elevati. Le patch per correggere la vulnerabilità sono disponibili per le versioni e . Le patch binarie () per le piattaforme amd64, i386 e arm64 sono già state avviate in produzione e dovrebbero essere disponibili per il download al momento della pubblicazione di questa notizia.
Il problema risiede nel fatto che, durante il funzionamento, ld.so estrae inizialmente dal contesto il valore della variabile LD_LIBRARY_PATH, utilizzando la funzione _dl_split_path() per trasformarlo in un array di stringhe—percorsi delle directory. Se successivamente si scopre che il processo corrente è eseguito da un'applicazione SUID/SGID, l'array creato e, di fatto, la variabile LD_LIBRARY_PATH vengono ripuliti. Tuttavia, se durante l'esecuzione di _dl_split_path() ci si imbatte in una mancanza di memoria (cosa difficile a causa di un limite esplicito sulla dimensione delle variabili d'ambiente di 256 kilobyte, ma teoricamente possibile), la variabile _dl_libpath assumerà il valore NULL, e il successivo controllo di questo valore farà saltare la chiamata a _dl_unsetenv(«LD_LIBRARY_PATH»).
La vulnerabilità è stata trovata dagli specialisti , così come I ricercatori di sicurezza che hanno scoperto la vulnerabilità hanno notato l'immediatezza con cui è stata risolta: la patch è stata preparata e gli aggiornamenti rilasciati entro tre ore dalla notifica ricevuta dal progetto OpenBSD.
Nota: La vulnerabilità è stata assegnata il numero . È stato fatto , che include un prototipo di exploit funzionante 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 in una installazione predefinita e consente a un utente locale non privilegiato di eseguire codice con i diritti di root mediante la sostituzione della libreria durante l'esecuzione delle utility suid chpass o passwd. Per creare le condizioni necessarie all'esploit, viene utilizzato un vincolo di memoria impostando RLIMIT_DATA tramite setrlimit.
Fonte: opennet.ru
