跳到主内容
返回博客漏洞分析

CVE-2026-24061:GNU Telnetd认证绕过漏洞深度分析与检测指南

2026/3/31·27 阅读·
CVE-2026-24061Telnet认证绕过GNU InetUtilsIoT安全漏洞复现

CVE-2026-24061是GNU InetUtils telnetd中的一个严重认证绕过漏洞,CVSS评分9.8,影响1.9.3至2.7版本。攻击者通过Telnet协议的NEW_ENVIRON选项注入恶意USER环境变量(-f root),可在无需任何认证的情况下直接获取Root Shell。该漏洞自2015年引入,潜伏超过11年,目前已被CISA列入已知被利用漏洞目录,存在活跃的在野利用。本文从漏洞原理、利用链、影响面及检测加固四个维度进行深入分析。

漏洞概况

属性 信息
CVE编号 CVE-2026-24061
CVSS 3.1评分 9.8(严重)
向量字符串 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
影响组件 GNU InetUtils telnetd
影响版本 1.9.3 ~ 2.7
修复版本 2.7-2
发现者 Kyu Neushwaistein(Carlos Cortes Alvarez)
披露时间 2026年1月20日
补丁发布 2026年1月20日
CISA KEV 已收录(存在活跃利用)

CVE-2026-24061是一个影响GNU InetUtils telnetd服务的认证绕过漏洞。该漏洞允许未经认证的远程攻击者,通过向Telnet服务发送特制的环境变量,完全绕过认证机制并直接获取Root Shell。漏洞利用无需任何认证凭据、无需用户交互,且攻击复杂度极低。

该漏洞的根本原因可以追溯到2015年的一次代码提交,意味着这个严重级别的认证绕过在GNU telnetd中潜伏了超过11年才被发现。

漏洞原理

根因分析

漏洞的根本原因在于GNU telnetd处理USER环境变量时缺少输入验证。Telnet协议支持通过NEW_ENVIRON选项在客户端和服务端之间传递环境变量,其中包括USER变量用于标识连接用户。

telnetd在接收到USER环境变量后,会将其直接拼接到调用/usr/bin/login的命令行参数中,而没有对变量内容做任何清洗或校验。

正常流程中,telnetd会执行类似如下的命令来启动认证:

/usr/bin/login username

其中username来自客户端通过NEW_ENVIRON选项传递的USER变量值。

利用方式

攻击者通过Telnet客户端在NEW_ENVIRON协商阶段,将USER变量的值设置为-f root。telnetd接收后会构造如下命令:

/usr/bin/login -f root

login命令的-f参数的含义是"免认证登录"(fast login),用于受信任的程序绕过密码验证直接登录指定用户。这是login的合法功能,但被telnetd的输入处理缺陷间接触发了。

最终效果:攻击者无需输入任何密码,即获得目标系统的Root Shell,拥有完整的系统控制权。

攻击过程

整个攻击链可以简化为三步:

  1. 攻击者向目标的Telnet端口(默认TCP 23)发起连接
  2. 在Telnet协议的NEW_ENVIRON选项协商阶段,将USER变量设置为-f root
  3. telnetd将该值直接传递给/usr/bin/login,触发免认证登录,攻击者获得Root Shell

从攻击者视角看,这是一个单步远程Root利用,不需要任何前置条件。

影响面评估

受影响系统

根据Shodan数据,全球约有21万台设备运行Telnet服务并暴露在互联网上。受影响的典型场景包括:

  • 运行GNU InetUtils的Linux服务器
  • 嵌入式系统和网络设备(路由器、交换机等)
  • 工业控制系统和OT环境中的设备
  • 老旧的开发、测试及备份服务器
  • 长期未维护的遗留系统

利用后果

成功利用CVE-2026-24061后,攻击者可以:

  • 以Root权限完全控制目标系统
  • 窃取系统上的敏感数据和凭据
  • 植入持久化后门
  • 以被控主机为跳板横向渗透内网
  • 造成服务中断或系统破坏

在野利用情况

CISA已将CVE-2026-24061列入其已知被利用漏洞目录(KEV)。GreyNoise监测到多个IP地址正在尝试利用该漏洞,攻击载荷中包含特征性的-f rootUSER环境变量注入。已知威胁组织"rwxrwx"被报告与该漏洞的活跃利用有关。

检测方法

版本确认

# 检查是否安装了 inetutils-telnetd
dpkg -l | grep inetutils-telnetd    # Debian/Ubuntu
rpm -qa | grep inetutils             # CentOS/RHEL

# 查看版本
telnetd --version 2>&1 | head -1

如果版本在1.9.3到2.7之间,且telnetd服务处于运行状态,则受此漏洞影响。

网络层检测

# 检查Telnet服务是否在运行
netstat -tlnp | grep :23
ss -tlnp | grep :23

# 使用Nmap扫描
nmap -sV -p 23 target_ip

日志分析

由于该漏洞绕过了正常认证流程,传统的认证失败日志可能不会产生告警。检查重点包括:

  • 出现Root Shell会话但没有对应认证事件的Telnet连接
  • 异常来源IP的Telnet会话记录
  • 系统中新增的可疑用户、crontab任务或SSH密钥

需要注意的是,该攻击利用的是正常的进程执行路径,如果没有专门的Telnet会话监控,可能在日志中不会留下明显痕迹。缺少告警不等于没有被入侵。

主动验证

安全团队可使用公开的PoC工具对自有资产进行验证测试,但务必在授权范围内执行:

# 仅用于授权测试环境
python3 main.py -u target_ip -p 23

修复与加固

立即修复

将GNU InetUtils升级到2.7-2或更高版本,该版本对环境变量展开逻辑进行了清洗,阻止了恶意命令行参数的注入:

# Debian/Ubuntu
sudo apt update && sudo apt upgrade inetutils-telnetd

# CentOS/RHEL
sudo yum update inetutils

临时缓解

如果无法立即打补丁:

  • 首选方案:直接禁用telnetd服务
  • 使用防火墙限制Telnet端口的访问源IP
  • 在网络层面阻断对TCP 23端口的入站连接
  • 监控telnetd进程的login调用参数,对包含-f参数的调用进行告警

长期建议

  • 在所有环境中用SSH替代Telnet
  • 对网络资产进行全面排查,识别所有暴露的Telnet服务(包括非标准端口)
  • 嵌入式设备和IoT产品在出厂前审计是否残留Telnet调试接口
  • 建立遗留协议的监控告警机制

总结

CVE-2026-24061是一个教科书式的输入验证缺失漏洞。一个未经清洗的环境变量,经过11年才被发现,却能直接导致远程免认证Root访问。这个案例再次说明:遗留协议和老旧组件中的安全债务,其风险往往被严重低估。

对于仍在使用Telnet的组织,建议将此漏洞作为推动协议迁移的契机。即使已经打补丁,暴露在网络上的Telnet服务本身就是一个高风险攻击面。

参考链接