← back
CVE-2026-24061criticalunder attackCWE-88

CVE-2026-24061

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 9.8epss 98%
from disclosure to weapon0 days
Published on NVDJan 21
1st PoCJul 3
metasploit+5d
CISA KEV+5d
exploitation probability
98%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
67 public exploit(s)
Action required by CISAfederal deadline: 2026-02-16

Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.

Summary

O telnetd do GNU Inetutils (versões 1.9.3 até 2.7 inclusive) permite bypass completo de autenticação: um cliente telnet que envie a variável de ambiente USER com o valor "-f root" faz o servidor repassar esse valor para /usr/bin/login como argumento, e login(1) interpreta "-f" como login automático sem senha. O impacto é root remoto sem credenciais, mas a falha só existe onde telnetd está instalado, habilitado e acessível na rede — algo cada vez mais raro, exceto em appliances legados, dispositivos embarcados e infraestrutura industrial/educacional que ainda expõe telnet.

Technical detail

A causa é injeção de argumento (CWE-88) somada a bypass de autenticação (CWE-287). Em telnetd/telnetd.c, o daemon monta a linha de comando de login(1) a partir de um template com placeholders: em sistemas GNU/Linux o template é `PATH_LOGIN " -p -h %h %?u{-f %u}{%U}"`. O placeholder %u/%U é expandido em telnetd/utility.c pela função _var_short_name, que simplesmente lê a variável de ambiente USER recebida do cliente via a opção NEW-ENVIRON do protocolo telnet (RFC 1572) e a devolve sem nenhuma sanitização.

Se o cliente define USER='-f root', a expansão gera a linha de comando `login -p -h -f root`, e login(1) do shadow-utils trata "-f" como flag legítima para pular a autenticação e autenticar diretamente o usuário indicado — nesse caso root. O bug foi introduzido em 19/03/2015 (commit fa3245ac8c288b87139a0da8249d0a408c4dfb87) e entrou na release 1.9.3 (12/05/2015); esteve presente em todas as versões subsequentes até 2.7.

O próprio advisory do mantenedor (Simon Josefsson) nota que o problema é estrutural: qualquer campo expandido por _var_short_name que aceite dados não confiáveis é candidato a variante do mesmo bug — inclusive %h (remote_hostname), preenchido por getnameinfo()/gethostbyaddr(), cuja resposta também não é dado confiável em muitos ambientes.

How it’s exploited

O vetor é a negociação da opção NEW-ENVIRON do protocolo telnet: o cliente `telnet` com a flag `-a` (ou `--login`) envia automaticamente o valor da variável de ambiente USER local para o servidor. Um atacante só precisa definir USER="-f root" no shell antes de conectar e usar essa flag ao chamar o cliente telnet contra o host-alvo — sem usuário, senha ou qualquer interação adicional. Isso casa com o vetor CVSS (AV:N/AC:L/PR:N/UI:N): nenhuma autenticação, nenhuma condição de rede além de alcançar a porta do telnetd (normalmente 23/tcp).

A única pré-condição relevante que a nota do CVSS não deixa óbvia é que o telnetd precisa estar instalado, habilitado (via inetd/xinetd ou standalone) e alcançável pela rede — coisa que não é padrão na maioria dos sistemas modernos, mas é comum em firmware de dispositivos, appliances de rede antigos, sistemas OT/ICS e distribuições que mantêm compatibilidade legada. login(1) também precisa suportar a flag -f com esse comportamento (típico do shadow-utils em GNU/Linux); a expansão do template varia em Solaris, onde o parâmetro -f não é usado da mesma forma.

A falha está no catálogo KEV da CISA, o que indica exploração confirmada em produção, e há módulo Metasploit e PoC pública — ou seja, a barreira técnica para exploração é mínima. O post do GreyNoise ("18 Hours of Unsolicited Houseguests") descreve varredura em massa na internet buscando telnetd exposto pouco depois da divulgação, sugerindo campanha oportunista de scanning e exploração automatizada, não ataque direcionado.

Versions

