白帽故事 · 2026年1月28日

CVE-2026-24061:GNU telnetd 致命认证绕过漏洞

前言

2026年1月,安全研究人员 Kyu Neushwaistein(亦称 Carlos Cortes Alvarez)发现 GNU InetUtils 套件中的 GNU telnetd 服务存在可被绕过认证的漏洞。该漏洞被标识为 CVE-2026-24061允许攻击者在不提交有效凭证的情况下建立 Telnet 会话,从而获得对目标系统的未授权访问权限。 此漏洞存在于 GNU telnetd 服务直至 2.7-2 版本的所有版本中。该漏洞的设计思路颇具年代感,且危险性极高、利用简便,其潜藏十余年未被发现的事实令人震惊。

尽管 Telnet 被普遍视为用于远程连接与命令执行的遗留协议,但它仍在部分 Unix/Linux 环境、嵌入式系统、网络设备以及 OT 相邻基础设施中处于启用状态。根据专注于搜索互联网连接设备、防火墙及服务器的搜索引擎 Shodan 的数据,全球目前有 212,396 台设备运行着 Telnet 服务器,尽管并非所有这些设备均使用了存在漏洞的 GNU telnetd 实现。

另一家与 Shodan 类似的网络测绘服务 Censys 数据显示,有 100 万台设备正在监听端口 23(Telnet 默认端口),表明这些设备很可能开放了 Telnet 服务。同样需要指出,这些服务可能并非特指易受攻击的 GNU telnetd,但这的确反映了潜在的受影响范围。

基于这些数据,此漏洞的影响可能非常重大且深远。鉴于其 9.8 分的 CVSS 关键评分,该漏洞构成了直接的初始访问风险,对于那些将 Telnet 服务暴露在不信任网络中的系统而言尤其如此。

SafeBreach Labs 安全研究团队着手深入调查该漏洞的根本原因。作为其标准研究流程的一部分,该团队开发了针对此漏洞的概念验证 (PoC) 漏洞利用程序。

下文首先概述了该团队对 CVE-2026-24061 根本原因的分析及其可利用性。其次,分享了研究过程中发现的另一层控制能力——利用此漏洞为 Telnet 服务进程及其子进程设置任意环境变量。最后,阐述了该团队如何与更广泛的安全社区共享这些发现,包括提供包含 PoC 漏洞利用程序的 GitHub 仓库,以协助各组织提升其安全防护能力。

CVE-2026-24061 研究流程详述

根本原因剖析

该漏洞的根源可追溯至 2015 年的一次代码提交。研究人员需要审视其中被引入的问题代码行:

  • 代码中构造了一个字符串,其形态类似于执行 /usr/bin/login 并附带参数的命令行。其中:
    • 该次提交在常量字符串中添加了 %U 占位符。
    • 变量 PATH_LOGIN 的值被固定定义为 /usr/bin/login

  • 在此次提交中,研究人员并未发现对原有代码的修改,仅看到了新增的代码。新增内容是一个 switch-case 分支,旨在处理 U 这个特定字符。

为理解这一改动为何会引发安全风险,需先回顾 Telnet 的工作机制。当用户远程发起 Telnet 连接时,必须首先通过身份验证。为完成此认证流程,telnetd 守护进程会调用 Linux 系统中已存在的、负责此逻辑的可执行文件——/usr/bin/login。该程序负责验证用户身份,并为其创建一个提供交互式 Shell 的会话。

%U 占位符的插入点位于文件 telnetd.c 的第 49 至 63 行。它被添加到名为 login_invocation 的常量字符串的“格式化模板”中,作为一个新选项。

若追查 login_invocation 的使用位置,会发现它出现在 start_login 函数中。start_login 函数是主导登录流程的核心部分,定义于文件 pty.c 内。下图展示了 login_invocation 变量的使用上下文:

第一行的 expand_line 函数接收 login_invocation 作为参数。经过一系列处理后,程序流最终会到达 _var_short_name 函数。

而新增的 switch-case 分支,正位于这个 _var_short_name 函数内部。

简要分析这行代码即可揭示 %U 在“命令行”字符串中的作用:其目的是用名为 USER 的环境变量的值来动态替换占位符 %U

关键在于,这个 USER 环境变量是攻击者可以通过 Telnet 协议进行控制的

Telnet 协议允许客户端发送一系列特定的 Telnet 指令,最终能够设置 USER 环境变量。该变量原本设计用于在认证(自动登录)时预填充用户名。下图中标记的 SUBOPTION 数据包交换过程,即为客户端提交环境数据的最终步骤

那么,设置环境变量为何会导致认证被绕过? 研究人员再次审视了 start_login 函数中的相关代码块:

这意味着,攻击者能够为 /usr/bin/login 可执行文件注入新的命令行标志或参数。通过查阅 login 二进制文件所支持的标志列表,研究团队发现了一个可利用的、功能极其强大的选项:

-f 标志能够跳过交互式认证环节,直接将用户置于一个 root Shell 中。这实质上意味着,在任何运行 GNU telnetd 2.7-2 及之前版本的服务器上,攻击者都能获得一个威力巨大的远程代码执行 (RCE) 权限。

深入发现:额外的环境变量控制能力

对该漏洞的分析不仅助力研究团队成功创建了漏洞利用程序,还揭示了额外的攻击面。研究过程中,团队意识到受影响的远程 telnetd 服务器还赋予了攻击者另一种能力:在其进程上下文中设置任意环境变量(至少基于现有分析可以如此推断)。

在 Linux 系统的默认设定下,环境变量会被子进程继承。因此,这实际上意味着,作为 Telnet 服务的客户端,攻击者可以为 telnetd 守护进程所启动的任何子进程预设其所需的任意环境变量。

为验证这一推断,研究团队尝试操作了除 USER 之外的其他环境变量。例如,他们测试了对进程行为可能产生最广泛影响的 PATH 变量。测试结果证实了他们的猜想——攻击者能够将 telnetd 所运行的任何子进程(包括至关重要的 /usr/bin/login)的 PATH 变量篡改为任意指定的值

总结与建议

CVE-2026-24061 是一个严重级别高且易于利用的漏洞,可能危及全球数量庞大的设备。为协助缓解其潜在影响,SafeBreach 采取了多项行动:

  • 公开漏洞根本原因分析报告,旨在协助其他网络安全从业者深入理解相关风险,并推动更广泛安全社区内的进一步研究。
    • 为有效防御 CVE-2026-24061 所构成的威胁,研究团队建议各组织采取以下措施:
      • 立即升级至已修复该漏洞的 GNU telnetd 版本(2.7-2)。
      • 尽可能减少乃至弃用 Telnet 协议,转而采用 SSH 等更安全的现代化协议作为替代。
  • 开放 GitHub 研究仓库,其中提供了该漏洞的公开 PoC 漏洞利用程序。该程序使用 Python 编写,完整模拟了 Telnet 协商机制。
  • 在 SafeBreach 安全验证平台中集成相关的攻击模拟场景,以帮助其客户快速评估自身防御体系应对此类威胁的有效性。

原文:https://www.safebreach.com/blog/safebreach-labs-root-cause-analysis-and-poc-exploit-for-cve-2026-24061/