Nach der Ende Januar entdeckten Schwachstelle, die es ermöglichte, sich als Benutzer root ohne PasswortĂŒberprĂŒfung anzumelden, wurden im Telnet-Server telnetd aus dem GNU InetUtils-Paket mehrere Möglichkeiten zur Erhöhung der Privilegien festgestellt, die sich aus der unvollstĂ€ndigen Behebung der Schwachstelle im Jahr 1999 (CVE-1999-0073) ergeben haben.
Die Schwachstellen entstehen durch die Möglichkeit, dass telnetd Umgebungsvariablen durch den Client mithilfe der Option ENVIRON an den Server ĂŒbertrĂ€gt. Solche Umgebungsvariablen werden im Kontext des telnetd-Prozesses gesetzt und bearbeitet und an die von ihm gestarteten Kindprozesse, einschlieĂlich des mit root-Rechten gestarteten Prozesses /bin/login, weitergeleitet. Die Schwachstelle CVE-1999-0073 ermöglichte es dem Telnet-Client, die Umgebungsvariable LD_LIBRARY_PATH zu ĂŒbergeben, deren Festlegung dazu fĂŒhrt, dass die vom Benutzer angegebene Shared Library beim Start des login-Prozesses geladen wird. Bei der Möglichkeit, Dateien in ein System, das die Telnet-Protokollverbindung unterstĂŒtzt, hochzuladen, kann der Angreifer eine speziell gestaltete Bibliothek hochladen und deren Laden mit root-Rechten organisieren.
Im telnetd des GNU InetUtils-Pakets wurde die Schwachstelle durch das Verbot gefĂ€hrlicher Umgebungsvariablen durch Filterung nach den Masken âLD_â, âLIBPATHâ, âENVâ, âIFSâ und â_RLD_â behoben. Dabei blieb die Umgebungsvariable âCREDENTIALS_DIRECTORYâ, die beim Start von /usr/bin/login verarbeitet wird, jedoch unblockiert. Mit dieser Umgebungsvariable konnte der Benutzer das Verzeichnis fĂŒr die Anmeldeinformationen Ă€ndern und eine Datei login.noauth mit dem Wert âyesâ im neuen Verzeichnis ablegen, die eine Anmeldung ohne Passwort aktiviert (Ă€hnlich wie das Ăbergeben des Flags â-fâ an den login-Prozess). Diese Einstellung gilt fĂŒr alle Benutzer, einschlieĂlich root.
Der Angriff besteht darin, dass ein unprivilegierter Benutzer ein Unterverzeichnis in seinem Home-Verzeichnis erstellt, eine Datei login.noauth in dieses hochlĂ€dt und versucht, sich mit der festgelegten Umgebungsvariable âCREDENTIALS_DIRECTORY=erstellt Verzeichnisâ und der Ăbermittlung der Umgebungsvariable âUSER=rootâ anzumelden (in Telnet gibt es einen automatischen Verbindungsmodus, in dem der Benutzername nicht aus der Befehlszeile, sondern ĂŒber die Umgebungsvariable USER ĂŒbergeben wird). Beispiel fĂŒr einen Exploit.
Im Folgenden wurde eine weitere Methode entdeckt, um root-Zugriff ĂŒber telnetd zu erhalten, die mit der Manipulation der Umgebungsvariablen OUTPUT_CHARSET und LANGUAGE zusammenhĂ€ngt, die von der GNU gettext-Bibliothek verarbeitet werden, sowie der Umgebungsvariablen GCONV_PATH, die in glibc verwendet wird. Durch das Setzen der Umgebungsvariablen OUTPUT_CHARSET und LANGUAGE kann der Angreifer die FunktionalitĂ€t zur Konvertierung von Zeichencodierungen in gettext aktivieren, die die Funktion iconv_open() aufruft. Bei der AusfĂŒhrung der Funktion iconv_open() wĂ€hrend des Ladens der Konfigurationsdatei gconv-modules wird der Pfad unter BerĂŒcksichtigung der Umgebungsvariable GCONV_PATH berechnet. Durch das EinfĂŒgen der gconv-modules-Datei kann das Laden einer eigenen gemeinsam genutzten Bibliothek wĂ€hrend der Ausgabe einer lokalisierten Zeichenfolge durch den Prozess login organisiert werden.
CVE-Identifikatoren fĂŒr die identifizierten Schwachstellen wurden bisher nicht zugewiesen. Als SchutzmaĂnahme wird die Implementierung einer Whitelist von erlaubten Werten (âTERMâ, âDISPLAYâ, âUSERâ, âLOGNAMEâ und âPOSIXLY_CORRECTâ) in Betracht gezogen, wobei alle anderen Umgebungsvariablen blockiert werden, Ă€hnlich wie es mit Umgebungsvariablen in OpenSSH gehandhabt wird. Die Schwachstellen wurden im GNU InetUtils-Paket bestĂ€tigt, das die Server telnetd-Implementierung enthĂ€lt, die in Debian, Ubuntu und verwandten Distributionen geliefert wird. Korrekturen fĂŒr GNU InetUtils stehen derzeit nicht zur VerfĂŒgung. In Rocky Linux 9 wird eine modifizierte telnetd-Version geliefert, die nicht anfĂ€llig fĂŒr diese Schwachstellen ist und anstelle der Filterung gefĂ€hrlicher Umgebungsvariablen eine Whitelist-PrĂŒfung implementiert. Eine Whitelist-Filterung wurde auch in der telnetd-Version von FreeBSD implementiert. In OpenBSD wurde telnetd im Jahr 2005 aus dem System entfernt.
Quelle: opennet.ru
