Segue la vulnerabilità identificata alla fine di gennaio, che consentiva di connettersi come utente root senza verifica della password; nel server telnetd della suite GNU InetUtils sono stati rilevati diversi modi per elevare i propri privilegi, derivanti da una corretta rimozione della vulnerabilità nel 1999 (CVE-1999-0073).
Le vulnerabilità sono causate dalla possibilità di telnetd di trasmettere variabili d'ambiente dal client al server tramite l'opzione ENVIRON. Tali variabili d'ambiente vengono impostate e trattate nel contesto del processo telnetd e trasmesse ai processi figli avviati, compreso il processo /bin/login che viene eseguito con privilegi di root. La vulnerabilità CVE-1999-0073 consentiva al client telnet di trasmettere la variabile d'ambiente LD_LIBRARY_PATH, il cui valore porta al caricamento della libreria condivisa specificata dall'utente durante l'avvio del processo di login. Se il caricamento di file nel sistema supportato dal protocollo telnet è possibile, l'attaccante può caricare una libreria appositamente costruita e organizzare il suo caricamento con privilegi di root.
In telnetd della suite GNU InetUtils, la vulnerabilità è stata corretta mediante il divieto di variabili d'ambiente pericolose attraverso il filtraggio delle maschere «LD_», «LIBPATH», «ENV», «IFS» e «_RLD_». Tuttavia, la variabile d'ambiente «CREDENTIALS_DIRECTORY», elaborata durante l'avvio di /usr/bin/login, è rimasta sbloccata. Utilizzando questa variabile d'ambiente, l'utente poteva cambiare la directory delle impostazioni delle credenziali e posizionare in essa un file login.noauth con il valore «yes», che attivava l'accesso senza password (analogamente al passaggio del flag «-f» al processo di login). Questa configurazione si applica a tutti gli utenti, compreso root.
L'attacco consiste nella creazione di una sotto-directory da parte di un utente non privilegiato nella propria home directory, nel caricamento di un file login.noauth e nel tentativo di accesso impostando la variabile d'ambiente «CREDENTIALS_DIRECTORY=directory_creata» e trasmettendo la variabile d'ambiente «USER=root» (in telnet esiste una modalità di accesso automatico, in cui il nome utente non viene prelevato dalla riga di comando, ma viene trasmesso tramite la variabile d'ambiente USER). Esempio di exploit.
È stato identificato un ulteriore metodo per ottenere accesso root tramite telnetd, che riguarda la manipolazione delle variabili d'ambiente OUTPUT_CHARSET e LANGUAGE, gestite dalla libreria GNU gettext, e della variabile d'ambiente GCONV_PATH, utilizzata in glibc. Attraverso l'impostazione delle variabili d'ambiente OUTPUT_CHARSET e LANGUAGE, l'attaccante può attivare in gettext la funzionalità di conversione della codifica dei caratteri, che richiama la funzione iconv_open(). A sua volta, quando viene eseguita la funzione iconv_open() durante il caricamento del file di configurazione gconv-modules, il percorso viene calcolato tenendo conto della variabile d'ambiente GCONV_PATH. Attraverso la sostituzione del file gconv-modules è possibile organizzare il caricamento di una propria libreria condivisa durante l'output di una stringa localizzata dal processo di login.
Non sono stati ancora assegnati identificatori CVE alle vulnerabilità segnalate. Come metodo di protezione, si sta considerando l'implementazione di un elenco bianco di valori accettabili («TERM», «DISPLAY», «USER», «LOGNAME» e «POSIXLY_CORRECT») bloccando tutte le altre variabili d'ambiente, analogamente a come avviene con le variabili d'ambiente in OpenSSH. Le vulnerabilità sono state confermate nel pacchetto GNU InetUtils, la cui implementazione server telnetd è fornita in Debian, Ubuntu e distribuzioni derivate. Le correzioni per GNU InetUtils non sono ancora disponibili. In Rocky Linux 9 è fornito un telnetd modificato non vulnerabile, nel quale è stata implementata un controllo basato su un elenco bianco invece della filtrazione delle variabili d'ambiente pericolose. Anche la filtrazione tramite elenco bianco è implementata nel telnetd di FreeBSD. In OpenBSD, telnetd è stato rimosso dal sistema nel 2005.
Fonte: opennet.ru