Affected
GNU Inetutils desde a versão 1.9.3 até a versão 2.7 (inclusive), no componente telnetd.
Fixed in
Nenhuma release numerada oficial do GNU Inetutils incorporando a correção era conhecida no momento das fontes consultadas; a correção existe como dois commits no repositório (fd702c02497b2f398e739e3119bed0b23dd7aa7b e ccba9f748aa8d50a38d7748e2e60362edd6a32cc). Distribuições como Debian publicaram avisos e pacotes corrigidos por ramo via debian-lts-announce — verifique a versão específica do pacote da sua distro, já que o histórico do Debian mostra que uma correção de 2019 foi reintroduzida por outro patch em 2020.

How to protect

A correção do mantenedor consiste em dois patches que sanitizam todas as variáveis expandidas no template de invocação de login(1), não só USER: https://codeberg.org/inetutils/inetutils/commit/fd702c02497b2f398e739e3119bed0b23dd7aa7b e https://codeberg.org/inetutils/inetutils/commit/ccba9f748aa8d50a38d7748e2e60362edd6a32cc. Até a publicação do advisory, o projeto não havia cortado uma release numerada que já incorporasse esses patches — o que existe são os commits e correções aplicadas por distribuições em seus próprios pacotes (ver o anúncio da Debian LTS). Aplique esses patches ou acompanhe o pacote da sua distribuição para confirmar que a versão instalada os incorpora.

Histórico importante para quem confia em "já corrigi isso há anos": a Debian aplicou um patch equivalente (0028-telnetd-Scrub-USER-from-environment.patch) em inetutils 1.9.4-7 (fevereiro de 2019), mas a correção subsequente para CVE-2020-10188 (RCE em telnetd), lançada em 1.9.4-7+deb10u1 (setembro de 2020, Debian 10), reintroduziu o bug do USER/-f — e isso se propagou para Debian e Ubuntu posteriores. Ou seja, a mitigação aplicada em 2019 não protege builds baseadas nos pacotes derivados dessa correção de 2020 sem reverificação.

O paliativo mais eficaz e de menor custo é simplesmente não expor telnetd: desabilitar o serviço (remover a linha telnet do inetd.conf/xinetd.d ou desinstalar o pacote inetutils-telnetd) e restringir a porta 23/tcp a redes de gerência confiáveis via firewall. Como workaround alternativo quando telnetd precisa continuar rodando, o próprio advisory sugere substituir o login(1) usado pelo telnetd por uma variante que não aceite a flag -f — mas isso é um controle compensatório frágil, não uma correção. Trocar apenas a senha de root ou desabilitar login root via SSH não mitiga nada: o bug ocorre inteiramente dentro do fluxo de autenticação do telnetd/login, sem depender de credenciais.

How to detect

Telnet é protocolo em texto claro, então a exploração é visível em captura de tráfego: procure na negociação NEW-ENVIRON (opção telnet) o envio da variável USER contendo a string "-f" seguida de um nome de usuário, tipicamente "-f root", logo após o handshake inicial na porta 23/tcp. No host, logs de login(1)/PAM podem registrar uma sessão autenticada via flag -f sem prompt de senha correspondente, e logs do inetd/xinetd mostrarão a invocação do processo login com argumentos anômalos.

