找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

855

积分

0

好友

109

主题
发表于 13 小时前 | 查看: 0| 回复: 0

免责声明:文章中涉及的程序与方法可能具有攻击性,仅用于安全研究与教学目的。读者将其用于其他用途所产生的任何法律及连带责任,均由用户自行承担,文章作者不承担相应责任。

2026年1月,安全研究人员发现了存在于 GNU InetUtils 套件 telnetd 服务中的一个严重安全漏洞,编号为 CVE-2026-24061。该漏洞允许攻击者在未提供有效凭证的情况下,成功建立 Telnet 会话,从而获得对目标系统的未授权访问权限。此漏洞影响了截至 2.7-2 版本的所有 GNU telnetd。

尽管 Telnet 常被视为一种过时的遗留协议,但它仍活跃于部分 Unix/Linux 环境、嵌入式系统、网络设备以及工业控制系统(OT)相关的设施中。根据网络空间测绘搜索引擎 Shodan 的数据,全球范围内仍有超过21万台设备运行着 Telnet 服务器。另一家同类服务 Censys 的数据则显示,有约一百万台设备正在监听 Telnet 默认的23端口。虽然并非所有这些服务都使用了存在漏洞的 GNU telnetd 实现,但这足以说明潜在的受影响面之广。

鉴于其高达 9.8 分的 CVSS 关键评分,该漏洞构成了直接的初始访问威胁,对于那些将 Telnet 服务暴露在不安全网络中的系统尤为危险。下文将深入解析该漏洞的根源、利用方式,并分享相关的缓解建议。

漏洞根本原因剖析

问题的根源可以追溯到 2015 年的一次代码提交。在 telnetd.c 文件的第 49 至 63 行,定义了一个名为 login_invocation 的常量字符串,其作用类似于一个用于执行 /usr/bin/login 的命令行模板。

char *login_invocation =
...
    "-p -h %h %?u{-f %u}{%U}"
...
;

关键的变化在于,这次提交在字符串末尾新增了一个 %U 占位符。与此同时,在负责解析这类占位符的函数 _var_short_name 中,添加了一段处理字符 Uswitch-case 分支。

case 'U':
    return getenv(“USER”) ? xstrdup(getenv(“USER”)) : xstrdup(“”);

这段代码的逻辑很清晰:当解析到 %U 时,会用名为 USER 的环境变量的值来替换它。然而,核心问题在于:这个 USER 环境变量,恰恰是 Telnet 客户端可以通过协议进行设置的。

Telnet 协议允许客户端通过特定的选项协商,向服务器端传递环境变量。下图展示了在建立连接时,客户端通过 Suboption New Environment Option 传递环境变量数据的网络包交互过程。

TELNET协议环境变量协商数据包

telnetd 的登录流程函数 start_login 中(位于 pty.c 文件),程序会调用 expand_line(login_invocation) 来展开命令行模板。

cmd = expand_line(login_invocation);
if (!cmd)
    fatal(net, “can‘t expand login command line”);
argcv_get(cmd, “”, &argc, &argv);
execv(argv[0], argv);

这意味着,攻击者通过设置 USER 环境变量,可以间接控制最终传递给 /usr/bin/login 程序的命令行参数。通过查阅 login 命令的帮助文档,研究团队发现了一个极具威力的选项 -f

login命令帮助文档,-f选项被高亮

-f 标志的作用是“跳过登录认证”。因此,如果攻击者将 USER 环境变量设置为类似于 -f root 的值,那么经过 expand_line 函数展开后,最终执行的命令将变成 /usr/bin/login -p -h <hostname> -f root。这将导致 login 程序跳过密码验证,直接为攻击者开启一个 root 权限的 Shell,从而实现远程代码执行(RCE)

更深层次的发现:任意环境变量注入

在分析漏洞的过程中,研究团队还意识到一个被忽略的攻击面:攻击者不仅可以控制 USER 变量,理论上可以为 telnetd 进程设置任意环境变量。

在 Linux 默认机制下,环境变量会被子进程继承。因此,攻击者可以为 telnetd 守护进程及其启动的所有子进程预设环境变量。例如,尝试控制 PATH 变量,这可能会影响子进程对可执行文件的查找路径,从而引发其他安全问题。测试证实了这一可能性。

查看进程环境变量,验证PATH被篡改

虽然在此次漏洞利用中,控制 USER 变量已足够致命,但任意环境变量设置的能力无疑扩大了攻击面,可能在其他特定场景下衍生出新的利用方式,值得安全社区持续关注。

总结与防护建议

CVE-2026-24061 是一个利用门槛低、危害性极高的漏洞,为全球大量设备带来了现实威胁。为了有效防御该漏洞,我们建议采取以下措施:

  1. 立即升级:尽快将 GNU inetutils(或 GNU telnetd)升级到已修复此漏洞的最新版本(2.7-2 之后)。
  2. 禁用 Telnet:从根本上,应尽可能停用不安全的 Telnet 协议,转而使用 SSH(Secure Shell)等提供加密和强认证的现代协议进行远程管理。
  3. 网络隔离:如果因兼容性等原因必须使用 Telnet,应确保其服务不暴露在互联网或不可信网络中,并通过防火墙策略进行严格的访问控制。
  4. 安全加固:定期进行渗透测试与安全评估,检查系统中是否存在类似的老旧高危服务。

该漏洞的公开与分析,再次提醒我们:即使是被视为“过时”的技术组件,也可能因一处细微的代码改动而引入惊人的安全风险。保持软件更新、摒弃不安全协议,是构建稳固防御体系的基石。对这类漏洞的深入理解,有助于我们在更广阔的安全/渗透/逆向领域内提升发现和应对威胁的能力。

原文参考:SafeBreach Labs Root Cause Analysis and PoC Exploit for CVE-2026-24061




上一篇:Python FastAPI 异步集成 Redis 缓存:用装饰器解决高并发接口性能瓶颈
下一篇:OpenAI发布Prism:免费LaTeX云端工作空间,集成GPT-5.2加速科研写作
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-31 22:57 , Processed in 0.322505 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表