En serie nya sårbarheter i telnetd gör det möjligt att få root-behörigheter på systemet.

Efter upptäckten i slutet av januari av en sårbarhet som tillät root-anslutningar utan lösenordsverifiering, har flera tekniker för privilegieeskalering upptäckts i telnetd-servern från GNU InetUtils-sviten, vilket är ett resultat av en ofullständig patch av en sårbarhet från 1999 (CVE-1999-0073).

Sårbarheterna orsakas av telnetds förmåga att skicka miljövariabler till servern via ENVIRON-alternativet. Sådana miljövariabler ställs in och bearbetas inom ramen för telnetd-processen och skickas till underprocesser som startas av den, inklusive /bin/login-processen som startas med root-behörighet. Sårbarheten CVE-1999-0073 tillät telnet-klienten att skicka miljövariabeln LD_LIBRARY_PATH, vilket, när den ställs in, gör att ett användarspecificerat delat bibliotek laddas när inloggningsprocessen startar. Med tanke på möjligheten att ladda upp filer till ett system som stöder telnet-anslutningar kan en angripare ladda upp ett specialskrivet bibliotek och få det att laddas med root-behörighet.

I telnetd från GNU InetUtils-sviten åtgärdades en sårbarhet genom att inaktivera farliga miljövariabler genom filtrering med maskerna "LD_", "LIBPATH", "ENV", "IFS" och "_RLD_". Emellertid avblockerades miljövariabeln "CREDENTIALS_DIRECTORY", som bearbetades under /usr/bin/login-starten. Med hjälp av denna miljövariabel kunde en användare ändra katalogen som innehåller autentiseringsuppgifterna och placera en login.noauth-fil i den nya katalogen med värdet "yes", vilket aktiverade lösenordsfri inloggning (liknande att skicka flaggan "-f" till inloggningsprocessen). Denna inställning gäller alla användare, inklusive root.

Attacken består av en oprivilegierad användare som skapar en underkatalog i sin hemkatalog, laddar upp filen login.noauth till den och försöker logga in genom att ställa in miljövariabeln "CREDENTIALS_DIRECTORY=created directory" och skicka miljövariabeln "USER=root" (Telnet har ett automatiskt anslutningsläge där användarnamnet inte hämtas från kommandoraden, utan skickas via miljövariabeln "USER"). Exempel på ett exploit.

En annan metod för att få root-åtkomst via telnetd upptäcktes. Detta innebär att manipulera miljövariablerna OUTPUT_CHARSET och LANGUAGE som bearbetas av GNU gettext-biblioteket, och miljövariabeln GCONV_PATH som används i glibc. Genom att ställa in miljövariablerna OUTPUT_CHARSET och LANGUAGE kan en angripare aktivera funktionen för teckenkodningskonvertering i gettext, vilket anropar funktionen iconv_open(). När funktionen iconv_open() körs medan konfigurationsfilen gconv-modules laddas, beräknas sökvägen med hjälp av miljövariabeln GCONV_PATH. Genom att ersätta filen gconv-modules är det möjligt att ladda ett anpassat delat bibliotek medan inloggningsprocessen matar ut en lokaliserad sträng.

CVE-identifierare har ännu inte tilldelats de identifierade sårbarheterna. En föreslagen metod för att minska risken är att använda en vitlista med acceptabla värden ("TERM", "DISPLAY", "USER", "LOGNAME" och "POSIXLY_CORRECT") samtidigt som alla andra miljövariabler blockeras, liknande hur OpenSSH hanterar miljövariabler. Sårbarheterna har bekräftats i GNU InetUtils-paketet, implementerat server telnetd är den som tillhandahålls av Debian, Ubuntu och derivator. Rättelser för GNU InetUtils är ännu inte tillgängliga. Rocky Linux 9 levereras med en modifierad telnetd som inte är sårbar och använder vitlistkontroll istället för att filtrera farliga miljövariabler. Vitlistfiltrering är också implementerad i telnetd från FreeBSD. Telnetd togs bort från OpenBSD 2005.

Källa: opennet.ru

Lägg en kommentar