Po zistení zraniteľnosti na konci januára, ktorá umožnila pripojenie pod používateľom root bez overovania hesla, bolo v serveri telnetd zo súboru GNU InetUtils objavených niekoľko spôsobov, ako zvýšiť svoje oprávnenia, čo bolo dôsledkom nedostatočného odstránenia zraniteľnosti z roku 1999 (CVE-1999-0073).
Zraniteľnosti sú spôsobené prítomnosťou v telnetd, ktorá umožňuje prenášanie premenných prostredia klientom na server pomocou možnosti ENVIRON. Tieto premenné prostredia sa nastavujú a spracovávajú v kontexte procesu telnetd a prenášajú sa do ním spustených podriadených procesov, vrátane procesu \/bin\login spusteného s právami root. Zraniteľnosť CVE-1999-0073 umožňovala telnet klientovi preniesť premennú prostredia LD_LIBRARY_PATH, ktorej nastavenie vedie k načítaniu špeciálne určenej zdieľanej knižnice pri spustení procesu login. Pri možnosti nahrávania súborov do systému, ktorý podporuje pripojenie protokolom telnet, môže útočník nahrať špeciálne upravenú knižnicu a zabezpečiť jej načítanie s právami root.
Vo telnetd zo súboru GNU InetUtils bola zraniteľnosť odstránená zakázaním nebezpečných premenných prostredia prostredníctvom filtrovania podľa masiek „LD_“, „LIBPATH“, „ENV“, „IFS“ a „_RLD_“. Pri tomto zakázaná nebola premenná prostredia „CREDENTIALS_DIRECTORY“, ktorá sa spracovávala pri spustení \/usr\/bin\/login. Pomocou tejto premennej prostredia mohol používateľ zmeniť adresár s nastaveniami poverení a umiestniť v novom adresári súbor login.noauth so hodnotou „yes“, čo aktivovalo prístup bez hesla (podobne ako prenesenie flagu „-f“ do procesu login). Nastavenie sa vzťahuje na všetkých používateľov, vrátane root.
Útok spočíva vo vytvorení nepovoleným používateľom podadresára vo svojom domácom adresári, nahraní súboru login.noauth doň a pokusu o prihlásenie s nastavením premennej prostredia „CREDENTIALS_DIRECTORY=vytvorený adresár“ a predaním premennej prostredia „USER=root“ (v telnet je režim automatického pripojenia, v ktorom sa meno používateľa nezískava z príkazového riadku, ale odovzdáva sa cez premennú prostredia USER). Príklad exploitu.
Následne bol odhalený ďalší spôsob, ako získať root prístup cez telnetd, ktorý súvisí s manipuláciou s premennými prostredia OUTPUT_CHARSET a LANGUAGE, spracovávanými knižnicou GNU gettext, ako aj s premennou prostredia GCONV_PATH používanou v glibc. Nastavením premenných prostredia OUTPUT_CHARSET a LANGUAGE môže útočník aktivovať v gettext funkcionalitu konvertovania kódovania znakov, ktorá volá funkciu iconv_open(). Pri vykonaní funkcie iconv_open() pri načítaní konfiguračného súboru gconv-modules sa cesta vypočítava na základe premennej prostredia GCONV_PATH. Pomocou subsitúcie súboru gconv-modules je možné zabezpečiť načítanie vlastnej zdieľanej knižnice počas výstupu lokalizovanej reťazca procesom login.
CVE identifikátory pre tieto zraniteľnosti zatiaľ neboli priradené. Ako metóda ochrany sa zvažuje zavedenie bieleho zoznamu povolených hodnôt („TERM“, „DISPLAY“, „USER“, „LOGNAME“ a „POSIXLY_CORRECT“) s blokovaním všetkých ostatných premenných prostredia, podobne ako je to vykonávané s premennými prostredia v OpenSSH. Zraniteľnosti potvrdzujú balíku GNU InetUtils, implementácia servera telnetd, ktorý sa dodáva v Debian, Ubuntu a odvozených distribúciách. Opravy pre GNU InetUtils zatiaľ nie sú k dispozícii. V Rocky Linux 9 sa dodáva modifikovaný telnetd, ktorý nie je zraniteľný a namiesto filtrovania nebezpečných premenných prostredia obsahuje kontrolu podľa bieleho zoznamu. Filtrovanie podľa bieleho zoznamu je tiež implementované v telnetd vo FreeBSD. V OpenBSD bol telnetd z systému vylúčený už v roku 2005.
Zdroj: opennet.ru
