Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-24061 — CVE-2026-24061 的概念验证漏洞利用程序,该漏洞是 telnetd 中通过 USER 环境变量的参数注入实现的认证绕过,允许未经认证即可获取 root shell 访问权限。 | Kitploit
工具/GitHubGitHub/przemytn/cve-2026-24061
漏洞分析漏洞利用Web安全网络安全渗透测试身份验证
GitHubprzemytn/cve-2026-24061

CVE-2026-24061

CVE-2026-24061 的概念验证漏洞利用程序,该漏洞是 telnetd 中通过 USER 环境变量的参数注入实现的认证绕过,允许未经认证即可获取 root shell 访问权限。

查看仓库
5个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-24061 - telnetd 认证绕过

这是什么

telnetd(来自 GNU InetUtils)中的参数注入漏洞。受影响版本为 1.9.3 至 2.7。CVSS 评分为 9.8。自 2026 年 1 月 26 日起被列入 CISA KEV,意味着该漏洞已在野外被积极利用。

整个技巧在于 telnetd 通过 NEW-ENVIRON(RFC 1572)从客户端获取环境变量 USER 的值,并将其未经任何验证直接拼接到 login(1) 的调用中。如果客户端发送 USER="-f root",telnetd 将执行:

root@kitploit:~
/usr/bin/login -p -h <host> -f root

login 中的 -f 标志表示"以该用户身份登录,无需密码"。直接获得 root shell,零认证。

机制

在 telnetd/telnetd.c 中有一个 login 调用模板:

root@kitploit:~
char *login_invocation = PATH_LOGIN " -p -h %h %?u{-f %u}{%U}";

%u 是来自 telnet 认证的用户(受信任)。%U 是来自客户端的原始 USER 环境变量值(不受信任)。当认证未启用时,会使用 %U。

变量展开位于 telnetd/utility.c 的 _var_short_name 函数中:

root@kitploit:~
case 'U':
    return getenv("USER") ? xstrdup(getenv("USER")) : xstrdup("");

完全没有过滤。客户端在 USER 中发送的任何内容都会直接进入 login 的命令行。不仅仅是 -f root 有效,理论上 login 接受的任何参数都可以被注入。

该漏洞是在 2015-03-19 的上游安全防护提交(fa3245ac)中引入的。讽刺的是,该提交本意是修复 USER 变量的处理。Debian 曾在 2019 年为此打过补丁(0028-telnetd-Scrub-USER-from-environment.patch),但在 Debian 10 修复 CVE-2020-10188 时补丁丢失,漏洞重新出现。因此 Debian 10+、Ubuntu 及其衍生版本也受影响。

PoC 的工作原理

main.py 是一个极简 telnet 客户端,它:

  1. 连接到 23 端口
  2. 在协商中接受 NEW-ENVIRON,其余选项回复 WONT
  3. 对 SEND 请求回复 IAC SB NEW_ENVIRON IS VAR "USER" VALUE "-f root" IAC SE
  4. telnetd 执行 login -f root,你获得 shell
  5. 之后像交互式会话一样工作,从输出中过滤 IAC 和 ANSI 转义序列
root@kitploit:~
客户端                                服务器
  |--- tcp 连接 ------------------->|
  |<-- IAC DO NEW_ENVIRON -------------|
  |--- IAC WILL NEW_ENVIRON ---------->|
  |<-- IAC SB NEW_ENVIRON SEND --------|
  |--- SB NEW_ENVIRON IS              |
  |    VAR "USER" VALUE "-f root"      |
  |    IAC SE ------------------------>|
  |    [telnetd: login -p -h x -f root]|
  |<-- root@host:~# ------------------|

使用方法

root@kitploit:~
python3 main.py <host>
python3 main.py <host> -p <port>

按 Ctrl+C 结束会话。

不要做的事

不要在没有 inetutils-telnetd 的系统上尝试此操作。netkit 的 telnetd 包是另一套代码,不受此特定漏洞影响。如果你连接后看到的是正常的 login 提示符而不是 shell,那么要么服务器已打补丁,要么它不是 inetutils telnetd。

不要将 payload 改为 -f <其他用户> 并期望它在所有系统上都能生效。某些发行版的 login(1) 对 -f 有额外限制。在标准的 Debian/Ubuntu 上,-f root 可以正常工作。

受影响版本

软件版本
GNU InetUtils1.9.3 - 2.7
Debian 10+inetutils-telnetd(补丁前)
Debian 11已在 2:2.0-1+deb11u3 中修复
Ubuntuinetutils-telnetd(补丁前)

补丁

官方修复添加了一个 sanitize() 函数,用于拒绝以 - 开头或包含 shell 元字符的值。该函数应用于所有变量的展开,而不仅仅是 USER。

root@kitploit:~
static char *
sanitize (const char *u)
{
  if (u && *u != '-' && !u[strcspn(u, "\t\n !\"#$&'()*;<=>?[\\^`{|}~")])
    return u;
  else
    return "";
}
  • fd702c0 - USER 补丁
  • ccba9f7 - 所有变量的净化处理
下载工具