Não há assinatura única confiável além dessa string, porque "-f " é também uso legítimo de login(1) em alguns fluxos administrativos locais — o sinal forte é a origem remota (conexão telnet externa) combinada com o valor da variável USER controlado pelo cliente. Dado o histórico de scanning em massa reportado, presença de qualquer telnetd exposto à internet já deve ser tratada como indicador de risco, independente de log de tentativa específica.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
telnetd in GNU Inetutils through 2.7 allows remote authentication bypass via a "-f root" value for the USER environment variable.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Affected products
GNU · Inetutils
public PoCs found67
exploitdbwww.exploit-db.com/exploits/52524unverifiedgithubgithub.com/jacubes/CVE-2026-24061723githubgithub.com/ekomsSavior/telnet_scan10githubgithub.com/sh4den/CVE-2026-240616githubgithub.com/tc4dy/CVE-2026-24061-PoC-Exploit6githubgithub.com/K3ysTr0K3R/CVE-2026-240611githubgithub.com/0xBlackash/CVE-2026-240611githubgithub.com/ahmadsadeeq/TelnetdBypass-0githubgithub.com/anxs3c/CVE-2026-24061-GNU-InetUtils-telnetd0githubgithub.com/akpmarcelin/CVE-2026-24061-lab0githubgithub.com/stoerti2/Abyssal0githubgithub.com/obrunolima1910/CVE-2026-240610githubgithub.com/athack-ctf/chall2026-telneted0githubgithub.com/Cosm3No1de/htb-orion-writeup0githubgithub.com/kyukazamiqq/CVE-2026-240610githubgithub.com/harygovind/CVE-2026-240610githubgithub.com/s-vx/CVE-2026-240610vulncheckvulncheck.com/xdb/05724362c1bdunverifiedvulncheckvulncheck.com/xdb/07cf2b439a9dunverifiedvulncheckvulncheck.com/xdb/a4bd074b1edcunverifiedvulncheckvulncheck.com/xdb/df7878b9e432unverifiedvulncheckvulncheck.com/xdb/cbd3b8d0a002unverifiedvulncheckvulncheck.com/xdb/8036e0e4aba4unverifiedvulncheckvulncheck.com/xdb/e8d1ce668bd6unverifiedvulncheckvulncheck.com/xdb/36c2b1e5c7dcunverifiedvulncheckvulncheck.com/xdb/107b81fce065unverifiedvulncheckvulncheck.com/xdb/e03fbca3008cunverifiedvulncheckvulncheck.com/xdb/fe99751b4742unverifiedvulncheckvulncheck.com/xdb/4fa764154266unverifiedvulncheckvulncheck.com/xdb/960fcc9bd89cunverifiedvulncheckvulncheck.com/xdb/e97f97610013unverifiedvulncheckvulncheck.com/xdb/febad18902a8unverifiedvulncheckvulncheck.com/xdb/5026f54ecaaeunverifiedvulncheckvulncheck.com/xdb/f1b5a45051d3unverifiedvulncheckvulncheck.com/xdb/a4152661a60cunverifiedvulncheckvulncheck.com/xdb/156d503457bcunverifiedvulncheckvulncheck.com/xdb/9f3ce3e6ca21unverifiedvulncheckvulncheck.com/xdb/0736e00f5aceunverifiedvulncheckvulncheck.com/xdb/f05b1fb3f5a1unverifiedvulncheckvulncheck.com/xdb/0bab298804b5unverifiedvulncheckvulncheck.com/xdb/e90c23bb7208unverifiedvulncheckvulncheck.com/xdb/a7890dd1271eunverifiedvulncheckvulncheck.com/xdb/193b14870c6cunverifiedvulncheckvulncheck.com/xdb/4a52280d4be4unverifiedvulncheckvulncheck.com/xdb/eb6ce1666294unverifiedvulncheckvulncheck.com/xdb/0ecc49d5a1f0unverifiedvulncheckvulncheck.com/xdb/57ee6813a50eunverifiedvulncheckvulncheck.com/xdb/bd5639365990unverifiedvulncheckvulncheck.com/xdb/53db998fa024unverifiedvulncheckvulncheck.com/xdb/ec801fb614c1unverifiedcve_referencewww.openwall.com/lists/oss-security/2026/01/20/2#:~:text=root@...a%3A~%20USER='unverifiedvulncheckvulncheck.com/xdb/01bf6bfce293unverifiedvulncheckvulncheck.com/xdb/e14b60108668unverifiedvulncheckvulncheck.com/xdb/037f09ac8bd2unverifiedvulncheckvulncheck.com/xdb/281c93516f03unverifiedvulncheckvulncheck.com/xdb/4fe4957aaafeunverifiedvulncheckvulncheck.com/xdb/e8b0b325123funverifiedvulncheckvulncheck.com/xdb/cdc425361e5aunverifiedvulncheckvulncheck.com/xdb/ce38d836a6d4unverifiedvulncheckvulncheck.com/xdb/6c64eec2246funverifiedvulncheckvulncheck.com/xdb/2095407cd24eunverifiedvulncheckvulncheck.com/xdb/1965f3150b25unverifiedvulncheckvulncheck.com/xdb/9d90ab411f9cunverifiedvulncheckvulncheck.com/xdb/089b79c9b65cunverifiedvulncheckvulncheck.com/xdb/14ec796d456eunverifiedvulncheckvulncheck.com/xdb/45d6d2515c7eunverifiedvulncheckvulncheck.com/xdb/ac3246834fa8unverified
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.