CVE-2026-24061 telnet 远程免密root telnet

参数注入,无需任何密码,便以 root 身份获得了 shell 访问权限。

RestXtra Lv7

漏洞原理:参数注入导致认证绕过

该漏洞的根本原因是一个参数注入问题(CWE-88: Improper Neutralization of Argument Delimiters in a Command)。

  • 问题根源:telnetd 在启动时,若使用了 -a 选项(启用自动登录),它会读取客户端传来的 USER 环境变量作为登录用户名。关键在于,telnetd 在将USER 环境变量传递给/usr/bin/login 程序之前,未进行任何净化处理。
  • 攻击手法:攻击者利用 Telnet 协议的 NEW-ENVIRON 选项,将 USER 环境变量的值设置为 -f root。
  • 漏洞利用:telnetd 收到这个值后,直接将其作为参数拼接到调用 login 的命令行中。
  • 认证绕过:最终执行的命令类似于 /bin/login -f root。在 Linux 系统中,login 命令的 -f 参数作用是跳过密码验证,直接以指定用户身份登录。因此,攻击者无需任何密码,便以 root 身份获得了 shell 访问权限。

该漏洞由研究员 Kyu Neushwaistein 于 2026 年 1 月 19 日发现并报告,它源自 2015 年 3 月 19 日的一次代码提交,并随 2015 年 5 月 12 日发布的 1.9.3 版本正式引入。

漏洞验证(PoC)与原理

目前已存在多个公开的漏洞验证(PoC)脚本。以下是一个典型的 Python PoC 利用流程:

PoC 示例

  1. 环境准备
    使用 Docker 快速搭建一个漏洞环境:

bash

1
docker run -d -p 23:23 --name vulnerable-telnetd joshbeck2024/ctf-cve-2026-24061-telnetd
  1. PoC 脚本核心逻辑
    一个典型的 Python PoC 脚本 exploit.py 核心步骤如下:
  2. 连接目标:连接到目标主机的 Telnet 端口(默认 23)。
  3. 协商环境变量:向服务器发送 WILL NEW_ENVIRON 和 WILL ENVIRON 命令,表明客户端支持环境变量传递。
  4. 注入恶意变量:在收到服务器的 DO NEW_ENVIRON 请求后,发送精心构造的数据包:SB NEW_ENVIRON IS VAR “USER” VALUE “-f root” SE。这个操作即是将 USER 环境变量的值设置为 -f root。
  5. 触发漏洞:服务器端 telnetd 收到该变量后,会执行命令 /bin/login -f root。
  6. 获取Root Shell:命令执行成功,攻击者直接获得一个无需密码的 root 权限 shell。
  7. 运行PoC
1
2
# 修改 exploit.py 中的目标IP
python3 exploit.py

如果成功,将直接获得一个 root 权限的 shell。

PoC 原理:滥用 Telnet 协议

这个 PoC 的核心是滥用 RFC 1572(Telnet 环境选项) 协议。攻击者通过该协议规定的 NEW-ENVIRON 子协商,将恶意载荷 -f root 作为 USER 环境变量的值传递给服务器。telnetd 在处理该变量时未做任何检查,直接将其拼接到命令中,从而实现了参数注入攻击。

修复建议

由于该漏洞极易利用且后果严重(CVSS 9.8),建议您立即采取以下措施:

1. 立即升级(首选方案)

将 GNU InetUtils 升级到已修复此漏洞的 2.8 或更高版本。

各主要发行版已提供修复更新,可参考以下命令:

  • Debian/Ubuntu:
    bash

    1
    sudo apt update && sudo apt install inetutils-telnetd

    各 Ubuntu 版本的具体修复版本号可参考其安全公告。

  • RHEL/CentOS:
    bash

    1
    sudo dnf upgrade inetutils
  • Alpine:
    bash

    1
    apk upgrade inetutils

2. 禁用 Telnet 服务(推荐)

如非必要,立即停止并禁用 telnetd 服务,改用更安全的 SSH 协议。

bash

1
2
systemctl stop inetutils-telnetd
systemctl disable inetutils-telnetd

3. 网络层隔离(临时缓解)

如果无法立即升级或禁用,应在防火墙上封锁外部对 Telnet 端口(默认 23)的访问。

bash

1
iptables -A INPUT -p tcp --dport 23 -j DROP

或通过网络隔离,限制其仅能被内网可信主机访问。

4. 自定义 login 程序(临时方案)

作为一种临时规避措施,可以让 telnetd 使用一个禁止使用-f 参数的自定义login 程序。

  • 标题: CVE-2026-24061 telnet 远程免密root telnet
  • 作者: RestXtra
  • 创建于 : 2026-07-25 18:32:02
  • 更新于 : 2026-07-25 18:32:56
  • 链接: https://restxtra.github.io/2026/07/25/2026-07-25-CVE-2026-24061-telnet-远程免密root-telnet/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。